在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參數