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

2022-06-17 23:33:17 字數 1074 閱讀 4179

常見原因以及解決方案:

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語句時由於效率不佳的執 行計畫導致執行速度變慢,從而產生資料延遲。

解決方案:重新收集表的統計資訊

mysql出現主從同步延遲有哪些原因?如何解決?

1 從庫太多導致複製延遲 優化 建議從庫數量3 5個為宜2 從庫的硬體比主庫差 優化 提公升硬體效能3 慢sql語句過多 優化 sql語句執行時間太長,需要優化sql,包括建立索引或者採用分庫分表等。4 主從複製的設計問題 優化 主從複製單執行緒,可以通過多執行緒io方案解決 另外mysql5.6....

mysql主從同步延遲問題

mysql配置讀寫分離後,master負責所有的寫操作,而從伺服器負責一切的讀操作。其實在資料庫中使用的最多的操作就是讀操作,一般而言,資料庫會有較大可能成為整個系統的瓶頸。導致資料庫主從同步延遲較大的問題一般有以下幾種。1 從伺服器配置較低,只需要公升級從伺服器的配置即可 2 主庫的qps過高導致...

100 解決Mysql主從同步延遲問題

強制讀主過於粗暴,畢竟只有少量寫請求,很短時間,可能讀取到髒資料。有沒有可能實現,只有這一段時間,可能讀到從庫髒資料的讀請求讀主,平時讀從呢?可以利用乙個快取記錄必須讀主的資料。如上圖,當寫請求發生時 1 寫主庫 2 將哪個庫,哪個表,哪個主鍵三個資訊拼裝乙個key設定到cache裡,這條記錄的超時...