MySQLマスタースレーブ遅延現象と原理の詳細な分析

MySQLマスタースレーブ遅延現象と原理の詳細な分析

1. 現象

早朝、オンライン テーブルにインデックスが追加されました。テーブル内のデータ量が大きすぎたため (1 億件以上のデータ、50G 以上のデータ)、マスターとスレーブの間で数時間の遅延が発生しました。スレーブ データベースに依存するシステムはデータを照会できず、最終的には業務に影響を及ぼしました。

それでは、マスタースレーブ遅延の原​​理を整理してみましょう。

2. 原則

MySQL の公式ドキュメント「MySQL Replication Implementation Details」の説明によると、MySQL マスター スレーブ レプリケーションは、 master用のスレッド 1 つ ( Binlog dump thread ) とslaveスレッド 2 つ ( I/O threadSQL thread ) の 3 つのスレッドに依存します。マスタースレーブレプリケーションのプロセスは次のとおりです。

マスター サーバーとスレーブ サーバーが接続されたら、 Binlog dump threadを作成して、 bin logデータを送信します。

  • 1 つのBinlog dump thread 1 つのスレーブ サーバーに対応します。
  • Binlog dump thread bin logからデータを取得するときにデータをロックし、データ取得後すぐにロックを解除します。

スレーブ サーバーは START_SLAVE コマンドを受信すると、 I/O threadSQL threadを作成します。

  • I/O threadマスターからプル方式でイベントを読み取り、スレーブ サーバーのrelay logに保存します。
  • SQL thread relay logからイベントを読み取り、実行します。
  • slave独自のペースでデータを読み取り、更新することができ、またレプリケーション プロセス (開始と停止) を自由に操作することもできます。

注意: START_SLAVEコマンドがスレッドを正常に開始した後、後続のI/O threadまたはSQL threadが何らかの理由で停止しても、警告は表示されず、ビジネス パーティはそれに気付きません。スレーブのエラー ログを表示するか、SHOW SLAVE STATUS コマンドを使用してスレーブ上のスレッド ステータスを表示できます。

SHOW PROCESSLIST を通じてスレッドのステータスを表示できます。

Binlog ダンプ スレッド:

mysql> SHOW PROCESSLIST\G
************************** 1. 行 ****************************
  識別子: 2
 ユーザー: root
 ホスト: localhost:32931
  デシベル: NULL
コマンド: Binlog ダンプ
 時間: 94
 状態: すべてのバイナリログをスレーブに送信しました。バイナリログがスレーブに送信されるまで待機しています。
   更新される
 情報: NULL

I/O スレッドと SQL スレッド:

mysql> SHOW PROCESSLIST\G
************************** 1. 行 ****************************
  識別子: 10
 ユーザー: システムユーザー
 ホスト:
  デシベル: NULL
コマンド: 接続
 時間: 11
 状態: マスターがイベントを送信するのを待機中
 情報: NULL
 ************************** 2. 行 ****************************
  識別子: 11
 ユーザー: システムユーザー
 ホスト:
  デシベル: NULL
コマンド: 接続
 時間: 11
 状態: すべてのリレーログを読み取りました。スレーブI/Oを待機しています。
   スレッドを更新
 情報: NULL

分析

上記の原則によれば、 slave単一のスレッド( I/O thread )でデータを読み取り、単一のスレッド( SQL thread )でデータを更新し、 master複数のスレッドでデータを書き込むため、 master書き込み頻度がslave読み取りおよび更新頻度よりも高い限り、次のようなマスター スレーブ間遅延が発生する可能性があります。

  1. masterの書き込みtps slave更新速度よりも高くなります。
  2. slave 、ロックの保持などの特定のステートメントの実行に長い時間がかかります。
  3. master特定のDDLステートメントを実行すると、実行時間が長くなり、 slaveも同じ時間でそれを実行します。

