Dela via


Exempel på indexdiskutrymme

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

När ett index skapas, återskapas eller tas bort krävs diskutrymme för både de gamla strukturerna (källa) och nya (mål) i lämpliga filer och filgrupper. Den gamla strukturen frisläpps inte förrän transaktionen för att skapa indexet bekräftas. Ytterligare tillfälligt diskutrymme för sorteringsåtgärder kan också behövas. Mer information finns i Diskutrymmeskrav för index-DDL-åtgärder.

I det här exemplet fastställs kraven på diskutrymme för att skapa ett klustrat index.

Anta att följande villkor gäller innan du skapar det klustrade indexet.

  • Den befintliga tabellen (heap) innehåller 1 miljon rader. Varje rad är 200 byte lång.
  • Icke-grupperat index A innehåller 1 miljon rader. Varje rad är 50 byte lång.
  • Icke-grupperat index B innehåller 1 miljon rader. Varje rad är 80 byte lång.
  • Alternativet för att skapa minne för index är inställt på 2 MB.
  • Ett fyllningsfaktorvärde på 80 används för alla befintliga och nya index. Det innebär att sidorna är 80 procent fulla.

Not

När du skapar ett grupperat index måste de två icke-grupperade indexen återskapas för att ersätta radindikatorn med den nya klustrade indexnyckeln.

Diskutrymmesberäkningar för en offlineindexåtgärd

I följande steg beräknas både tillfälligt diskutrymme som ska användas under indexåtgärden och permanent diskutrymme för att lagra de nya indexen. De beräkningar som visas är ungefärliga. resultaten avrundas uppåt och tar endast hänsyn till storleken på indexbladets nivå. Tilde (~) används för att ange ungefärliga beräkningar.

  1. Fastställa storleken på källstrukturerna.

    • Heap: 1 miljon * 200 byte ~ 200 MB
    • Icke-grupperat index A: 1 miljon * 50 byte/80% ~ 63 MB
    • Icke-grupperat index B: 1 miljon * 80 byte/80% ~ 100 MB

    Total storlek på befintliga strukturer: 363 MB

  2. Fastställa storleken på målindexstrukturerna. Anta att den nya klustrade nyckeln är 24 byte lång, inklusive en unikifierare. Radindikatorn (8 byte lång) i båda icke-grupperade index ersätts av den här klustrade nyckeln.

    • Grupperat index: 1 miljon * 200 byte / 80 % ~ 250 MB

    • Nonclustered index A: 1 miljon * (50 - 8 + 24) byte / 80% ~ 83 MB

    • Icke-grupperat index B: 1 miljon * (80–8 + 24) byte/80% ~ 120 MB

    • Total storlek på nya strukturer: 453 MB

    Det totala diskutrymme som krävs för att stödja både käll- och målstrukturerna under indexåtgärden är 816 MB (363 + 453). Det utrymme som för närvarande allokeras till källstrukturerna kommer att frigöras när indexåtgärden har slutförts.

  3. Fastställ ytterligare tillfälligt diskutrymme för sortering.

    Utrymmeskrav visas för sortering i tempdb (med SORT_IN_TEMPDB inställt på ON) och sortering på målplatsen (med SORT_IN_TEMPDB inställt på OFF).

    1. När SORT_IN_TEMPDB är inställt på ON, måste tempdb ha tillräckligt med diskutrymme för att lagra det största indexet (1 miljon * 200 byte ~ 200 MB). Fyllningsfaktorn beaktas inte i sorteringsåtgärden.

      Ytterligare diskutrymme (på platsen tempdb ) som motsvarar minnet för att skapa index = 2 MB.

      Total storlek på tillfälligt diskutrymme med SORT_IN_TEMPDB inställt på ON ~ 202 MB.

    2. När SORT_IN_TEMPDB är inställt på OFF (standard) används 250 MB diskutrymme som redan övervägts för det nya indexet i steg 2 för sortering.

      Ytterligare diskutrymme (på målplatsen) som är lika med indexet skapar minnesvärde = 2 MB.

      Total storlek på tillfälligt diskutrymme med SORT_IN_TEMPDB inställt på OFF = 2 MB.

