在mysql 5.5和5.5以前innodb的logfile最大设置为4GB,在5.6以后的版本中logfile最大的可以设为512GB.
innodb的logfile就是事务日志,用来在mysql crash后的恢复.所以设置合理的大小对于mysql的性能非常重要
在5.5的版本中,default设置为5M.在新建的mysql服务器中,需要尽快修改该参数.
logfile大小对于性能的影响主要体现在checkpoint上,对于 checkpoint的原理可以参考相关的关系数据库
理论,对于其他厂商的数据库也有checkpoint机制.可以通过engine innodb的状态来查看当前的 log和checkpoint
的位置
mysql> show engine innodb status\G;
...........
Log sequence number 2944118284
Log flushed up to 2944118283
Last checkpoint at 2724318261
..........
2944118284-2724318261=209MB
通过以上的计算可以看出当前的log序号到最后一次的checkpoint的时候,中间距离了209MB的空间.官方文档建议
距离最好不要超过innodb_log_files_in_group*innodb_log_file_size的0.75, innodb_log_files_in_group的
default值为2.
一般太小的logfile size的表现情况就是checkpoint比较频繁,导致刷新dirty page到磁盘的次数增加,在
刷新时会使整个系统变得很慢.所以这种情况要尽量避免.
从例子中得知当前的innodb_log_file_sze为5M 是远远不够的.
根据公式(innodb_log_file_size*innodb_log_files_in_group(default 2))*0.75=209M,可以算出合理的
innodb_log_file_size为140MB.
修改:
1,确认innodb_fast_shutdown=1
mysql> select @@innodb_fast_shutdown;
+------------------------+
| @@innodb_fast_shutdown |
+------------------------+
| 1 |
+------------------------+
2,关闭mysql
[root@localhost data]# mysqladmin -u root -pXXXX --socket=/tmp/mysql.sock shutdown
3,备份原有的logfile
4,修改/etc/my.cnf参数
innodb_log_file_size=140M
5,启动mysql服务器,确认生效.
mysql> select @@innodb_log_file_size;
+------------------------+
| @@innodb_log_file_size |
+------------------------+
| 146800640 |
+------------------------+
1 row in set (0.00 sec)
优化innodb_log_file_size参数