MySQLのレプリカはいかにもあるようにソースサーバに1スレッド(Binary log dump thread)、レプリカサーバに2スレッド(Replication I/O thread、Replication SQL thread)あります。(ソース/レプリカって呼び方は最近変わったのだろうか、あまり見慣れない気がする?)
SHOW SLAVE STATUS
とかを実行することで以下のような出力が得られます。遅延自体は基本的にSeconds_Behind_Masterで判断できます。
Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 198822658 Relay_Log_File: relay-bin.000001 Relay_Log_Pos: 198730937 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes
それぞれを見ていく
Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 198822658
上記はレプリカ側でI/O threadにより転送されたリレーログに関する記述で転送されて受け取っているファイルとそのポジションが記載されています。
Relay_Master_Log_File: mysql-bin.000001 Exec_Master_Log_Pos: 198730774
上記はSQLスレッドがどこまでログ内のSQLを実行したかを示していてファイルとポジションが記載されています。
この状態でソース側でSHOW MASTER STATUS
を実行すると以下のような出力が得られます
File: mysql-bin.000001 Position: 198937070
Seconds_Behind_Masterの値が大きくなっている
ソースサーバのPositionとレプリカサーバのRead_Master_Log_Posが違う、またはポジションが遅れている