Condividi tramite


Requisiti di spazio su disco per le operazioni DDL sugli indici

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Istanza gestitaDatabase SQL in Microsoft Fabric

Lo spazio su disco è un fattore che richiede particolare considerazione in fase di creazione, ricompilazione o eliminazione di indici. Uno spazio su disco non adeguato può comportare una riduzione delle prestazioni o provocare un errore dell'operazione sull'indice. Questo articolo fornisce informazioni generali che consentono di determinare la quantità di spazio su disco necessaria per le operazioni DDL (Index Data Definition Language).

Operazioni sugli indici che non richiedono spazio su disco aggiuntivo

Le operazioni seguenti non richiedono spazio su disco aggiuntivo:

  • ALTER INDEX REORGANIZE; Tuttavia, lo spazio del log è obbligatorio.

  • DROP INDEX quando si elimina un indice non clusterizzato.

  • DROP INDEX quando si elimina un indice cluster offline senza specificare la MOVE TO clausola e gli indici non cluster non esistono.

  • CREATE TABLE (PRIMARY KEY o UNIQUE vincoli)

Operazioni sugli indici che richiedono spazio su disco aggiuntivo

Tutte le altre operazioni DLL sugli indici richiedono spazio su disco aggiuntivo temporaneo da utilizzare durante l'operazione e spazio su disco permanente per l'archiviazione della nuova o delle nuove strutture dell'indice.

Quando viene creata una nuova struttura dell'indice, è necessario spazio su disco per la struttura vecchia (origine) e per quella nuova (destinazione) nei file e filegroup appropriati. La struttura precedente non viene deallocata finché non viene eseguito il commit della transazione di creazione dell'indice.

Le operazioni DLL sugli indici seguenti comportano la creazione di nuove strutture dell'indice e richiedono spazio su disco aggiuntivo:

  • CREATE INDEX
  • CREATE INDEX WITH DROP_EXISTING
  • ALTER INDEX REBUILD
  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY o UNIQUE)
  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY o UNIQUE) quando il vincolo è basato su un indice cluster
  • DROP INDEX MOVE TO Si applica solo agli indici cluster.

Spazio su disco temporaneo per l'ordinamento

Oltre allo spazio su disco necessario per le strutture di origine e di destinazione, per l'ordinamento è necessario spazio su disco temporaneo, a meno che Query Optimizer non trovi un piano di esecuzione che non richiede l'ordinamento.

L'ordinamento, se necessario, viene eseguito in un nuovo indice per volta. Quando, ad esempio, si ricompilano un indice cluster e gli indici non cluster associati in una singola istruzione, gli indici vengono ordinati uno dopo l'altro. Lo spazio su disco aggiuntivo temporaneo necessario per l'ordinamento corrisponde pertanto alle dimensioni dell'indice di dimensioni maggiori coinvolto nell'operazione, che è solitamente l'indice cluster.

Se l'opzione SORT_IN_TEMPDB è impostata su ON, l'indice più grande deve essere contenuto in tempdb. Anche se questa opzione aumenta la quantità di spazio su disco temporaneo usato per creare un indice, potrebbe ridurre il tempo necessario per creare un indice quando tempdb si trova in un set di dischi diverso dal database utente.

Se SORT_IN_TEMPDB è impostato su OFF (impostazione predefinita) ogni indice, inclusi gli indici partizionati, viene ordinato nello spazio su disco di destinazione e solo lo spazio su disco per le nuove strutture di indice è necessario.

Per un esempio di calcolo dello spazio su disco, vedere Esempio di spazio su disco per l'indice.

Spazio su disco temporaneo per le operazioni sugli indici online

Quando si eseguono operazioni sugli indici online, è necessario spazio su disco aggiuntivo temporaneo.

Quando viene creato, ricompilato o eliminato un indice cluster online, viene creato un indice non cluster temporaneo per l'esecuzione del mapping tra vecchi segnalibri e nuovi segnalibri. Se l'opzione SORT_IN_TEMPDB è impostata su ON, questo indice temporaneo viene creato in tempdb. Se SORT_IN_TEMPDB è impostato su OFF, viene usato lo stesso filegroup o schema di partizione dell'indice di destinazione. L'indice di mapping temporaneo contiene un record per ogni riga della tabella e i contenuti sono costituiti dall'unione delle colonne di segnalibri vecchi e nuovi, inclusi uniqueifier e identificatori di record e includono una singola copia di ogni colonna utilizzata in entrambi i segnalibri. Per altre informazioni sulle operazioni sugli indici online, vedere Eseguire operazioni sugli indici online.

Nota

L'opzione SORT_IN_TEMPDB non può essere impostata per le istruzioni DROP INDEX. L'indice di mapping temporaneo viene sempre creato nello stesso filegroup o schema di partizione dell'indice di destinazione.

Nelle operazioni sugli indici online viene utilizzato il controllo delle versioni delle righe per isolare le operazioni dagli effetti delle modifiche apportate da altre transazioni. In questo modo, non è necessario richiedere blocchi di condivisione sulle righe lette. Le operazioni simultanee di aggiornamento ed eliminazione degli utenti durante le operazioni sugli indici online richiedono spazio per i record di versione in tempdb. Per altre informazioni, vedere Eseguire operazioni sugli indici online .