MySQLホスティングレプリケーションのセットアップでは、SHOW SLAVE STATUSコマンドで表示されるパラメーターSeconds_Behind_Master(SBM)は、通常、スレーブの現在のレプリケーションラグを示すものとして使用されます。 。このブログ投稿では、さまざまな状況でこの値を理解して解釈する方法を検討します。
マスターからの秒数の可能な値
MySQLドキュメントで説明されているように、SBMの値は、一般的なMySQLスレーブの状態、特にMySQLスレーブSQL_THREADとIO_THREADの状態によって異なります。 IO_THREADがマスターに接続して更新を読み取る間、SQL_THREADはこれらの更新をスレーブに適用します。 MySQLスレーブのさまざまな状態でのSBMの可能な値を調べてみましょう。
SBM値がNullの場合
- スレーブが停止している場合、またはSQLスレッドが停止している(または実行されていない)場合、SBMは常にNULLになります。
- SQLスレッドがリレーログからのすべてのイベントをすでに処理している場合、IOスレッドが停止している場合、SBMもNULLになります。 SHOW SLAVE STATUSのサンプル出力(対象の値のみを表示するようにトリミング)は、これを示しています。
Slave_IO_State:
Master_Host:172.19.0.13
Slave_IO_Running:いいえ
Slave_SQL_Running:はい
Seconds_Behind_Master:NULL
Master_UUID:23b326b1-a452-11e8-91ca-000d3a065e8e
Slave_SQL_Running_State:スレーブはすべてのリレーログを読み取りました。さらなる更新を待っています
Retrieved_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:818-389213
Executed_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:1-389213
SBM値がゼロまたは正の場合
- SQLスレッドがアクティブにイベントを処理している場合、SBMは有効な値(> =0)を反映します。これは、IOスレッドの状態に関係なく当てはまります。例:
Slave_IO_State:
Master_Host:172.19.0.13
Slave_IO_Running:いいえ
Slave_SQL_Running:はい
Seconds_Behind_Master:3399
Master_UUID:23b326b1-a452-11e8-91ca-000d3a065e8e
Slave_SQL_Running_State:スレーブワーカーがキューを処理するのを待っています
Retrieved_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:818-389213
Executed_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:1-118774
上記の例では、Retrieved_GTID_SetとExecuted_GTID_Setを比較することで、スレーブがマスターの背後にあることがわかります。このような場合、Seconds_Behind_Masterは、SQLスレッドによって処理された最新のトランザクションのタイムスタンプと、マスターで処理されたときの同じトランザクションのタイムスタンプとの差を表します。マスターのこのトランザクションタイムスタンプはレプリケーションを通じて保持されるため、スレーブはSBMをローカルで計算できます。
また、スレーブがすべてのリレーログに完全に追いつくと(つまり、実行されたGTIDが23b326b1-a452-11e8-91ca-000d3a065e8e:1-389213 /になります)、Seconds_Behind_MasterはIOスレッドが実行されている場合は「0」に、IOスレッドが実行されていない場合は「NULL」に切り替えます。
#MySQLチュートリアル–マスターバリューの背後にある秒数を理解するクリックしてツイート
MySQLスレーブの実行速度を理解する
スレーブのSQLスレッドとIOスレッドが実行状態にあると仮定すると、SBM値を監視することで、マスターとスレーブの相対的な実行速度を理解できます。一貫した「0」値または一定値は、スレーブがマスターと同じ速度で実行されていることを示します。一方、Seconds_Behind_Masterの上り勾配は、スレーブのパフォーマンスがマスターよりも遅いことを示しています。
Azure上のMySQL用のScaleGridの監視コンソールは、スレーブノードのSBMの値を経時的にプロットします。
SBMのゼロまたは定数値
上記の例では、マスターがアクティブな書き込みを行ってから約40時間後にスレーブが開始されました。開始すると、スレーブはそのデータの複製を開始しました。SBMはかなりフラットであり、スレーブがマスターと同じ速度で実行されたことを示しています。また、SBMの「0」への低下は急です。これは、スレーブが実行した最後のトランザクションがマスターで約40時間前に実行されたにもかかわらず、追いついた後は「0」の遅延があることを意味します。
>SBMの値を増やす
下のグラフでは、SBMが絶えず増加していることがわかります。これは、スレーブの実行速度がマスターの実行速度に比べて遅いことを意味します。これは実際には、マスターで連続書き込みを行う20スレッドを実行していて、シングルスレッドスレーブがそれに追いつくことができない場合です。
最後に、これまでの説明では、ネットワークのボトルネックを想定していないことに注意してください。低速のネットワークの場合、スレーブIOスレッド自体がマスターより遅れ、SQLスレッドが十分に高速である場合、SBMは「0」と正の数の間で振動します。このような場合、SBMは、マスターとの実際のラグを理解するための有用なパラメーターにはなりません。
このブログ投稿を楽しんだ場合は、他の人気のあるMySQLデータベース管理チュートリアルをチェックして、デプロイメントの最適化について詳しく学んでください。
- MySQLサーバーのInnoDBバッファープールサイズの計算
- MySQLチュートリアル–MySQLサーバーでのSSLの構成と管理
- MySQL高可用性フレームワークの説明–パートI:はじめに