先行書き込みトランザクション ログ
このトピックでは、データの変更をディスクに記録するときの先行書き込みトランザクション ログの役割について説明します。トランザクション ログの基本的な情報については、「トランザクション ログの概要」を参照してください。
SQL Server 2005 では、先行書き込みログ (WAL) を使用します。これにより、関連付けられているログ レコードより前にデータ変更がディスクに書き込まれることがなくなります。これにより、トランザクションの ACID プロパティが維持されます。トランザクションおよび ACID プロパティの詳細については、「トランザクション (データベース エンジン)」を参照してください。
先行書き込みログがどのように機能するのかを理解するには、変更されたデータがディスクに書き込まれるしくみを把握しておくことが重要です。SQL Server はバッファ キャッシュを保持し、データを取得する必要がある場合は、そのキャッシュの中へデータ ページを読み取ります。データ変更はディスクに対して直接行われるのではなく、バッファ キャッシュ内のページのコピーに対して行われます。この変更は、データベースにチェックポイントが発生するまではディスクに書き込まれません。変更がディスクに書き込まれると、新しいページの保持にバッファを使用できるようになります。変更されたデータ ページをバッファ キャッシュからディスクに書き込むことを "ページのフラッシュ" といいます。キャッシュ内で変更され、まだディスクに書き込まれていないページはダーティ ページといいます。
バッファ内のページが変更された時点で、その変更を記録したログ レコードがログ キャッシュ内に作成されます。このログ レコードは、関連付けられているダーティ ページがバッファ キャッシュからディスクにフラッシュされる前にディスクに書き込まれる必要があります。ログ レコードが書き込まれる前にダーティ ページがフラッシュされた場合、ログ レコードがディスクに書き込まれる前にサーバーに障害が発生すると、ロールバックできない変更がダーティ ページによりディスク上に作成されます。SQL Server には、関連付けられているログ レコードが書き込まれる前にダーティ ページがフラッシュされないようにするロジックが備わっています。ログ レコードは、トランザクションがコミットされるときにディスクに書き込まれます。