適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
データベース エンジン のインスタンスからの I/O には論理書き込みと物理書き込みがあります。 論理書き込みは、バッファー キャッシュ内のページのデータが変更されるときに行われます。 物理書き込みは、そのページを バッファー キャッシュ からディスクに書き込むときに行われます。
ページがバッファー キャッシュで変更されると、すぐにディスクに書き戻されることはありません。代わりに、ページはダーティとしてマークされます。 つまり、ページはディスクに物理的に書き込まれる前に、複数の論理書き込みを行うことができます。 論理書き込みを行うたびに、トランザクション ログ レコードが、変更を記録するログ キャッシュに挿入されます。 ログ レコードは、関連付けられているダーティ ページがバッファー キャッシュから削除されディスクに書き込まれる前に、ディスクに書き込まれる必要があります。
SQL Server は、関連するログ レコードがディスクに書き込まれる前にダーティ ページを書き込むのを防ぐ先書きログ (WAL) と呼ばれる手法を使用します。 これは復旧マネージャーが正しく機能するために必要不可欠です。 詳細については、 先書きトランザクション ログを参照してください。
SQL Server が変更されたデータ ページを書き込む方法
次の図は、変更されたデータ ページが書き込まれるプロセスを示しています。
バッファー マネージャーでは、ページを書き込むときに、1 回のギャザー書き込み操作に含めることができる隣接するダーティ ページを検索します。 隣接するページには連続するページ ID があり、同じファイルから取得されます。ページがメモリ内で連続している必要はありません。 検索は、次に示すいずれかの状況が発生するまで、前後両方向に続行されます。
- クリーンなページが見つかった。
- 32 ページ分見つかった。
- まだログにフラッシュされていないログ シーケンス番号 (LSN) を含むダーティ ページが見つかりました。
- すぐにラッチできないページが見つかりました。
このようにして、ページのセット全体を 1 回のギャザー書き操作でディスクに書き込むことができます。
ページが書き込まれる直前に、データベースで指定されたページ保護の形式が、ページに追加されます。
破損ページ保護が追加される場合、I/O のためにそのページを排他的 (EX) にラッチする必要があります。 これは、破損ページ保護によってページが変更された結果、他のスレッドから読み取るのに不適切な形式となるためです。
チェックサム ページ保護が追加された場合、またはデータベースでページ保護が使用されていない場合、ページは I/O の更新 (UP) ラッチでラッチされます。 このラッチは、書き込み中に他の人がページを変更するのを防ぐ一方で、読み取りは許可します。
ディスク I/O ページ保護オプションの詳細については、「 バッファー管理」を参照してください。
ダーティ ページをディスクに書き込む方法
ダーティ ベージは次の 3 つの方法のいずれかでディスクに書き込まれます。
遅延書き込み、一括書き込み、およびチェックポイント処理は、I/O 操作の完了を待たずに進行します。 これらは、常に、非同期 (重複) I/O を使用し、他の作業と並列して続行され、I/O の成功は後でチェックします。 このため、SQL Server では CPU リソースと I/O リソースの両方を適切なタスクに最大限に利用できます。
遅延書き込みプロセス
レイジー ライターは、使用頻度の少ないページをバッファー キャッシュから削除することで空きバッファーを使用可能にするシステム プロセスです。 ダーティページはまずディスクに書き込まれます。
迅速な書き込みプロセス
集中書き込みプロセスでは、一括挿入や SELECT INTO 操作など、ログに最小限記録される操作に関連付けられているダーティ データ ページを書き込みます。 このプロセスにより、新しいページの作成と書き込みを並列に実行できます。 つまり、呼び出し元の操作は、操作全体が完了するまで待機してから、ページをディスクに書き込む必要はありません。
チェックポイント プロセス
チェックポイント プロセスでは、指定されたデータベースからのページを含むバッファーのバッファー キャッシュを定期的にスキャンし、ダーティ ページをすべてディスクに書き込みます。 チェックポイントは、すべてのダーティ ページがディスクに書き込まれたことを確認するために作成されるポイントで、その後の復旧の時間を短縮します。
ユーザーは、 CHECKPOINT
コマンドを使用してチェックポイント操作を要求したり、データベース エンジンが、最後のチェックポイント以降に使用されたログ領域と経過時間に基づいて自動チェックポイントを生成したりする場合があります。 さらに、特定の利用状況が発生したときに、チェックポイントが生成されます。 たとえば、データ ファイルやログ ファイルがデータベースに追加されたり、データベースから削除されたりするとき、または SQL Server インスタンスが停止したときなどです。
詳細については、 チェックポイントとログのアクティブな部分を参照してください。