Requisiti di spazio su disco per operazioni DLL sugli indiciDisk Space Requirements for Index DDL Operations

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Lo spazio su disco è un fattore che richiede particolare considerazione in fase di creazione, ricompilazione o eliminazione di indici.Disk space is an important consideration when you create, rebuild, or drop indexes. Uno spazio su disco non adeguato può comportare una riduzione delle prestazioni o provocare un errore dell'operazione sull'indice.Inadequate disk space can degrade performance or even cause the index operation to fail. In questo argomento vengono fornite informazioni generali utili per determinare la quantità di spazio su disco necessaria per operazioni DLL (Data Definition Language) sugli indici.This topic provides general information that can help you determine the amount of disk space required for index data definition language (DDL) operations.

Operazioni sugli indici che non richiedono spazio su disco aggiuntivoIndex Operations That Require No Additional Disk Space

Le operazioni seguenti non richiedono spazio su disco aggiuntivo:The following index operations require no additional disk space:

  • ALTER INDEX REORGANIZE. È tuttavia richiesto spazio nel log.ALTER INDEX REORGANIZE; however, log space is required.

  • DROP INDEX quando si elimina un indice non cluster.DROP INDEX when you are dropping a nonclustered index.

  • DROP INDEX quando si elimina un indice cluster offline senza specificare la clausola MOVE TO e non sono presenti indici non cluster.DROP INDEX when you are dropping a clustered index offline without specifying the MOVE TO clause and nonclustered indexes do not exist.

  • CREATE TABLE (vincoli PRIMARY KEY o UNIQUE)CREATE TABLE (PRIMARY KEY or UNIQUE constraints)

Operazioni sugli indici che richiedono spazio su disco aggiuntivoIndex Operations That Require Additional Disk Space

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.All other index DDL operations require additional temporary disk space to use during the operation, and permanent disk space to store the new index structure or structures.

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.When a new index structure is created, disk space for both the old (source) and new (target) structures is required in their appropriate files and filegroups. La struttura di origine non viene deallocata finché non viene eseguito il commit della transazione di creazione dell'indice.The old structure is not deallocated until the index creation transaction commits.

Le operazioni DLL sugli indici seguenti comportano la creazione di nuove strutture dell'indice e richiedono spazio su disco aggiuntivo:The following index DDL operations create new index structures and require additional disk space:

  • CREATE INDEXCREATE INDEX

  • CREATE INDEX WITH DROP_EXISTINGCREATE INDEX WITH DROP_EXISTING

  • ALTER INDEX REBUILDALTER INDEX REBUILD

  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY o UNIQUE)ALTER TABLE ADD CONSTRAINT (PRIMARY KEY or UNIQUE)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY o UNIQUE) quando il vincolo è basato su un indice clusterALTER TABLE DROP CONSTRAINT (PRIMARY KEY or UNIQUE) when the constraint is based on a clustered index

  • DROP INDEX MOVE TO (solo per indici cluster)DROP INDEX MOVE TO (Applies only to clustered indexes.)

Spazio su disco temporaneo per l'ordinamentoTemporary Disk Space for Sorting

Oltre allo spazio su disco necessario per le strutture di origine e di destinazione, è necessario spazio su disco temporaneo per l'ordinamento, a meno che tramite Query Optimizer non venga individuato un piano di esecuzione che non richiede l'ordinamento.Besides the disk space required for the source and target structures, temporary disk space is required for sorting, unless the query optimizer finds an execution plan that does not require sorting.

L'ordinamento, se necessario, viene eseguito in un nuovo indice per volta.If sorting is required, sorting occurs one new index at a time. 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.For example, when you rebuild a clustered index and associated nonclustered indexes within a single statement, the indexes are sorted one after the other. Lo spazio su disco aggiuntivo temporaneo necessario per l'ordinamento corrisponde pertanto alle dimensioni dell'indice di dimensioni maggiori coinvolto nell'operazione,Therefore, the additional temporary disk space that is required for sorting only has to be as large as the largest index in the operation. che è solitamente l'indice cluster.This is almost always the clustered index.

