Esempio di spazio su disco per gli indici

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

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 di origine 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 Disk Space Requirements for Index DDL Operations.

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 sull'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 cluster A: 1 milione * 50 byte / 80% ~ 63 MB

    Indice non cluster B: 1 milione * 80 byte / 80% ~ 100 MB

    Dimensioni totali delle strutture esistenti: 363 MB

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

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

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

    Indice non cluster B: 1 milione * (80 - 8 + 24) byte / 80% ~ 120 MB

    Dimensioni totali delle nuove strutture: 453 MB

    Lo spazio su disco totale necessario per supportare entrambe le strutture di origine e di destinazione per la durata dell'operazione sul'indice è di 816 MB (363 + 453). Lo spazio attualmente allocato alle strutture di origine verrà deallocato dopo il commit dell'operazione sull'indice.

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

    Vengono illustrati i requisiti di spazio per l'ordinamento in tempdb (con SORT_IN_TEMPDB impostato su ON) e per l'ordinamento nella posizione di destinazione (con SORT_IN_TEMPDB impostato su OFF).

    1. Quando SORT_IN_TEMPDB è impostato su ON, in tempdb deve essere disponibile spazio su disco sufficiente per contenere l'indice di dimensioni maggiori (1 milione * 200 byte ~ 200 MB). Nell'operazione di ordinamento non è considerato il fattore di riempimento.

      Spazio su disco aggiuntivo (nel percorso di tempdb ) uguale al valore dell' opzione di configurazione del server index create memory = 2 MB.

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

    2. Quando SORT_IN_TEMPDB è impostato su OFF (impostazione predefinita), per l'ordinamento vengono utilizzati i 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 dell' opzione di configurazione del server index create memory = 2 MB.

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

Se si usa tempdb, per creare gli indici cluster e non cluster sarebbero necessari in totale 1018 MB (816 + 202). Con tempdb si aumenta la quantità di spazio su disco temporaneo usata per creare un indice, ma può ridursi il tempo necessario per creare un indice quando tempdb si trova in un set di dischi diversi da quello del database utente. Per altre informazioni sull'uso di tempdb, vedere Opzione SORT_IN_TEMPDB per gli indici.

Se non si usa tempdb, per creare gli indici cluster e non cluster sarebbero necessari in totale 818 MB (816+ 2).

Calcoli dello spazio su disco per un'operazione sull'indice 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.

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

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

Per altre informazioni sull'indice di mapping temporaneo, vedere Requisiti di spazio su disco per operazioni DLL 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 i percorsi delle strutture seguenti
Operazione sull'indice offline con SORT_IN_TEMPDB = ON Spazio totale durante l'operazione: 1.018 MB

- Tabella e indici esistenti: 363 MB*

-
tempdb: 202 MB*

- Nuovi indici: 453 MB

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

- Tabella e indici esistenti: 363 MB*

- Nuovi indici: 453 MB

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

- Tabella e indici esistenti: 363 MB*

-
tempdb (include l'indice di mapping): 242 MB*

- Nuovi indici: 453 MB

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

- Tabella e indici esistenti: 363 MB*

- Indice di mapping temporaneo: 40 MB

- Nuovi indici: 453 MB

Spazio totale necessario dopo l'operazione: 453 MB

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

In questo esempio non viene considerato lo spazio su disco temporaneo aggiuntivo necessario in tempdb per i record delle versioni creati dalle operazioni simultanee di aggiornamento ed eliminazione.

Requisiti di spazio su disco per operazioni DDL sugli indici

Spazio su disco per il log delle transazioni per operazioni sugli indici