mysql 主從同步延遲原因以及解決方式


   常見原因以及解決方案:

1、表無主鍵或者二級索引:

     原因: 若binlog 為row格式且表無主鍵或者二級索引,當對大表進行dml操作(update、insert、delete),從庫在對binlog日志應用時會根據主鍵或者二級索引檢索需要更改的行,如對應的表無主鍵索引或者二級索引,就會產生大量的全表掃描降低了日志應用速度,從而產生數據延遲

    解決方案:為所有表創建主鍵,若表不能創建主鍵,建議在選擇性高的列上創建二級索引

2、大事務:

     原因:當主實例執行大數據量的 DML 操作,大量的 binlog 日志傳送到從庫時,從庫需要花費與主實例相同的時間來完成相應事務,進而導致從庫出現數據延遲。

     解決方案:建議將大事務拆分為小事務,通過 where 條件限制每次要處理的數據量,有助於從庫迅速完成事務的執行,從而避免出現從庫數據的延遲。

3、ddl操作:

     原因:與大事務原理類似,若 DDL 操作在主實例的執行時間很長,在從庫也會花費相同甚至更長時間來執行該操作,從而阻塞了 DDL 操作。

     解決方案:建議在業務低峰期執行 DDL 操作。若因災備實例、只讀實例的查詢業務而阻塞了 DDL 操作,建議直接 KILL 掉引起阻塞的會話來恢復主從數據的同步。

4、實例主機配置太低:

     原因:只讀實例、災備實例的規格小於主實例且負載較高,會導致只讀實例、災備實例的數據延遲。

     解決方案:建議只讀實例、災備實例規格大於等於主實例,如果只讀實例、災備實例承載了大量的分析類業務導致實例負載過高,需將其實例規格升級至合適的配置或 者對其性能低效的 SQL 進行優化。

5、waiting for table metadata lock:

    原因:長事物運行,阻塞 DDL,繼而阻塞所有同表的后續操作;未提交事物,阻塞 DDL,繼而阻塞所有同表的后續操作。

     解決方案:建議對實際業務和實例進行診斷,排查慢查詢等指標,來定位耗時的長事務

6、表統計信息缺失或者失效:

      原因:sql執行計划的產生依賴於統計信息,若表上統計信息缺失或者無效,優化器有可能產生低效率的執行計划,從庫在解析binlog執行sql語句時由於效率不佳的執 行計划導致執行速度變慢,從而產生數據延遲。

     解決方案:重新收集表的統計信息

 


免責聲明!

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



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