2

マスターとスレーブの概念に基づいて、MySQL を使用したレプリケーションの可能性を発見しています。

しかし、スレッドが実際にどのように機能するかについての詳細な情報は見つかりません

(このウェブサイトでも:http://dev.mysql.com/doc/refman/5.0/en/replication-implementation-details.html

私は3つのスレッドがあることを知っています:

  • スレーブ SQL スレッド : スレーブのデータベースでリクエストを実行します

  • スレーブ I/O スレッド : マスターへの接続、バイナリ ファイルの読み取り、スレーブへの要求の書き込み

  • Master Binlog dump thread : 接続されているすべての I/O スレッドにバイナリ ファイルのコピーを送信します。

また、彼らがこのプロセスに従っていることも知っています。

  1. まず、I/O スレッドがマスターに接続します
  2. マスターは Binlog ダンプ スレッドを作成します
  3. スレーブ スレッドは、バイナリ ログの最新バージョンを取得するためにマスター スレッドに問い合わせます。
  4. マスター スレッドは、バイナリ ログのコピーをマスター スレッドに送信します。
  5. スレーブ スレッドはコピーを読み取り、そのコンテンツをスレーブ ホストに書き込みます (これらの新しい要求を実行できるスレーブ SQL スレッド用)。

それはそれでよいのですが、その後の I/O スレッドの動作はどうでしょうか。マスターではまだ接続されていますが、マスター データベースで新しい書き込み要求が行われるとどうなりますか? 本当のプロセスは何ですか?

さまざまな可能性を見つけましたが、それらが良いものかどうかはわかりません:

  • 最新のスレーブは、ほとんどの場合、マスターの OS キャッシュにまだキャッシュされているイベントを読み取ります。そのため、バイナリ ログ イベントをスレーブにフィードするためにマスターで物理ディスクを読み取ることはありません。

では、I/O スレッドは常にキャッシュ内で新しい要求を探しているのでしょうか? ...

  • 新しい要求がバイナリ ログ ファイルに書き込まれると、マスター スレッドはそれを接続されているすべての I/O スレッドに送信します。

マスターの Database に同時に小さな書き込み要求が多数ある場合、この解決策は過負荷に関する問題を引き起こしますか?

これは StackOverflow に関する私の最初の投稿です。私の質問が理解できることを願っています。

前もって感謝します !:)

4

1 に答える 1