ラージ オブジェクトの削除と再構築
大きなインデックスを削除または再構築したり、大きなテーブルに対する削除や切り捨てを行うと、トランザクションがコミットされるまで、SQL Server 2005 データベース エンジンにより、実際のページの割り当て解除と、それらの割り当て解除に関連付けられたロックが遅延されます。この実装は、マルチユーザー環境での自動コミットと明示的なトランザクションをどちらもサポートし、128 個を超えるエクステントを使用する大きなテーブルとインデックスに適用されます。
データベース エンジンでは、プロセスを論理フェーズと物理フェーズの 2 つのフレーズに分割することにより、ラージ オブジェクトの削除に必要な割り当てのロックを回避しています。
論理フェーズでは、テーブルまたはインデックスで使用されている既存のアロケーション ユニットが割り当て解除用にマークされ、トランザクションのコミットが完了するまでロックされます。クラスタ化インデックスが削除されると、そのデータ行がコピーされ、再構築されたクラスタ化インデックスまたはヒープを格納するために作成された新しいアロケーション ユニットに移動されます (インデックスが再構築されると、これらのデータ行も並べ替えられます)。ロールバックが発生した場合、ロールバックされる必要があるのはこの論理フェーズのみです。
物理フェーズは、トランザクションがコミットされた後に発生します。割り当て解除用にマークされたアロケーション ユニットは、バッチで物理的に削除されます。これらの削除操作は、バックグラウンドで発生する短いトランザクションで処理されるため、多くのロックを必要としません。
物理フェーズはトランザクションがコミットされた後に発生するので、テーブルまたはインデックスの格納領域はまだ使用できないものと見なされることがあります。物理フェーズが完了する前に、データベースを拡張するために、この領域が必要な場合は、データベース エンジンにより、割り当て解除用にマークされたアロケーション ユニットから領域が回復されます。これらのアロケーション ユニットで現在使用されている領域を確認するには、sys.allocation_units カタログ ビューを使用します。
削除操作が遅延されると、割り当てられた領域が直ちに解放されないので、データベース エンジンに余分なオーバーヘッド コストをもたらします。このため、使用するエクステントが 128 個以下であるテーブルとインデックスについては、SQL Server 2000 の場合と同様に削除、切り捨て、再構築が行われます。つまり、論理フェーズも物理フェーズもトランザクションのコミット後に発生することになります。