單看 Seconds_Behind_Master (SBM) 判斷從庫延遲往往不準。本文分析 SBM 計算邏輯缺陷,提出基於 Binlog 序號與位置的三步精準判斷法。
mysql> SHOW FULL PROCESSLIST\G Id: 6 User: system user State: Waiting for master to send event Time: 22005006 -- IO 執行緒,Time=啟動至今秒數 Id: 7 User: system user State: Updating Time: 3293 -- SQL 執行緒,Time=SBM 值
SQL 執行緒的 Time 欄位含義:
-- MASTER SHOW BINARY LOGS; +------------------+--------------+ | Log_name | File_size | +------------------+--------------+ | mysql-bin.000009 | 1073742063 | | mysql-bin.000010 | 107374193 | +------------------+--------------+ -- SLAVE Relay_Master_Log_File: mysql-bin.000009 Exec_Master_Log_Pos: 654409041 Read_Master_Log_Pos: 668711237
mysql-bin.000009) 總大小 1,073,742,063 位元組。1,073,742,063 - 654,409,041 = 419,333,022 位元組。mysql-bin.000010) 已產生 107,374,193 位元組。SHOW BINARY LOGS、對 SLAVE 執行 SHOW SLAVE STATUS。Relay_Log_Space(Relay Log 總大小)判斷 IO 線程是否跟得上。此法能準確量化延遲規模,避免 SBM 誤導。