ここでインデックスが作成されます。DBA に相談したところ、生成されたbin logファイルが 100 GB を超えていることがわかりました。データ量が大きすぎるため、スレーブ ライブラリのI/O thread DDL操作によって生成されたbin logイベントを読み取り続け、通常のビジネスDMLイベントの更新に影響し、マスターとスレーブの同期が遅れることになります。

4. 解決策

マスタースレーブ遅延の原​​因の観点から、解決は次の方向から始めることができます。

  1. ビジネスの選択: スレーブ データベースの遅延を許容できないアーキテクチャの場合、分散アーキテクチャを選択してスレーブ データベースの遅延の問題を回避できます。
  2. 実行時間: 大きなテーブルに対するオンラインDDL操作の場合は、業務量が少ない早朝の時間帯を選択するようにしてください。
  3. ハードウェア構成、SSDなどのスレーブハードウェア構成をアップグレードする
  4. リクエストを減らし、キャッシュ層を増やし、読み取りリクエストのドロップを減らす

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションの遅延の原因と解決策
  • MySQL 5.6 から 5.7 にアップグレードする際のマスター スレーブ遅延問題のトラブルシューティング
  • MySQL マスタースレーブ同期遅延の原因と解決策
  • MYSQL マスタースレーブ非同期遅延原理の分析と解決
  • MySQLマスタースレーブデータ同期遅延の削減の詳細な説明
  • MySQL マスタースレーブレプリケーション遅延問題の詳細な説明
  • MySQL マスタースレーブ遅延問題の解決方法

<<:  JavaScript でロジック判定コードを最適化する方法

>>:  Ubuntu は scrcpy をインストールして、携帯電話の画面投影と制御を完了します (Ubuntu で QQ WeChat を使用する別の方法)

推薦する

MySQL データ型 DECIMAL の詳細な分析

序文:金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイ...

Linuxターミナルでの一般的なMySQL操作コマンドの詳細な説明

仕える: # chkconfig --list すべてのシステム サービスを一覧表示します # ch...

Linux システムでの CPU 使用率が高い場合のトラブルシューティングのアイデアと解決策

序文Linux 運用保守エンジニアとして、日々の業務の中で Linux サーバーの CPU 負荷が ...

JavaScriptのアンチシェイクとスロットリングとは

目次1. 関数デバウンス1. 画像安定化とは何ですか? 2. 関数のスロットリング2.1 タイマーの...

jQuery はピッカーをシミュレートしてスライド選択効果を実現します

この記事では、スライド選択効果を実現するピッカーをシミュレートするjQueryの具体的なコードを参考...

Vue で jsx 構文を正しく使用する方法

目次序文仮想DOM仮想DOMとは仮想DOMの利点レンダリング関数とは何ですか? jsx Vue3 で...

CSS3のtext-fill-colorプロパティの詳細な説明

text-fill-color とは何を意味しますか?文字通りの意味から言えば、「テキストの塗りつぶ...

MySQL データベース トランザクション例のチュートリアル

目次1. トランザクションとは何ですか? 2. トランザクションに関連するステートメントは、挿入、削...

CentOS 7 環境でソースコードから MySQL 5.7 をインストールする方法

この記事では、CentOS 7 環境でソース コードから MySQL 5.7 をインストールする方法...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.14のインストールと設定のプロセスを記録しています。具体的な内容は...

WeChatアプレットはシンプルな計算機を実装する

参考までにWeChatアプレットで書かれた簡単な計算機です。具体的な内容は次のとおりです。 jisa...

Nginx リバース プロキシから go-fastdfs へのケースの説明

背景go-fastdfs は、http プロトコルをサポートする分散ファイルシステムです。一般的なプ...

MySQL 5.7.23 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事はMySQL 5.7.23 winx64のインストールチュートリアルを記録します。具体的な内...

ボックスモデルのサイズの詳細な説明は、パディング、マージン、境界の値によって異なります。

ボックス モデルは、要素ボックスの幅と高さ、パディング、境界線、余白のサイズを指定します。境界線の内...

Linux parted ディスク パーティション実装手順の分析

fdisk と比較すると、parted はあまり使用されず、主に 2T を超えるパーティションに使用...