1

SQL Serverがチェックポイントを発行すると、チェックポイントが完了するまで他のすべての操作がブロックされますか?

私が正しく理解していれば、チェックポイントが発生すると、サーバーはすべてのダーティページを書き込む必要があります。

完了すると、トランザクションログにチェックポイントが書き込まれるため、障害が発生した場合は、その時点からのトランザクション(またはチェックポイントの時点ですでに開始されているトランザクション)のみが処理されます。

チェックポイントの進行中にSQLServerは、ダーティでないページがダーティになるのをどのように防ぎますか?

チェックポイントが完了するまで、すべての書き込みをブロックしますか?

4

2 に答える 2

2

チェックポイントは書き込みをブロックしません。

チェックポイントには開始 LSN と終了 LSN があります。ディスク上のすべてのページが少なくともチェックポイントの開始 LSN にあることが保証されます。ページが後の LSN にあるかどうかは問題ではありません (チェックポイントの開始後に書き込まれているため)。

チェックポイントは、ディスク上のすべてのページの最小 LSN のみを保証します。正確な LSN を保証するものではありません。

チェックポイント開始 LSN より前の LSN からの情報を含むすべてのトランザクション ログ レコードを削除できるため、これは理にかなっています。これがチェックポイントの目的です。ログの一部が非アクティブになるのを許可します。

データの一貫性と正確性のためにチェックポイントは必要ありません。ログ領域を解放し、回復時間を短縮するだけです。

于 2012-10-16T14:04:34.797 に答える
1

チェックポイントが発生すると、サーバーはすべてのダーティ ページを書き込む必要があります

そして、それはそれがすることです。ただし、チェックポイントによって保証されるのは、チェックポイントが開始された瞬間にダーティだったすべてのページを書き込むことです。チェックポイントの進行中にダーティになったページは、書き込まれる場合と書き込まれない場合がありますが、確実に書き込まれる保証はありません。この保証が提供するのは、物理的な回復が最後のチェックポイントから REDO を開始できるという最適化です。これは、それより前のログ内のすべてが既にデータ ページに適用されているためです (やり直す必要はありません)。ARIESのウィキペディアのページにもあります:

チェックポイントの単純な方法では、データベース全体をロックして、チェックポイントの作成中に DPT と TT が変更されないようにします。ファジー ロギングは、2 つのログ レコードを書き込むことでこれを回避します。1 つの Fuzzy Log Starts Here レコードと、チェックポイント データを準備した後の実際のチェックポイント。2 つのレコードの間に他のログレコードを作成できます

usr's answer は、これがどのように達成されるかを説明しています (チェックポイントの開始 LSN と終了 LSN を使用して)。

于 2012-10-16T14:18:10.457 に答える