在mysql-5.6中innodb_flush_log_at_trx_commit的默認值爲1.
mysql> show variables like "innodb_flush_log%";
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 1 |
+--------------------------------+-------+
取值範圍一般可設置爲0,1,2.
0代表log buffer以秒爲單位刷寫日誌文件到本地磁盤,提交事務的時候不做任何操作。mysqld崩潰的時候會丟失最後一秒的事務。
1代表每次提交事務的時候,都會將log buffer刷寫到日誌。
2代表每次提交事務都會寫(write)日誌,但並不會執行刷(flush)的操作。定時刷到日誌文件。但不能保證100%刷到磁盤。當系統崩潰或者斷電時候纔會丟失最後一秒的數據,innodb恢復時會忽略。
當使用source導入數據庫時,效果比較明顯,可以設置innodb_file_per_table = 1來查看文件,以對比所耗費時間。服務器1G內存,mysql的innodb_buffer_pool_size=600M時,設置爲2,速度提升3倍多(sql文件800M)。對應查詢速度變慢。