Se l'opzione SORT_IN_TEMPDB è impostata su ON, l'indice di dimensioni maggiori deve poter essere contenuto in tempdb.If the SORT_IN_TEMPDB option is set to ON, the largest index must fit into tempdb. Sebbene questa opzione comporti l'aumento della quantità di spazio su disco temporaneo necessario per creare un indice, potrebbe consentire di ridurre il tempo necessario per questa operazione quando tempdb si trova in un set di dischi diverso da quello in cui si trova il database utente.Although this option increases the amount of temporary disk space that is used to create an index, it may reduce the time that is required to create an index when tempdb is on a set of disks different from the user database.

Se l'opzione SORT_IN_TEMPDB è impostata su OFF, ovvero il valore predefinito, ogni indice, inclusi gli indici partizionati, viene archiviato nel relativo spazio su disco di destinazione ed è necessario solo lo spazio su disco per le nuove strutture dell'indice.If SORT_IN_TEMPDB is set to OFF (the default) each index, including partitioned indexes, is sorted in its destination disk space; and only the disk space for the new index structures is required.

Per un esempio di calcolo dello spazio su disco, vedere Esempio di spazio su disco per gli indici.For an example of calculating disk space, see Index Disk Space Example.

Spazio su disco temporaneo per operazioni sugli indici onlineTemporary Disk Space for Online Index Operations

Quando si eseguono operazioni sugli indici online, è necessario spazio su disco aggiuntivo temporaneo.When you perform index operations online, additional temporary disk space is required.

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.If a clustered index is created, rebuilt, or dropped online, a temporary nonclustered index is created to map old bookmarks to new bookmarks. Se l'opzione SORT_IN_TEMPDB è impostata su ON, questo indice temporaneo viene creato in tempdb.If the SORT_IN_TEMPDB option is set to ON, this temporary index is created in tempdb. Se l'opzione SORT_IN_TEMPDB è impostata su OFF, viene utilizzato lo stesso filegroup o schema di partizione dell'indice di destinazione.If SORT_IN_TEMPDB is set to OFF, the same filegroup or partition scheme as the target index is used. 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.The temporary mapping index contains one record for each row in the table, and its contents is the union of the old and new bookmark columns, including uniqueifiers and record identifiers and including only a single copy of any column used in both bookmarks. Per altre informazioni sulle operazioni online sugli indici, vedere Eseguire operazioni online sugli indici.For more information about online index operations, see Perform Index Operations Online.

Nota

Non è possibile impostare l'opzione SORT_IN_TEMPDB per le istruzioni DROP INDEX.The SORT_IN_TEMPDB option cannot be set for DROP INDEX statements. L'indice di mapping temporaneo viene sempre creato nello stesso filegroup o schema di partizione dell'indice di destinazione.The temporary mapping index is always created in the same filegroup or partition scheme as the target index.

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.Online index operations use row versioning to isolate the index operation from the effects of modifications made by other transactions. In questo modo, non è necessario richiedere blocchi di condivisione sulle righe lette.This avoids the need for requesting share locks on rows that have been read. Le operazioni utente simultanee di aggiornamento ed eliminazione durante le operazioni sugli indici online richiedono spazio per i record di versione in tempdb.Concurrent user update and delete operations during online index operations require space for version records in tempdb. Per altre informazioni, vedere Eseguire operazioni online sugli indici .For more information, see Perform Index Operations Online .

Esempio di spazio su disco per gli indiciIndex Disk Space Example

Spazio su disco per il log delle transazioni per operazioni sugli indiciTransaction Log Disk Space for Index Operations

Stima delle dimensioni di una tabellaEstimate the Size of a Table

Stima delle dimensioni di un indice clusterEstimate the Size of a Clustered Index

Stima delle dimensioni di un indice non clusterEstimate the Size of a Nonclustered Index

Stima delle dimensioni di un heapEstimate the Size of a Heap

CREATE INDEX (Transact-SQL)CREATE INDEX (Transact-SQL)

ALTER INDEX (Transact-SQL)ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL)

Specificare un fattore di riempimento per un indiceSpecify Fill Factor for an Index

Riorganizzare e ricompilare gli indiciReorganize and Rebuild Indexes