MySQL主從數據同步延時分析


一、MySQL數據庫主從同步延遲                                                             

要了解MySQL數據庫主從同步延遲原理,我們先從MySQL的數據庫主從復制原理說起:

MySQL的主從復制都是單線程的操作,主庫對所有DDL和DML產生的日志寫進binlog,由於binlog是順序寫,所以效率很高。

Slave的IO Thread線程從主庫中bin log中讀取取日志。
Slave的SQL Thread線程將主庫的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是隨即的,不是順序的,成本高很多。

由於SQL  Thread也是單線程的,如果slave上的其他查詢產生lock爭用,又或者一個DML語句(大事務、大查詢)執行了幾分鍾,那么所有之后的DML會等待這個DML執行完才會繼續執行,這就導致了延時。

二、MySQL數據庫主從同步延遲產生原因                                                 

    1Master負載

    2Slave負載

    3、網絡延遲

    4、機器配置(cpu、內存、硬盤)

    總之,當主庫的並發較高時,產生的DML數量超過slave的SQL Thread所能處理的速度,或者當slave中有大型query語句產生了鎖等待那么延時就產生了。

三、MySQL數據庫主從同步延遲解決方案                                                       

     1salve較高的機器配置

     2Slave調整參數

       我們從《MySQL數據丟失情況分析》中知道,為了保障較高的數據安全性,配置sync_binlog=1,innodb_flush_log_at_trx_commit = 1 等設置。而Slave可以關閉binlog,innodb_flush_log_at_trx_commit也可以設置為0來提高sql的執行效率

     3、並行復制

       各版本MySQL並行復制的實現及優缺點

       MySQL 5.7 並行復制實現原理與調優

 MySQL5.7 的真正並行復制enhanced multi-threaded slave(MTS)是否已經完全解決了主從同步復制的延遲,還需要在實際項目中驗證。

 


免責聲明!

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



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