Condividi tramite


Esempio di spazio su disco dell'indice

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

Ogni volta che viene creato, ricompilato o eliminato un indice, nei file e nei filegroup appropriati è necessario spazio su disco per le strutture di origine (vecchie) e di destinazione (nuove). La struttura precedente non viene deallocata finché non viene eseguito il commit della transazione di creazione dell'indice. Potrebbe essere necessario spazio su disco temporaneo aggiuntivo per le operazioni di ordinamento. Per altre informazioni, vedere Requisiti di spazio su disco per le operazioni DDL sugli indici.

In questo esempio vengono determinati i requisiti di spazio su disco per la creazione di un indice cluster.

Viene presupposto che le condizioni seguenti siano vere prima della creazione dell'indice cluster:

  • La tabella esistente (heap) contiene 1 milione di righe. Ogni riga è lunga 200 byte.
  • L'indice non cluster A contiene 1 milione di righe. Ogni riga è lunga 50 byte.
  • L'indice non cluster B contiene 1 milione di righe. Ogni riga è lunga 80 byte.
  • L'opzione "index create memory" è impostata su 2 MB.
  • Per tutti gli indici, esistenti e nuovi, il valore del fattore di riempimento è 80. Questo significa che le pagine sono piene all'80 percento.

Nota

Dopo aver creato un indice cluster, è necessario ricompilare i due indici non cluster per sostituire l'indicatore di riga con la nuova chiave dell'indice cluster.

Calcoli dello spazio su disco per un'operazione di indice offline

Nei passaggi seguenti vengono calcolati sia lo spazio su disco temporaneo da utilizzare durante l'operazione sull'indice, sia lo spazio su disco permanente necessario per l'archiviazione dei nuovi indici. I calcoli illustrati sono approssimativi, cioè i risultati vengono arrotondati per eccesso e vengono considerate solo le dimensioni del livello foglia dell'indice. Per indicare i calcoli approssimati viene utilizzata la tilde (~).

  1. Determinare le dimensioni delle strutture di origine.

    • Heap: 1 milione * 200 byte ~ 200 MB
    • Indice non clusterizzato A: 1 milione * 50 byte / 80% ~ 63 MB
    • Indice non clusterizzato B: 1 milione * 80 byte / 80% ~ 100 MB

    Dimensioni totali delle strutture esistenti: 363 MB

  2. Determinare le dimensioni delle strutture di indice di destinazione. Si presuppone che la nuova chiave cluster sia lunga 24 byte, incluso un elemento univoco. L'indicatore di riga (lungo 8 byte) in entrambi gli indici non clusterizzati verrà sostituito da questa chiave cluster.

    • Indice clusterizzato: 1 milione * 200 byte / 80% ~ 250 MB

    • Indice non clusterizzato A: 1 milioni * (50 - 8 + 24) byte / 80% ~ 83 MB

    • Indice non clusterizzato B: 1 milioni * (80 - 8 + 24) byte / 80% ~ 120 MB

    • Dimensioni totali delle nuove strutture: 453 MB

    Lo spazio su disco totale necessario per supportare sia le strutture di origine che di destinazione durante l'operazione di indice è 816 MB (363 + 453). Lo spazio attualmente allocato alle strutture di origine verrà deallocato dopo che l'operazione sull'indice è stata confermata.

  3. Determinare ulteriore spazio su disco temporaneo per l'ordinamento.

    I requisiti di spazio vengono visualizzati per l'ordinamento in tempdb (con SORT_IN_TEMPDB impostato su ON) e l'ordinamento nella posizione di destinazione (con SORT_IN_TEMPDB impostato su OFF).

    1. Quando SORT_IN_TEMPDB è impostato su ON, tempdb deve avere spazio su disco sufficiente per contenere l'indice più grande (1 milione * 200 byte ~ 200 MB). Il fattore di riempimento non viene considerato nell'operazione di ordinamento.

      Spazio su disco aggiuntivo (nella tempdb posizione) uguale al valore di memoria di creazione dell'indice = 2 MB.

      Dimensioni totali dello spazio su disco temporaneo con SORT_IN_TEMPDB impostato su ON ~ 202 MB.

    2. Se SORT_IN_TEMPDB è impostato su OFF (impostazione predefinita), per l'ordinamento vengono usati 250 MB di spazio su disco già considerati per il nuovo indice nel passaggio 2.

      Spazio su disco aggiuntivo (nel percorso di destinazione) uguale al valore di memoria di creazione dell'indice = 2 MB.

      Dimensioni totali dello spazio su disco temporaneo con SORT_IN_TEMPDB impostato su OFF = 2 MB.

