深刻理解Mysql數據庫主從延遲

1什麼會增長主從延遲?

1 網絡很差
2 從庫硬件差
3 索引沒作好,從庫執行慢
4 從庫鎖等待,多見於myisam
5 主庫寫頻繁,從庫單線程執行慢
6 使用row複製,或mix使用行復制mysql

2如何優化,減小延遲時間?

1 如何寫頻繁,水平拆分,減小單片寫數量
2 避免複雜DML操做sql

3幾個由於主從延遲發送異常的場景

1 一個事務內有讀和寫操做
2 修改後緊接着接口訪問數據庫

4業務上如何解決主從延遲?

解決這個問題有如下幾個思路:緩存

1. 流程優化避免寫後當即讀取
    a 業務流程上:寫完成後接口返回,客戶端再次調用接口獲取數據,在這個過程當中同步已經完成;
    b 代碼上:寫完成後緩存結果到局部變量,內存或緩存中,下次讀取直接走緩存;


2. 避免主從延遲,保證讀寫強一致性
     a  若是是一主一從,能夠使用數據庫提供的半同步複製,寫完成時會等待從庫同步完成後返回;可是強一致性會下降寫吞吐量
     b  mysql5.6之後能夠使用semi-sync功能,實現強一致性;
     c  線上讀寫都是使用主庫,從庫只作線下運營,分析使用;爲了緩解數據庫讀寫壓力,在數據庫上架構緩衝層;

3. 強制讀走主庫

4. 配置經驗延遲時間,延遲時間範圍內的查詢走主庫;
      a 中間件實現。不少中間件提供這種配置
      b 應用層實現。架構一個緩存層,對數據修改後將key保存在cache總,設置生存時間爲經驗延遲時間。查詢時首先查詢cache,若是找到key則強制走主庫;

另外,經過show slave status 字段‘Second_Behind_Master’能夠檢測主從延遲時間,在延遲較大時,將讀切到讀庫,若是是使用中間件,能夠配置強制讀主庫的延遲:slaveThreshold;這種方式不能保證讀到髒數據,對一致性要求不高時能夠使用;網絡

相關文章
相關標籤/搜索