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

推薦する

HTMLページでチェックボックスを操作する方法

チェックボックスは Web ページで非常によく使用されます。e コマースの Web サイトでもプラッ...

JS ES6コーディング標準の詳細な説明

目次1. ブロックスコープ1.1. let は var を置き換える1.2. グローバル定数とスレッ...

MySQL でよく使われる連結文のまとめ

はじめに: MySQL では、CONCAT() 関数を使用して複数の文字列を 1 つの文字列に連結し...

LinuxでDHCPサーバーを構築する方法

目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...

Windows プラットフォーム構成 5.7 バージョン + MySQL データベース サービス

ルートユーザーのパスワードを初期化するプロセスと、よくある2つの問題の解決策が含まれています。 1....

Nginx の break と last の違いの詳細な分析

まずは違いについて話しましょう最後に、書き換えられたルールは、次の場所と一致させるために書き換えられ...

CSS 境界線の長さ制御機能の実装

以前は、境界線の長さをコンテナーよりも小さくする必要があったときに、div ネストを使用していました...

MySQL レプリケーション問題の 3 つのパラメータの分析

目次01 sql_slave_skip_counter パラメータ02 スレーブスキップエラーパラメ...

Node.jsはSTMPプロトコルとEWSプロトコルに基づいてメールを送信します

目次1 STMP プロトコルに基づいてメールを送信する Node.js メソッド2 MS Excha...

MySQLでデータベースデータ保存ディレクトリを変更する方法

序文MySQL データベースのデフォルトのデータベース ファイルは /var/lib/mysql に...

CSS フレックスベースのテキストオーバーフロー問題の解決方法

重要でないflex-basisテキストオーバーフローに省略記号を追加するという小さな機能に多くの問題...

MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

序文MySQL に精通している読者は、MySQL が非常に迅速に更新されることに気付くかもしれません...

Linux リダイレクトの使用方法の詳細な説明

誰でも時々データをコピーして貼り付ける必要があると思います。コピーして貼り付けるためにファイルを開く...

MySQLデータベースの基本構文と操作

MySQLデータベースの基本構文DDL操作データベース作成構文: create database デ...

Javascript 非同期プログラミング: Promise を本当に理解していますか?

目次序文基本的な使い方文法エラー処理プロミスチェーン呼び出し非同期と待機よく使われる方法1. Pro...