Usando tempdb, sarebbe necessario un totale di 1018 MB (816 + 202) per creare gli indici cluster e non cluster. Anche se l'uso tempdb di 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 rispetto al database utente. Per ulteriori informazioni sull'uso di tempdb, consultare l'opzione SORT_IN_TEMPDB per gli indici.

Senza usare tempdb, sarebbe necessario un totale di 818 MB (816 + 2) per creare gli indici cluster e non cluster.

Calcoli dello spazio su disco per un'operazione sugli indici cluster online

Quando si crea, elimina o ricompila un indice cluster online, è necessario spazio su disco aggiuntivo per compilare e gestire un indice di mapping temporaneo. L'indice di mapping temporaneo contiene un record per ogni riga della tabella e il suo contenuto è costituito dall'unione delle colonne di segnalibri vecchie e nuove.

Per calcolare lo spazio su disco necessario per un'operazione sull'indice cluster online, seguire la procedura illustrata per un'operazione su un indice offline e aggiungere i risultati a quelli ottenuti con il passaggio seguente.

  • Determinare lo spazio per l'indice di mapping temporaneo.

    In questo esempio il vecchio segnalibro è l'ID di riga (RID) dell'heap (8 byte) e il nuovo segnalibro è la chiave di clustering (24 byte incluso un uniqueifier). Tra i vecchi e i nuovi segnalibri non vi sono colonne sovrapposte.

    Dimensione dell'indice di mapping temporaneo = 1 milione * (8 byte + 24 byte) / 80% ~ 40 MB.

    Questo spazio su disco deve essere aggiunto allo spazio su disco necessario nel percorso di destinazione se SORT_IN_TEMPDB è impostato su OFF, o su tempdb se SORT_IN_TEMPDB è impostato su ON.

Per altre informazioni sull'indice di mapping temporaneo, vedere Requisiti di spazio su disco per le operazioni DDL sugli indici.

Riepilogo dello spazio su disco

Nella tabella seguente sono riportati i risultati dei calcoli dello spazio su disco.

Operazione sull'indice Requisiti di spazio su disco per le posizioni delle strutture seguenti
Operazione di indicizzazione offline con SORT_IN_TEMPDB = ON Spazio totale durante l'operazione: 1.018 MB

- Tabella e indici esistenti: 363 MB 1
- tempdb: 202 MB 1
- Nuovi indici: 453 MB

Spazio totale necessario dopo l'operazione: 453 MB
Operazione di indicizzazione offline con SORT_IN_TEMPDB = OFF Spazio totale durante l'operazione: 816 MB

- Tabella e indici esistenti: 363 MB 1
- Nuovi indici: 453 MB

Spazio totale necessario dopo l'operazione: 453 MB
Operazione sugli indici online con SORT_IN_TEMPDB = ON Spazio totale durante l'operazione: 1.058 MB

- Tabella e indici esistenti: 363 MB 1
- tempdb (include l'indice di mapping): 242 MB*
- Nuovi indici: 453 MB

Spazio totale necessario dopo l'operazione: 453 MB
Operazione sugli indici online con SORT_IN_TEMPDB = OFF Spazio totale durante l'operazione: 856 MB

- Tabella e indici esistenti: 363 MB 1
- Indice di mapping temporaneo: 40 MB 1
- Nuovi indici: 453 MB

Spazio totale necessario dopo l'operazione: 453 MB

1 Questo spazio viene deallocato dopo il commit dell'operazione sull'indice.

In questo esempio non viene considerato spazio su disco temporaneo aggiuntivo necessario in tempdb per i record di versione creati da operazioni simultanee di aggiornamento ed eliminazione dell'utente.