MySQL 5.7具有更好的默认值。Morgan Tocker创建了一个页面,其中包含MySQL 5.7中功能的完整列表(http://www.thecompletelistoffeatures.com/),并且是一个很好的参考点。例如,默认情况下设置了以下变量:
- innodb_file_per_table = ON
- innodb_stats_on_metadata =OFF
- innodb_buffer_pool_instances = 8(如果innodb_buffer_pool_size <1GB,则为1)
- query_cache_type = 0; query_cache_size = 0; (禁用互斥锁)
在MySQL 5.7中,只有四个真正重要的变量需要更改。但是,对于特定的工作负载和硬件,可能还需要调整其他InnoDB和全局MySQL变量。
首先,将以下设置添加到[mysqld]部分下的my.cnf。您将需要重新启动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
描述
|
下一步是什么?
这些是任何新安装的良好起点。还有许多其他变量可以提高某些工作负载的MySQL性能。通常,我会设置一个MySQL监视/绘图工具(例如,Percona Monitoring and Management平台),然后检查MySQL仪表板以执行进一步的调整。
我们可以根据图表进一步调整什么?
InnoDB缓冲池大小。看一下图:
如我们所见,由于我们有可用的RAM并且空闲页面的数量与总的缓冲池相比很小,因此我们可能会受益于将InnoDB缓冲池的大小稍微增加到〜10G。
InnoDB日志文件大小。看一下图:
正如我们在这里看到的,InnoDB通常每小时写入2.26 GB的数据,超过了日志文件的总大小(2G)。现在我们可以增加innodb_log_file_size 变量并重新启动MySQL。或者,使用“显示引擎InnoDB状态”来计算合适的InnoDB日志文件大小。
其他变量
还有许多其他的InnoDB变量可以进一步调整:
innodb_autoinc_lock_mode
设置 innodb_autoinc_lock_mode = 2(交错模式)可以消除对表级AUTO-INC锁定的需要(并且当使用多行插入语句通过auto_increment主键将值插入表中时,可以提高性能)。这需要binlog_format = ROW 或MIXED (并且ROW是MySQL 5.7中的默认值)。
innodb_io_capacity和 innodb_io_capacity_max
这是一种更高级的调整,仅在您始终执行大量写入操作时才有意义(不适用于读取操作,即SELECT)。如果您确实需要对其进行调整,最好的方法是知道系统可以执行多少IOPS。例如,如果服务器有一个SSD驱动器,我们可以设置innodb_io_capacity_max = 6000 和innodb_io_capacity = 3000 (最大值的50%)。最好运行sysbench或其他任何基准测试工具来基准化磁盘吞吐量。
但是我们是否需要担心此设置?看一下缓冲池的“ 脏页 ”图:
在这种情况下,脏页的总数很高,看来InnoDB跟不上刷新它们的速度。如果我们有一个快速磁盘子系统(即SSD),则可能会受益于增加innodb_io_capacity 和innodb_io_capacity_max。
结论或TL; DR版本
新的MySQL 5.7默认值对于一般用途的工作负载要好得多。同时,我们仍然需要配置InnoDB变量以利用包装盒上的RAM量。安装后,请按照下列步骤操作:
- 将InnoDB变量添加到my.cnf(如上所述),然后重新启动MySQL
- 安装监视系统(例如,Percona监视和管理平台)
- 查看图表,确定MySQL是否需要进一步调整