1. 並列レプリケーションの背景 まず、並列レプリケーションの概念はなぜ存在するのでしょうか? 1. DBA は、MySQL レプリケーションが binlog に基づいていることを知っておく必要があります。 2. MySQL レプリケーションは、IO スレッドと SQL スレッドの 2 つの部分で構成されます。 3. IOスレッドは主に受信マスターから渡されたバイナリログを取得し、リレーログに書き込むために使用されます。 4. SQLスレッドは主にリレーログを解析し、それをスレーブに適用する役割を担う。 5. いずれにしても、IO スレッドと SQL スレッドはシングルスレッドですが、マスターはマルチスレッドなので、遅延は避けられません。この問題を解決するために、マルチスレッドが生まれました。 6. IO マルチスレッド? 6.1 IO スレッドがボトルネックではないため、IO のマルチスレッド化は必要ありません。 7. SQL マルチスレッド? 7.1 はい、最新の 5.6、5.7、および 8.0 はすべて、スレーブの同時実行性を向上させるために SQL スレッドでマルチスレッドを実装しています。 次に、並列レプリケーションにおけるMySQLの取り組みと成果を見てみましょう。 II. 要点 並列に実行できるかどうかは、複数のトランザクション間でロックの競合があるかどうかによって決まります。これが鍵となります。 次の並列レプリケーションの原則は、ロックの競合を回避する方法を確認することです。 MySQL 5.6 スキーマベースの並列レプリケーション
前述のように、並列レプリケーションの目的は、スレーブを可能な限りマルチスレッドで実行することです。もちろん、ライブラリレベルに基づくマルチスレッド化も方法の1つです(異なるライブラリでのトランザクション、ロックの競合なし) まずメリットについてお話ししましょう。実装が比較的簡単で、ユーザーにとって使いやすいです。次にデメリットについてお話ししましょう。ライブラリに基づいているため、並列処理の粒度が非常に粗いです。現在、多くの企業のアーキテクチャは 1 つのライブラリと 1 つのインスタンスです。このようなアーキテクチャでは、5.6 並列レプリケーションは無力です。もちろん、マスターとスレーブのトランザクションの順序もあり、これも5.6では大きな問題です。 さっそく写真をいくつか紹介します 4. MySQL 5.7 グループコミットに基づく並列レプリケーション
グループコミットについては以前の記事で詳しく説明しているので、ここでは説明しません。 MySQL5.7ではグループをコミットするときに、各グループのトランザクションもマークします。これはMTSの利便性のためだと思います。 まずはバイナリログを見てみましょう 最終コミット=0 シーケンス番号=1 最終コミット=1 シーケンス番号=2 最終コミット=2 シーケンス番号=3 最終コミット=3 シーケンス番号=4 最終コミット=4 シーケンス番号=5 最終コミット=4 シーケンス番号=6 最終コミット=4 シーケンス番号=7 最終コミット=6 シーケンス番号=8 最終コミット=6 シーケンス番号=9 最終コミット=9 シーケンス番号=10 4.1 コミット親ベースモード 4.2 ロックベースモード 5. MySQL 8.0 書き込みセットに基づく並列レプリケーション
トランザクションの依存関係:
トランザクション検出アルゴリズム: MySQL には、送信されたトランザクションの HASH 値を格納する変数があります。送信されたすべてのトランザクションによって変更された主キー (または一意のキー) の値は、ハッシュ化後にその変数のセットと比較され、変更された行がそれと競合するかどうかが判断され、依存関係が決定されます。 ここで言及した変数のサイズは、binlog_transaction_dependency_history_size で設定できます。 この粒度は行レベルです。このとき、並列粒度はより細かくなり、並列速度はより速くなります。場合によっては、スレーブの並列性がマスターの並列性を上回ると言っても過言ではありません(マスターはシングルスレッドの書き込みで、スレーブも並列再生できます) 6. スレーブの並列レプリケーションとマスターのトランザクション実行順序を一致させるにはどうすればよいですか? 5.7.19以降では、 公式説明:
一般的な実装原則は、実行フェーズは並列で実行でき、バイナリログのフラッシュは順番に実行されるというものです。 エンジン層がコミットすると、binlog_order_commitに従ってキューの順序で完了します。 つまり、このパラメータが設定されている場合、スレーブはマスターと同様に並列化されます。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: 30分でReact Hooksを包括的に理解できます
>>: TomcatコンポーネントはWebサーバーのアーキテクチャの進化を示しています
目次Vueライフサイクルの紹介とフック機能VUEライフサイクルフックVue ライフサイクルの紹介作成...
目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...
目次1. コンテンツの概要2. 文字セットと文字順序の概念と関係3. MySQL でサポートされてい...
CSS は、スクロールを許可しながらスクロール バーを非表示にするために Overflow を設定し...
1. はじめに以前、「MySQL マスター スレーブ同期の原理」という記事を書きました。この記事を読...
この記事では、jsとjQueryテクノロジーを使用して告白弾幕を実現する方法を紹介します。具体的な内...
コード知識ポイント1. fullpage.jsを組み合わせてフルスクリーンスクロールを実現する2. ...
この記事では、例を使用して MySQL ビューの管理ビュー操作について説明します。ご参考までに、詳細...
目次JSX環境の構築プロジェクトの設定NPMを初期化するwebpackをインストールするBabelを...
(Win7 システム) VMware 仮想マシンのインストール チュートリアルVMware は仮想マ...
Centos や Ubuntu など、Docker が pull する Base イメージは最もシン...
最近、自宅サーバーにクラウドディスクを導入する予定なので、一連の環境構築作業を始めました。MySQL...
MySQL は人気のオープンソースデータベース管理システムとして多くのユーザーが利用しています。デー...
今日、誰かがコードを調整するのを手伝っていたとき、次のようなスタイルを見つけました。 背景位置: 5...
MySQL ストアド プロシージャ パラメータには、in、out、inout の 3 種類があります...