優化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參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章