[MySQL] 參數: innodb_flush_log_at_trx_commit和sync_binlog


MySQL參數: innodb_flush_log_at_trx_commit和sync_binlog

innodb_flush_log_at_trx_commitsync_binlog是MySQL控制磁盤寫入策略的重要參數.

  • innodb_flush_log_at_trx_commit

    1. innodb_flush_log_at_trx_commit=0時, log buffer將每秒一次地寫入log file, 並且log file的flush(刷新到disk)操作同時進行. 此時, 事務提交是不會主動觸發寫入磁盤的操作.

    2. innodb_flush_log_at_trx_commit=1時(默認), 每次事務提交時, MySQL會把log buffer的數據寫入log file, 並且將log file flush(刷新到disk)中去.

    3. innodb_flush_log_at_trx_commit=2時, 每次事務提交時, MySQL會把log buffer的數據寫入log file, 但不會主動觸發flush(刷新到disk)操作同時進行. 然而, MySQL會每秒執行一次flush(刷新到disk)操作.

      然而, 每秒flush並不能確保100%每秒發生, 因為os調度問題.

    默認的1可以獲得更好地數據安全, 但性能會打折扣. 不過非1時, 在遇到crash可能會丟失1秒的事務; 設置為0時, 任何mysqld進程crash會丟失上1秒的事務; 設置為2時, 任何os crash或者機器掉電會丟失上1秒的事務; InnoDB的crash recovery運行時會忽略這些數據.

  • sync_binlog

      ![](http://images2015.cnblogs.com/blog/748358/201603/748358-20160327131735761-1330837796.png)
    
    1. sync_binlog=0時(默認), 如os刷新其他文件的機制一樣, MySQL不會刷新log buffer到disk中去, 而是依賴os機制刷新log buffer數據到binary log中.

    2. sync_binlog=1時, MySQL在寫1次二進制日志binary log時, 會使用fdatasync()函數將二進制binary log同步到disk中去.(安全性最高的配置)

    3. sync_binlog=N(N>1)時, MySQL在寫N次二進制日志binary log時, 會使用fdatasync()函數將二進制binary log同步到disk中去.


當兩個參數設置為雙1的時候, 寫入性能最差. 當sync_binlog=N(N>1) && innodb_flush_log_at_trx_commit=2, MySQL的寫操作才能達到最高性能.


ref:
https://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM