Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Azure SQL Database
Azure SQL Istanza gestita
Database 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 INDEXquando si elimina un indice non clusterizzato.DROP INDEXquando si elimina un indice cluster offline senza specificare laMOVE TOclausola e gli indici non cluster non esistono.CREATE TABLE(PRIMARY KEYoUNIQUEvincoli)
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 INDEXCREATE INDEX WITH DROP_EXISTINGALTER INDEX REBUILD-
ALTER TABLE ADD CONSTRAINT(PRIMARY KEYoUNIQUE) -
ALTER TABLE DROP CONSTRAINT(PRIMARY KEYoUNIQUE) quando il vincolo è basato su un indice cluster -
DROP INDEX MOVE TOSi 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 .
Attività correlate
- Esempio di spazio su disco per l'indice
- Spazio su disco del log delle transazioni per le operazioni sugli indici
- Stimare le dimensioni di una tabella
- Stimare le dimensioni di un indice cluster
- Stimare le dimensioni di un indice non cluster
- Stimare le dimensioni di un heap