MySQL マスター サーバーとスレーブを備えたシステムを考えてみましょう。
マスターサーバーで多くの読み取り/書き込みが発生しているため、スレーブで重い低速クエリを実行することにしました。
何が起こる可能性がありますか?マスターサーバーで速度低下が見られる可能性はありますか?
MySQL マスター サーバーとスレーブを備えたシステムを考えてみましょう。
マスターサーバーで多くの読み取り/書き込みが発生しているため、スレーブで重い低速クエリを実行することにしました。
何が起こる可能性がありますか?マスターサーバーで速度低下が見られる可能性はありますか?
レポーティングなどの読み取り専用クエリに複製されたスレーブ サーバーを使用することは、一般的な方法です。
マスターのレプリケーションはログ ファイルから読み取り、実際のデータベース テーブルにはヒットしません。マスター側のレプリケーションはクエリを実行しないため、実際のデータベース負荷はありません。
レプリケーションにはマスター サーバー上に独自のスレッドがあり、ブロックされている間、通常のデータベース操作を停止するべきではありません。
MySQL レプリケーションは、クラッシュ後に完全に回復することができ、中断したところから自動的に再開されます。
注意点が 1 つあります。MySQL 5.5+ では、MySQL はSemisynchronous Replicationをサポートします (デフォルトはオフ)。この場合、スレーブがトランザクションの受信を確認するまで、マスターのデータベース リクエストはクライアントに応答しません。スレーブが応答するのを待ってタイムアウトした場合、MySQL は非同期レプリケーションに戻ります。スレーブが追いついたと判断すると、準同期レプリケーションを再試行します。
つまり、スレーブ サーバーを完全に停止させるクエリを実行すると、マスター側で最大 10 秒の遅延が発生する可能性がありますが、その後は何も影響を受けません。タイムアウトを設定できます。
また、これらすべてのサーバーが同じネットワーク帯域幅を共有している場合、帯域幅の最大容量に達した場合に、いずれかのサーバーから大きな結果セットを返すと問題が発生する可能性があることを考慮してください。