Bootstrap

MySQL优化innodb_log_file_size参数

在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参数

;