詳解mysql復制機制--異步復制,半同步復制和並行復制


詳解mysql復制機制--異步復制,半同步復制和並行復制

圖4

那么如何並行化,並行IO線程,還是並行SQL線程?其實兩方面都可以並行,但是並行SQL線程的收益更大,因為SQL線程做的事情更多(解析,執行)。並行IO線程,可以將從Master拉取和寫Relay log分為兩個線程;並行SQL線程則可以根據需要做到庫級並行,表級並行,事務級並行。庫級並行在mysql官方版本5.6已經實現。如下圖,並行復制框架實際包含了一個協調線程和若干個工作線程,協調線程負責分發和解決沖突,工作線程只負責執行。

圖中,DB1,DB2和DB3的事務就可以並發執行,提高了復制的性能。有時候庫級並發可能不夠,需要做表級並發,或更細粒度的事務級並發。

詳解mysql復制機制--異步復制,半同步復制和並行復制

圖 5

並行復制如何處理沖突?

並發的世界是美好的,但不能亂並發,否則數據就亂了。Master上面通過鎖機制來保證並發的事務有序進行,那么並行復制呢?Slave必需保證回放的順序與Master上事務執行順序一致,因此只要做到順序讀取binlog,將不沖突的事務並發執行即可。對於庫級並發而言,協調線程要保證執行同一個庫的事務放在一個工作線程串行執行;對於表級並發而言,協調線程要保證同一個表的事務串行執行;對於事務級而言,則是保證操作同一行的事務串行執行。

是否粒度越細,性能越好?

這個並不是一定的。相對於串行復制而言,並行復制多了一個協調線程。協調線程一個重要作用是解決沖突,粒度越細的並發,可能會有更多的沖突,最終可能也是串行執行的,但消耗了大量的沖突檢測代價。


免責聲明!

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



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