1. 程式人生 > >MySQL主從同步相關-主從多久的延遲?

MySQL主從同步相關-主從多久的延遲?

這次單獨調查一下主從延遲的時間。這裡說的主從延遲,並不是指“從庫更新效能跟不上主庫”, 而是“一個命令從主庫更新完成到從庫更新完成的延遲時間。

基本流程:

對於每一個連上來的從庫,主庫都有一個client執行緒與之對應。

先看主從的基本資料流

1、客戶端SQL更新命令

2、主庫執行

3、主庫寫binlog

4、主庫client執行緒讀binlog傳送給從庫的io執行緒

5、從庫io執行緒寫盤(relay-log)

6、從庫sql執行緒讀relay-log

7、執行更新。

   這裡有涉及到兩個寫盤,主庫binlog和從庫的relaylog(3、5)。不過不用擔心不停掃描檔案造成的延遲,因為讀檔案的執行緒是在同一個程序內,每次寫完都會廣播,所以雖然看上去是非同步,實際上延遲並不大。

    我們主要考察步驟2完成瞬間到7開始執行之前的延時。

   實驗方法――一級主從

   實際應用中主從庫機器應該是分開的,這裡也討論這種情況(同機房,不同機器)

可以想象延遲很小,因此在不同機器上輸出時間還需要考慮機器之間的時間同步。設計流程如下:

1、機器A上的MySQL S設定為機器B上的MySQL M的從庫

2、在A上有一個簡單客戶端C,向M發起一個insert操作,這個操作會被同步到S。

3、在C執行mysql_real_query返回時輸出當前系統微秒時間 t1

4、在S上的引擎回撥介面write_row入口處輸出當前系統微秒時間 t2

   則 t2- t1的值是我們需要的結果。

   實驗方法――二級主從

   專案中擔心多個從庫連線一個主庫,影響主庫效能,因此還要在實驗二級級聯主從的延遲時間。

   這種結構下,在第一級從庫上增加了一次寫盤轉發 (sql執行更新後寫本地binlog),

 

   實驗結果

   一級主從 50~100 us

   二級主從 1.1~1.2 ms