MySQL 5.7 提供了更加合适的默认值。Morgan Tocker 制作了一份关于 MySQL 5.7 的特性完整列表,这是一个很好的参考资料。例如,下面的几个变量都是默认设置的:
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 监控面板提供的信息来执行进一步的调优。
根据监控图表,我们能进一步做什么样的优化?