架構師必備:MySQL主從延遲解決辦法
阿新 • • 發佈:2021-10-16
上一篇文章介紹了MySQL主從同步的原理和應用,本文總結了MySQL主從延遲的原因和解決辦法。如果主從延遲過大,會影響到業務,應當採用合適的解決方案。
MySQL主從延遲的表現
先insert或update寫入更新操作,再立即select查詢,但是得不到最新的結果。
可通過show slave status命令,結果中的Seconds_Behind_Master列,檢視主從延遲的秒數。
MySQL主從延遲的原因
- 讀寫分離時,寫操作走主庫,讀操作走從庫,但是主庫的變更還未同步至從庫
- 網路傳輸延遲:從庫發起dump請求,主庫推送binlog檔案,從庫寫入本地relay log
- 從庫序列執行sql語句:主庫併發的事務提交,但是在從庫上只能序列執行,速度比主庫慢
MySQL主從延遲解決辦法
業務優化
如果業務場景允許,先寫入更新操作,等待一小段時間後再查詢。比如,新增一條記錄,前端故意延遲半秒再調後端介面查詢。
技術優化
- 拆庫+並行複製:MySQL支援庫級別的並行複製,拆庫後每個分庫的資料量變小,主從延遲自然也變小了。
- 慢sql優化除慢sql,也能降低主從延遲
終結方案
以上辦法治標不治本,只能起到緩解主從延遲的作用,徹底根治還需這麼做。
-
顯式查主庫:不同的分片中介軟體做法不一樣,client側分片可在每次查詢前設定查主庫的標記(ThreadLocal變數),proxy側分片開啟事務
優點:實現簡單,缺點:受MySQL QPS限制,QPS極高時不推薦
-
雙寫資料庫和快取,查快取:避免MySQL主從延遲
優點:可支撐高併發場景