關於控制mysql的binlog日志刷入磁盤頻率的參數理解


最近一直執迷於mysql的binlog日志刷入磁盤頻率的幾個參數,一直無法完全理解清楚,今天反復的看官方文檔,並且將看到的心得記錄一二。

先說個概念:

                   數據臟頁:當mysql的內存數據頁和磁盤的數據不一致的時候,內存的數據,就叫做臟數據,刷盤的過程就是刷臟頁。

【關於控制binlog刷入磁盤的參數】

     1.sync-binlog:控制binlog刷入磁盤的頻率

          default vaule:1

       0:禁止MySQL服務器將二進制日志同步到磁盤。相反,MySQL服務器依賴於操作系統不時地將二進制日志刷新到磁盤,就像處理其他文件一樣。此設置提供了最佳性能,但是在出現電源故障或操作系統崩潰時,服務器可能提交了未同步到二進制日志的事務。

     1:允許在事務提交之前將二進制日志同步到磁盤。這是最安全的設置,但是由於磁盤寫操作的增加,可能會對性能產生負面影響。在出現電源故障或操作系統崩潰時,二進制日志中缺少的事務僅處於准備狀態。這允許自動恢復例程回滾事務,從而保證二進制日志中沒有丟失任何事務。

     N:其中N是0或1之外的值:在收集了N個二進制日志提交組之后,將二進制日志同步到磁盤。在出現電源故障或操作系統崩潰時,服務器可能提交了未刷新到二進制日志的事務。由於磁盤寫操作數量的增加,該設置可能會對性能產生負面影響。值越大,性能越好,但是數據丟失的風險越大。

官方:https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

    2.innodb-flush-log-at-trx-commit:(控制redo log刷新到磁盤)控制提交操作的嚴格的ACID遵從性和更高的性能之間的平衡,當提交相關的I/O操作被重新安排並成批執行時,可以獲得更高的性能。通過更改默認值可以獲得更好的性能,但是在崩潰時可能會丟失事務。

     default vaule:1

   1: 默認設置為1是完全符合ACID要求的。日志在每次事務提交時被寫入並刷新到磁盤。
   0:設置為0時,每秒將日志寫入並刷新到磁盤一次。沒有刷新日志的事務可能在崩潰中丟失。
   2:如果設置為2,則在每個事務提交之后寫入日志,並每秒刷新一次磁盤。沒有刷新日志的事務可能在崩潰中丟失。

以上兩個參數都是關於binlog刷入到磁盤,默認是設置成雙一是最安全的,在系統崩潰的時候,數據不會丟失的。

 

 

2.開啟binlog后事務的提交順序

  1. 先記錄 undo/redo log,確保日志刷到磁盤上持久存儲。
  2. 更新數據記錄,緩存操作並異步刷盤。
  3. 將事務日志持久化到 binlog。
  4. 提交事務,在 redo log 中寫入commit記錄。

參考文檔:https://www.cnblogs.com/wupeixuan/p/11734501.html

                 http://blog.itpub.net/22664653/viewspace-1063134/

                https://www.cnblogs.com/mao3714/p/8734838.html  

                 https://blog.csdn.net/sofia1217/article/details/53968205

 


免責聲明!

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



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