Mysql主從延時

2022-09-19 14:06:09 字數 1256 閱讀 1526

很多公司都採用的mysql主從架構,相信很多人困擾於主從延時問題,這篇文章就系統的講述下mysql主從延時問題。

從canal官網抄個圖

主從同步.png

大致流程如下:

mysql-主從流程.jpg

可以看出從master接到乙個寫請求到資料回放到從庫的時間為t1+t2+t3,

主從延時的時間為t2+t3。一般來說這部分時間為200ms左右,這部分延時是無法避免的。這就導致一些寫入立即讀的場景可能得不到剛才變化的結果。比如,商家發布商品成功後,如果立即跳到已發布商品頁,可能會查不到剛剛發布的商品。

這時商家可能會有很多問號。

這種問題解決方案有三種:

產品互動做調整,在寫請求後讀操作前,加入一些拖時間的互動,以保證資料已經同步到從庫。比如,商家發布商品後,彈出乙個彈框(繼續發布商品 or 去已發布商品頁)。

強制讀主庫。這種方案看起來很low,但是我相信大部分公司都採用的這種方案,原因也很直白:簡單呀!採用了這種方案也就意味著拋棄了從庫的讀擴充套件性。

選擇性讀主庫。

mysql選擇性讀主.jpg

棒!接下來,我們來分析主從同步延時時長遠超預期的原因。我們知道主從延時時間t=t2+t3。網路延遲會導致t2過長,這種情況比較少,而且不是我們討論的重點,就一筆帶過了。實際上我們遇到的大多數情況是t3過長。t3耗時主要在relay log回放資料這一步。可能原因如下:

1. 從庫機器配置比主庫低

從庫的壓力其實比主庫更大。因為從庫除了執行主庫執行的全部寫操作外,還要處理讀請求。

從庫讀壓力過大

如果機器配置一樣,主從延時還是過長,那麼有可能是從庫讀壓力過大,占用過多伺服器資源。可以增加從庫分擔壓力。

大事務這個也很好理解,乙個事務在主庫需要執行五分鐘的話,在從庫回放時也需要五分鐘。延時也就會增加五分鐘。

存在長時間持有exclusive metadata lock的操作

最典型的就是大表ddl。大表ddl一般耗時較長,執行期間會阻塞讀請求。

關於大表ddl參考我的另一篇文章資料庫擴充套件

mysql 延時排查 排查Mysql主從延時的問題

一 背景 突然發現每天中午以及下午的延時變高,檢視主從的延時經常達到10分鐘以上,整體使用的是mysql proxy實現的讀寫分離機制,所以業務的影響主要是插入資料後久久不能查詢到資料。由於使用mysql業務比較多,一時之間不能快速定位,導致該問題存在的較長時間。二 解決思路 1.到了案發時間,下午...

mysql讀寫分離和解決主從同步延時問題

mysql讀寫分離和解決主從同步延時問題 如何實現mysql讀寫分離 基於主從複製架構,簡單來說,就是搞了乙個主庫,掛多個從庫,然後我們單單只是寫主庫,然後主庫會自動把資料同步到從庫上。mysql主從複製原理是什麼 主庫將變更寫binlog日誌,然後從庫連線到主庫後,從庫有乙個io執行緒,將主庫的b...

mysql並行複製降低主從同步延時的思路與啟示

mysql主從複製,讀寫分離 是網際網路用的非常多的mysql架構,主從複製最令人詬病的地方就是,在資料量較大併發量較大的場景下,主從延時會比較嚴重。為什麼mysql主從延時這麼大?回答 從庫使用 單執行緒 重放 relaylog 優化思路是什麼?回答 使用單執行緒重放relaylog使得同步時間會...