Mysql はマスターとスレーブで構成されており、スレーブ データベースは遅いステートメントのクエリに使用されます。クエリ中にテーブルがロックされている場合、マスター データベースは常にそのテーブルをコピーしますか?それとも、遅いクエリが完了するまで待ってからコピーするのでしょうか?
マスターとスレーブの同期は binlog を通じて実行されます。スレーブ ライブラリには 2 つのスレッドがあり、1 つは binlog ログの受信を担当し、もう 1 つはログの解析とライブラリへのデータの書き込みを担当します。したがって、一般にマスタとスレーブの同期にはある程度の遅延が生じます。
読み取り/書き込みロックの問題に関しては、書き込みロックは排他的であり、読み取りロックは複数回取得できます。 Innodb では、ロックはテーブル ロック、行ロック、ギャップ ロックに分類されます。挿入操作でテーブルのロックが必要な場合、クエリでテーブルの行をロックする場合は、当然ながら待機する必要があります。
質問をもう一度よく考えてください。
私の質問の理解によると、マスター ライブラリがスレーブ ライブラリをリアルタイムで複製していると確信していますか? このロジックには何か問題があります。
誤解を招きやすい、マスターとスレーブのレプリケーション。通常、スレーブ ライブラリではレプリケーション プロセス以外の書き込み操作は許可されません。もちろん、手動でロックを解除する必要がある場合でも、スレーブ ライブラリのクエリ操作はレプリケーション書き込みプロセスをブロックしません。メイン ライブラリは、スレーブ ライブラリからのデータをロックされたレコードに同期し、スレーブ ライブラリのロックを待機するため、スレーブ ライブラリの書き込みアクションは、管理者を除くすべてが厳密に制御される必要があります
マスターとスレーブの同期は binlog を通じて実行されます。スレーブ ライブラリには 2 つのスレッドがあり、1 つは binlog ログの受信を担当し、もう 1 つはログの解析とライブラリへのデータの書き込みを担当します。したがって、一般にマスタとスレーブの同期にはある程度の遅延が生じます。
読み取り/書き込みロックの問題に関しては、書き込みロックは排他的であり、読み取りロックは複数回取得できます。 Innodb では、ロックはテーブル ロック、行ロック、ギャップ ロックに分類されます。挿入操作でテーブルのロックが必要な場合、クエリでテーブルの行をロックする場合は、当然ながら待機する必要があります。
質問をもう一度よく考えてください。
私の質問の理解によると、マスター ライブラリがスレーブ ライブラリをリアルタイムで複製していると確信していますか? このロジックには何か問題があります。
誤解を招きやすい、マスターとスレーブのレプリケーション。通常、スレーブ ライブラリではレプリケーション プロセス以外の書き込み操作は許可されません。もちろん、手動でロックを解除する必要がある場合でも、スレーブ ライブラリのクエリ操作はレプリケーション書き込みプロセスをブロックしません。メイン ライブラリは、スレーブ ライブラリからのデータをロックされたレコードに同期し、スレーブ ライブラリのロックを待機するため、スレーブ ライブラリの書き込みアクションは、管理者を除くすべてが厳密に制御される必要があります
。