Mysql slave 狀態之Seconds_Behind_Master

來源:互聯網
上載者:User

標籤:

 在MySQL的主從環境中,我們可以通過在slave上執行show slave status來查看slave的一些狀態資訊,其中有一個比較重要的參數Seconds_Behind_Master。那麼你是否明白它的真正含義以及它是怎麼計算的呢?

        在之前我一直誤以為Seconds_Behind_Master是表示slave比master落後多少,如果這個值為0的表示主從已經處於一致了(在非同步模式下,現在官方最多也只在5.5中增加了半同步複製)。但是最近我終於認識到之前的錯誤理解。首先我們需要明白的一點:Seconds_Behind_Master表示slave上SQL thread與IO thread之間的延遲,我們都知道在MySQL的複製環境中,slave先從master上將binlog拉取到本地(通過IO thread),然後通過SQL thread將binlog重放,而Seconds_Behind_Master表示本地relaylog中未被執行完的那部分的差值。手冊上的定義:

In essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.

所以如果slave拉取到本地的relaylog(實際上就是binlog,只是在slave上習慣稱呼relaylog而已)都執行完,此時通過show slave status看到的會是0,那麼Seconds_Behind_Master的值為0是否表示主從已經處於一致了呢?答案幾乎是否定的!為什麼幾乎是否定的?因為絕大部分的情況下複製都是非同步,非同步就意味著master上的binlog不是即時的發送到slave上,所以即使Seconds_Behind_Master的值為0依然不能肯定主從處於一致,這也是我之前強調非同步複製的原因(現在已經有公司在做同步複製了,比如網易自己實現了VSR,VirtualSynchronized Replication,由於同步複製效能較差,所以網易再實現同步複製的同時還打了group commit的補丁)。所以如果我們要以這個參數來估計主從延遲多久的話至少得在一個比較好的網路環境中,這樣才能保證幾乎master上的binlog都已經發送到slave上。

        上面解釋了Seconds_Behind_Master這個值的真正含義,那麼它的值到底是怎麼計算出來的呢?實際上在binlog中每個binlog events都會附上執行時的timestamp,所以在在確定Seconds_Behind_Master的值時MySQL是通過比較當前系統的時間戳記與當前SQL thread正在執行的binlog event的上的時間戳記做比較,這個差值就是Seconds_Behind_Master的值。也許你會有疑問那要是兩台伺服器之間的時鐘不一致怎麼辦?確實會存在這種情況,那麼此時這個值的可靠性就不大了,手冊上對此也進行了說明:

This time difference computation works even if the master and slave do not have identical clock times, provided that the difference,
computed when the slave I/O thread starts, remains constant from then on. Any changes—including NTP updates—can lead to clock
skews that can make calculation of Seconds_Behind_Master less reliable

        Seconds_Behind_Master的值除了是非負數之外還可能是NULL,它是由如下幾種情況導致的:SQL thread沒運行/IO thread沒運行/slave沒有串連到master。

        接下來再簡單介紹一下非同步複製/半同步複製之間的區別。

        非同步複製,master上的操作記錄binlog的同時不關心binlog是否已經被slave接收。

        半同步複製,master上的操作記錄binlog的同時會關心binlog是否被slave接受。但是由於它的處理邏輯問題可能丟一個事務,如所示:

這樣的處理流程存在一個問題,當儲存引擎提交(storage commit)後,此時如果master掛了那麼會存在主從不一致,對於這個問題orczhou好像自己對源碼進行了修改更改storage commit的順序來達到一個增強半同步複製。

        對Seconds_Behind_Master就解釋到這裡,希望對你也能有點協助。

 

Mysql slave 狀態之Seconds_Behind_Master

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.