设为首页 收藏本站
查看: 854|回复: 0

[经验分享] MySQL 5.7 安装完成后,立即要调整的性能选项

[复制链接]

尚未签到

发表于 2017-12-11 22:24:29 | 显示全部楼层 |阅读模式
  原文:MySQL 5.7 Performance Tuning Immediately After Installation
  本文是对上一篇《安装 MySQL 后,需要调整的 10 个性能配置项》的更新,并且涵盖了 MySQL 5.7 在安装后,要立刻调整的的性能选项。
  几年前,Stephane Combaudon 写了一篇博文 《安装 MySQL 后,需要调整的 10 个性能配置项》(Ten MySQL performance tuning settings after installation) 内容覆盖了 MySQL 5.1, MySQL 5.5 和 MySQL 5.6 这几个老版本的 MySQL。在本文中,我将研究如何对 MySQL 5.7 进行调优(关注 InnoDB 存储引擎)。
  一个好消息是,MySQL 5.7 提供了更加合适的默认值。Morgan Tocker 制作了一份关于 MySQL 5.7 的特性完整列表,这是一个很好的参考资料。例如,下面的几个变量都是默认设置的:


  • innodb_file_per_table = ON
  • innodb_stats_on_metadata = OFF
  • innodb_buffer_pool_instances = 8 (or 1 if innodb_buffer_pool_size < 1GB)
  • query_cache_type = 0; query_cache_size = 0; (disabling mutex)
  在 MySQL 5.7 中,实际上只有 4 个重要的选项需要去调整。然而,还有其他的 InnoDB 或者全局的 MySQL 选项可能需要根据特定的负载和硬件来做出调整。
  首先,在 my.cnf 中的[mysqld] 节下面添加如下配置。配置完成之后,需要重启 MySQL 服务:
  

[mysqld]  
# other variables here
  
innodb_buffer_pool_size = 1G # (adjust value here, 50%-70% of total RAM)
  
innodb_log_file_size = 256M
  
innodb_flush_log_at_trx_commit = 1 # may change to 2 or 0
  
innodb_flush_method = O_DIRECT
  

  说明:

选项

innodb_buffer_pool_size
设置为 RAM 大小的 50%-70%,不需要大于数据库的大小
innodb_flush_log_at_trx_commit
1(默认值),0/2 (性能更好,但稳定性更差)
innodb_log_file_size
128M – 2G (不需要大于 buffer pool)
innodb_flush_method
O_DIRECT (避免双缓冲技术)
下一步
  对于新安装的实例而言,那些设置都是很好的起点。还有许多其他的选项,在某些场景下,可以提高 MySQL 的性能。通常,我会部署一套 MySQL 监控/图形工具(例如,Percona 监控语句管理平台,俗称:PMMM),然后根据 MySQL 监控面板提供的信息来执行进一步的调优。

根据监控图表,我们能进一步做什么样的优化?
  InnoDB 缓冲池大小的信息,看下面这个图:

  
https://www.percona.com/blog/wp-content/uploads/2016/10/Screen-Shot-2016-10-03-at-12.48.13-PM.png
  从上面可以看出,可用的 RAM 和空闲的页的数量小于缓冲池的总大小,我们可以把 InnoDB 缓冲池的大小增加到 10G 从而获得更好的性能。
  InnoDB redo 日志的大小的信息,看下面这个图:

  可以看到,InnoDB 通常每小时写 2.26GB 的数据,这已经超出了 redo 日志的大小(2G)。现在我们可以增大 innodb_log_file_size 选项,然后重启 MySQL。另外,使用 &quot;show engine innodb status&quot; 命令来计算一个合适的 InnoDB redo 日志的大小值。

其他选项
  有很多其他的 InnoDB 选项可以进一步调整:


  • innodb_autoinc_lock_mode
  设置 innodb_autoinc_lock_mode = 2 (interleaved mode) 可以去掉表级 AUTO-INC 锁的必要性(还可以提高在使用多行插入语句来插入数据到拥有自增主键的表的时候的性能)。这要求 binlog_format=ROW 或者 MIXED(在 MySQL 5.7 中,默认值是 ROW)。


  • innodb_io_capacity 和 innodb_io_capacity_max
  这是一个更加高级的调优,只有当你在频繁写操作的时候才有意义(它不适用于读操作,例如 SELECTs)。若你真的需要对它进行调整,最好的方法是要了解系统可以支持多大的 IOPS。譬如,假设服务器有一块 SSD 硬盘,我们可以设置 innodb_io_capacity_max=6000 和 innodb_io_capacity=3000(最大值的一半)。运行 sysbench 或者任何其他基准工具来对磁盘吞吐量来进行基准测试是一个好方法。
  然而,我们需要去担心这个选项吗?看下面这张缓冲池的&quot;脏页&quot;

  在这种情况下,脏页的总量很大,而且看起来 InnoDB 刷新脏页的速度跟不上脏页的速度。如果我们有一个高速的磁盘子系统(例如:SSD),可以增加 innodb_io_capacity 和 innodb_io_capacity_max 来得到更好的性能。

总结(太长,请不要看版本)
  新的 MySQL 5.7 配置项的默认值对于一般的负载更加友好。与此同时,我们仍然需要配置 InnoDB 的选项来发挥出大内存的优势。
  
安装完毕之后,遵循以下步骤来操作:


  • 如上所述,在 my.cnf 中配置 InnoDB 选项,并重启 MySQL 服务
  • 部署一套监控系统(例如:Percona 监控语句管理平台)
  • 通过监控图形来判断是否对 MySQL 进一步调优

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423156-1-1.html 上篇帖子: MySQL常见建表选项及约束 下篇帖子: 虫师大人不华,君子务实。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表