Descartando e recriando objetos grandes
Quando você descarta ou recria índices grandes, descarta ou trunca tabelas grandes, o Mecanismo de Banco de Dados do SQL Server 2005 adia as desalocações de páginas atuais e seus bloqueios associados, até depois de uma transação ser confirmada. Essa implementação fornece suporte a transações de confirmação automática e também a transações explícitas em um ambiente multiusuário e se aplica a grandes tabelas e índices que usam mais de 128 extensões.
O Mecanismo de Banco de Dados evita os bloqueios de alocação que são exigidos para descartar grandes objetos, dividindo o processo em duas fases separadas: lógica e física.
Na fase lógica, as unidades de alocação existentes usadas pela tabela ou índice são marcadas para desalocação e bloqueadas até que a transação seja confirmada. Quando um índice clusterizado é descartado, as linhas de dados são copiadas e movidas para novas unidades de alocação criadas para armazenar o índice clusterizado recriado ou um heap. (No caso de recriação de um índice, as linhas de dados também são classificadas.) Quando há uma reversão, só esta fase lógica precisa ser revertida.
A fase física acontece depois de a transação ser confirmada. As unidades de alocação marcadas para desalocação são descartadas fisicamente em lotes. Esses descartes são tratados dentro de transações curtas que acontecem no plano de fundo e não requerem muitos bloqueios.
Como a fase física ocorre depois de a transação ser confirmada, o espaço de armazenamento da tabela ou do índice pode ainda aparecer como indisponível. Se esse espaço for necessário para que o banco de dados cresça antes de a fase física estar completada, o Mecanismo de Banco de Dados tenta recuperar espaço de unidades de alocação marcadas para desalocação. Para encontrar o espaço usado atualmente por essas unidades de alocação, use a exibição do catálogo sys.allocation_units.
Operações de descarte adiadas não liberam de imediato o espaço alocado e trazem custos adicionais de sobrecarga no Mecanismo de Banco de Dados. Portanto, tabelas e índices que usam 128 extensões ou menos são descartados, truncados e recriados como no SQL Server 2000. Isso significa que ambas as fases, lógica e física, acontecem antes de a transação ser confirmada.