Med hjälp av tempdb behövs 1018 MB (816 + 202) för att skapa klustrade och icke-klustrade index. Även om användningen tempdb ökar mängden tillfälligt diskutrymme som används för att skapa ett index, kan det minska den tid som krävs för att skapa ett index när tempdb det finns på en annan uppsättning diskar än användardatabasen. För mer information om hur du använder tempdb, se alternativet SORT_IN_TEMPDB för index.

Utan att använda tempdbskulle totalt 818 MB (816 + 2) behövas för att skapa klustrade och icke-grupperade index.

Beräkningar av diskutrymme för en onlineklusterbaserad indexåtgärd

När du skapar, släpper eller återskapar ett klustrat index online krävs ytterligare diskutrymme för att skapa och underhålla ett tillfälligt mappningsindex. Det här temporära mappningsindexet innehåller en post för varje rad i tabellen, och dess innehåll är en union av de gamla och nya bokmärkeskolumnerna.

Om du vill beräkna diskutrymmet som behövs för en onlineklusteråtgärd följer du stegen som visas för en offlineindexåtgärd och lägger till dessa resultat i resultatet av följande steg.

  • Fastställ utrymme för det tillfälliga mappningsindexet.

    I det här exemplet är det gamla bokmärket rad-ID (RID) för heapen (8 byte) och det nya bokmärket är klustringsnyckeln (24 byte inklusive en uniqueifier). Det finns inga överlappande kolumner mellan de gamla och nya bokmärkena.

    Indexstorlek för tillfällig mappning = 1 miljon * (8 byte + 24 byte) /80% ~ 40 MB.

    Diskutrymmet måste läggas till i det diskutrymme som krävs på målplatsen om SORT_IN_TEMPDB är inställt på OFF, eller till tempdb om SORT_IN_TEMPDB är inställt på ON.

Mer information om det tillfälliga mappningsindexet finns i Diskutrymmeskrav för index-DDL-åtgärder.

Sammanfattning av diskutrymme

I följande tabell sammanfattas resultatet av diskutrymmesberäkningarna.

Indexåtgärd Diskutrymmeskrav för platserna i följande strukturer
Offlineindexåtgärd med SORT_IN_TEMPDB = ON Totalt utrymme under åtgärden: 1 018 MB

– Befintlig tabell och index: 363 MB 1
- tempdb: 202 MB 1
– Nya indexen: 453 MB

Totalt utrymme som krävs efter åtgärden: 453 MB
Offlineindexåtgärd med SORT_IN_TEMPDB = OFF Totalt utrymme under åtgärden: 816 MB

– Befintlig tabell och index: 363 MB 1
– Nya index: 453 MB

Totalt utrymme som krävs efter åtgärden: 453 MB
Online-indexoperation med SORT_IN_TEMPDB = ON Totalt utrymme under åtgärden: 1 058 MB

– Befintlig tabell och index: 363 MB 1
- tempdb (inkluderar mappningsindex): 242 MB*
– Nya indexer: 453 MB

Totalt utrymme som krävs efter åtgärden: 453 MB
Onlineindexåtgärd med SORT_IN_TEMPDB = OFF Totalt utrymme under åtgärden: 856 MB

– Befintlig tabell och index: 363 MB 1
– Tillfälligt mappningsindex: 40 MB 1
– Nya index: 453 MB

Totalt utrymme som krävs efter åtgärden: 453 MB

1 Det här minnet frigörs efter att indexåtgärden har utförts.

Det här exemplet tar inte hänsyn till ytterligare tillfälligt diskutrymme som krävs tempdb för versionsposter som skapats av samtidiga användaruppdaterings- och borttagningsåtgärder.