序文 MySQL は MySQL 5.6 からマルチスレッド レプリケーションをサポートしていますが、バージョン 5.6 には欠陥があります。マルチスレッドをサポートしているにもかかわらず、各データベースは 1 つのスレッドしか持つことができません。つまり、データベースが 1 つしかない場合、マスター スレーブ レプリケーション中に動作するスレッドは 1 つだけです。以前のシングルスレッドと同等です。 MySQL 5.7 以降では、同じデータベースでの並列マスター スレーブ レプリケーションがサポートされます。ただし、デフォルトでは、単一のデータベースと単一のスレッドのままです。マルチスレッドを使用する必要がある場合は、スレーブ ノードで構成する必要があります。 MySQL 5.7 では、次の 2 つのタイプの新しいマスター スレーブ レプリケーションが追加されました。
スレーブ ノードでは次の手順が設定されます。 現在の構成を表示する 設定を開始する前に、現在の設定におけるマスター-スレーブ レプリケーション プロセスの数を確認しましょう。 mysql> プロセスリストを表示します。 +----+--------------+-----------+--------+--------+--------+--------------------------------------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+--------------+-----------+--------+--------+--------+--------------------------------------------------------+------------------+ | 1 | システム ユーザー | | NULL | 接続 | 91749 | マスターがイベントを送信するのを待機中 | NULL | | 2 | システム ユーザー | | NULL | 接続 | 208 | スレーブはすべてのリレー ログを読み取りました。さらに更新を待機しています | NULL | | 37 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | +----+--------------+-----------+--------+--------+--------+--------------------------------------------------------+------------------+ セット内の 3 行 (0.00 秒) 上記から、同期を待機しているメイン プロセスは 1 つだけであることがわかります。 下記のレプリケーションタイプと並列数の構成を確認してください mysql> 'slave_parallel_type' のような変数を表示します。 +---------------------+----------+ | 変数名 | 値 | +---------------------+----------+ | スレーブ並列型 | データベース | +---------------------+----------+ セット内の 1 行 (0.00 秒) 現在のレプリケーション タイプは DATABASE です。つまり、統合データベースではレプリケーション用のスレッドが 1 つしか存在せず、並列レプリケーションは不可能です。 mysql> 'slave_parallel_workers' のような変数を表示します。 +------------------------+-------+ | 変数名 | 値 | +------------------------+-------+ | スレーブ並列ワーカー | 0 | +------------------------+-------+ セット内の1行(0.01秒) 現在並列作業中のプロセス数は 0 です マルチスレッドの設定 1. ノードからのレプリケーションを停止する mysql> スレーブを停止します。 クエリは正常、影響を受けた行は 0 行 (0.01 秒) 2. レプリケーションタイプをLOGICAL_CLOCKに設定する mysql> グローバルslave_parallel_typeを'logical_clock'に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> 'slave_parallel_type' のような変数を表示します。 +---------------------+---------------+ | 変数名 | 値 | +---------------------+---------------+ | スレーブ並列タイプ | LOGICAL_CLOCK | +---------------------+---------------+ セット内の1行(0.01秒) 3. 並列処理の数を4に設定する mysql> グローバルslave_parallel_workersを4に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> 'slave_parallel_workers' のような変数を表示します。 +------------------------+-------+ | 変数名 | 値 | +------------------------+-------+ | スレーブ並列ワーカー | 4 | +------------------------+-------+ セット内の 1 行 (0.00 秒) 4. ノードからレプリケーションを開始する mysql> スレーブを起動します。 クエリは正常、影響を受けた行は 0 行 (0.02 秒) 5. 現在動作しているスレッドの数を確認する mysql> プロセスリストを表示します。 +----+--------------+-----------+-------+-------+------+--------------------------------------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+--------------+-----------+-------+-------+------+--------------------------------------------------------+------------------+ | 37 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | | 38 | システム ユーザー | | NULL | 接続 | 8 | マスターがイベントを送信するのを待機中 | NULL | | 39 | システム ユーザー | | NULL | 接続 | 7 | スレーブはすべてのリレー ログを読み取りました。さらに更新を待機しています | NULL | | 40 | システム ユーザー | | NULL | 接続 | 8 | コーディネーターからのイベントを待機中 | NULL | | 41 | システム ユーザー | | NULL | 接続 | 8 | コーディネーターからのイベントを待機中 | NULL | | 42 | システム ユーザー | | NULL | 接続 | 8 | コーディネーターからのイベントを待機中 | NULL | | 43 | システム ユーザー | | NULL | 接続 | 8 | コーディネーターからのイベントを待機中 | NULL | +----+--------------+-----------+-------+-------+------+--------------------------------------------------------+------------------+ セット内の行数は 7 です (0.00 秒) 最後に、マルチスレッドレプリケーションがなぜ必要なのかについてお話ししましょう。マスターとスレーブ間の同期には遅延が発生するため、マルチスレッドの目的はこの遅延を最小限に抑えることです。マスターとスレーブの関係を最適化する方法はシステム機能であり、シナリオによって必要なソリューションは異なりますが、マルチスレッド化により、少なくとも基本的な観点からレイテンシを削減できます。また、データベースの実際の状況を踏まえて、本当に遅延を軽減できるのか、スレッド数をいくつに構成すればいいのかなど、繰り返しテストして自分に合ったデータを取得する必要があります。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。 以下もご興味があるかもしれません:
|
<<: JavaScript WeakMap の使い方の詳しい説明
>>: CentOS の Nginx 公式 Yum ソースの設定を詳しく解説
アプリケーションをコンテナ化した後、Docker コンテナを起動すると、デフォルトで root ユー...
1. JSON.stringify() と JSON.parse() の違い私たちは皆、JSON.s...
次の図に示すように: 仮想マシンと Docker を使用するとき、「なぜ Docker は VM よ...
1. はじめにコンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイさ...
この記事では、WeChatアプレットの宝くじ番号ジェネレータの具体的なコードを参考までに紹介します。...
序文プロジェクトのニーズにより、ストレージ フィールドは JSON 形式で保存されます。プロジェクト...
目次序文ローリング原理成し遂げるソースコード参照する序文モバイル Web ページの日常的な開発では、...
4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...
ステートメント 1: <link rel="shortcut icon" ...
この記事では、主に、円形のダイナミックな光る特殊効果アニメーションを実現するための純粋な CSS3 ...
他の種類のデザインとは異なり、Web デザインは時代の発展とともに常に変化しています。したがって、W...
開発を行う際に、次のような状況に遭遇することがよくあります。 a.swf が Web ページに追加さ...
序文最近 Linux を学び、その後 Win から Ubuntu に変更しました。以前インストールし...
このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルのみをサポートしています。そのため、...
1. 環境整備CentOS Linux リリース 7.5.1804 (コア)インストールフォルダを作...