Eliminazione e ricostruzione di oggetti di grandi dimensioni

In caso di eliminazione o ricostruzione di indici di grandi dimensioni oppure di eliminazione o troncamento di tabelle di grandi dimensioni, in Motore di database di SQL Server 2005 le deallocazioni di pagine effettive e i relativi blocchi associati vengono posticipati fino all'esecuzione del commit di una transazione. Questa implementazione supporta sia l'autocommit che le transazioni esplicite in un ambiente multiutente e si applica a tabelle e indici di grandi dimensioni che utilizzano più di 128 extent.

In Motore di database vengono evitati i blocchi di allocazione necessari per eliminare oggetti di grandi dimensioni suddividendo il processo in due fasi distinte, la fase logica e la fase fisica.

Nella fase logica, le unità di allocazione esistenti utilizzate dalla tabella o dall'indice vengono contrassegnate per la deallocazione e bloccate fino al completamento del commit della transazione. Quando viene eliminato un indice cluster, le righe di dati vengono copiate e quindi spostate nelle nuove unità di allocazione create nell'archivio come indice cluster ricostruito o heap. Nel caso della ricostruzione di un indice, le righe di dati vengono anche archiviate. Nel caso di un rollback, solo la fase logica deve esservi sottoposta.

La fase fisica si verifica dopo il commit della transazione. Le unità di allocazione contrassegnate per la deallocazione vengono eliminate fisicamente in batch. Tali eliminazioni vengono gestite all'interno di transazioni brevi eseguite in background e non richiedono un numero elevato di blocchi.

Poiché la fase fisica si verifica in seguito al completamento del commit di una transazione, lo spazio di archiviazione della tabella o dell'indice potrebbe continuare ad apparire come non disponibile. Se tale spazio è necessario per l'aumento delle dimensioni del database prima del completamento della fase fisica, Motore di database tenta di recuperare spazio dalle unità di allocazione contrassegnate per le deallocazione. Per trovare lo spazio utilizzato dalle unità di allocazione, utilizzare la vista del catalogo sys.allocation_units.

Le operazioni di eliminazione posticipate non rilasciano spazio allocato immediatamente e introducono costi di overhead aggiuntivi in Motore di database. Le tabelle e gli indici che utilizzano 128 o un numero minore di extent vengono pertanto eliminati, troncati e ricostruiti esattamente come in SQL Server 2000. Ciò significa che sia la fase logica che quella fisica si verificano prima del commit della transazione.

Vedere anche

Concetti

Altre risorse