天天看點

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的值是我們需要的結果。

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

實驗方法――二級主從

項目中擔心多個從庫連接配接一個主庫,影響主庫性能,是以還要在實驗二級級聯主從的延遲時間。

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

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

實驗結果

一級主從 50~100 us

二級主從 1.1~1.2 ms