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 を使用する別の方法)

推薦する

知っておくべき 18 の Web ユーザビリティの原則

世界最高のビジュアル デザイン スキルを持っていたとしても、訪問者がページ間やアイテム間を快適に移...

ウェブページのグリッドデザインを考える

<br />元のアドレス: http://andymao.com/andy/post/8...

Vueプロジェクトのフロントエンドを最適化およびパッケージ化するための必須のボーナスアイテム

目次序文1. ルーティングの遅延読み込み1. ルートの遅延読み込みが必要なのはなぜですか? 2. ル...

AngularJSにおける括弧の役割の詳細な説明

1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...

ウェブページのテキストデザインは、服を着た賢い女の子のようであるべきだ

<br />「この世に醜い女性はいない、あるのは怠惰な女性だけだ」これは女性の美のバイブ...

Ubuntu 20.04にSogou入力方式をインストールする詳細な手順

1. Fcitx入力フレームワークをインストールする関連する依存ライブラリとフレームワークは自動的に...

Vueで背景色と透明度を設定する方法

背景色と透明度の設定上記のように、最初の画像の場合は、灰色の背景と左上隅に白い「カバー」という文字を...

Packetdrillの簡潔なユーザーガイド

1. Packetdrillのコンパイルとインストールソースコードリンク https://githu...

W3C組織はHTML4のスタイルに関する推奨事項を提供しています

これは、W3C 組織が HTML4 に対して提示したスタイル推奨事項です。残念ながら、ブラウザが独自...

JS はシンプルなブロック崩しピンボールゲームを実装します

この記事では、ブロック崩しピンボールゲームを実装するためのJSの具体的なコードを参考までに紹介します...

IDEA2020.1.2 Webプロジェクトの作成とTomcatの設定に関する詳細なチュートリアル

この記事は、IDEA で Web プロジェクトを作成し、Tomcat を構成する方法についての統合記...

Dockerはrabbitmqのサンプルコードをインストールして実行します

イメージをプルします: [mall@VM_0_7_centos ~]$ sudo docker pu...

CSS の複数行テキストがオーバーフローする場合の省略記号の例

複数行のテキストがオーバーフローすると省略記号が表示されますこの記事では 2 つの方法を推奨します。...

CSS スタイルが機能しない (史上最も完全な解決策の概要)

ページを作成するときに、記述した CSS スタイルが有効にならないことがあります。この現象にはさまざ...

Linux運用保守ツールSupervisor(プロセス管理ツール)のインストールと使用

1. はじめにSupervisor は Python で開発された汎用プロセス管理プログラムです。通...