Aracılığıyla paylaş


Kümelenmiş bir dizin boyutunu tahmin etme

kümelenmiş dizin verileri depolamak için gereken alanı tahmin etmek için aşağıdaki adımları kullanabilirsiniz:

  1. Verileri depolamak için kullanılan alanı hesaplayın yaprak düzey kümelenmiş dizin.

  2. Kümelenmiş dizin için dizin bilgilerini depolamak için kullanılan alanı hesaplayın.

  3. Hesaplanan değerleri toplam.

Adım 1.Yaprak düzeyinde veri depolama için kullanılan alanı hesaplayın

  1. Bulunan satır sayısını tablo:

    Num_Rows = satır sayısıtablo

  2. Kendi depolama için gereken alanı hesaplamak ve sabit uzunluk ve değişken uzunlukta sütun sayısını belirtin:

    Alan hesaplama sütun bu grupların her biri veri satırda yer kaplar.Boyutu, sütun veri türü ve uzunluğu belirtimine bağlıdır.Daha fazla bilgi için bkz: Veri türleri (veritabanı altyapısı).

    Num_Cols = toplam (sabit uzunluk ve değişken uzunlukta) sütun sayısı

    Fixed_Data_Size = tüm sabit uzunluklu sütunları toplam bayt boyutu

    Num_Variable_Cols = değişken uzunlukta sütun sayısı

    Max_Var_Size = tüm değişken uzunlukta sütun en fazla bayt boyutu

  3. Kümelenmiş dizin benzer ise, dikkate benzersizleştirici sütun:

    benzersizleştirici sütun null olabilecek, değişken uzunlukta olur.Bu nonnull ve 4 bayt boyutunda benzersiz olmayan anahtar değerlere sahip satırlar olacaktır.Bu değer dizin anahtarını bir parçasıdır ve her satır benzersiz bir anahtar değeri olduğundan emin olmak için gereklidir.

    Num_Cols = Num_Cols + 1

    Num_Variable_Cols = Num_Variable_Cols + 1

    Max_Var_Size = Max_Var_Size + 4

    Bu değişiklikler tüm değerlerin benzersiz olmayan varsayalım.

  4. Bölümü null bir bitmap olarak bilinen bu satırın sütun yönetmek için rezerve null atanabilirlik.Boyutu Hesapla:

    Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    Yalnızca bir tamsayı bölümü önceki ifade kullanılmalıdır; bir hatırlatıcı atın.

  5. Değişken uzunlukta veri boyutu Hesapla:

    Değişken uzunlukta sütunları, tablo, satır içinde sütun depolamak için kullanılan alan miktarını belirleyin:

Variable_Data_Size* = 2 + (Num_Variable_Cols x 2) + *Max_Var_Size

Eklenen bayt ***Max_Var_Size*** olan her değişken sütun izlemek için.Bu formül, tüm değişken uzunluklu sütunları yüzde 100 olduğunu varsayar.Değişken uzunlukta sütun depolama alanı küçük bir yüzdesi kullanılacak öngörüyorsanız, ayarlayabilirsiniz ***Max_Var_Size*** göre toplam tablo boyutunun daha doğru bir tahmin verim için bu yüzde değeri.

<div class="alert">


> [!NOTE]
> <P>Bu birleştirebilirsiniz varchar, nvarchar, varbinary, veya sql_variant sütunları neden olan toplam tanımlanan tablo genişliği aşan 8,060 bayt.Bu sütunların her birinin uzunluğu hala çok 8.000 bayt için sınırı içinde almaları gereken bir varchar, varbinary, veya sql_variant , sütun ve 4.000 bayt için nvarchar sütunlar.Ancak, birleşik genişliklerini de 8,060 bayt sınırını aşıyor olabilir bir tablo.Daha fazla bilgi için bkz: <A href="ms186981(v=sql.105).md">8 kb aşan satır taşma veri</A>.</P>


</div>

Değişken uzunlukta sütun varsa, küme ***Variable_Data_Size*** 0.
  1. Toplam satır boyutu Hesapla:

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

    4 Veri satırı satır üstbilgi yükü değerdir.

  2. (Sayfa başına 8096 boş bayt) sayfa başına satır sayısını hesaplayın:

    Rows_Per_Page 8096 = / (Row_Size + 2)

    Sayfa başına satır sayısı satırları sayfalara yayılan çünkü yuvarlama yöntemi kapalı en yakın tam satır.2 Formüldeki satırın giriş sayfa yuvası dizisi için değerdir.

  3. Temel sayfa başına ayrılmış boş satır sayısını hesaplamak doldurma faktörü belirtilen:

    Free_Rows_Per_Page 8096 x ((100- Fill_Factor) = / 100) / (Row_Size + 2)

    Hesaplamada kullanılan doldurma faktörü yüzde yerine bir tamsayı değeridir.Sayfa başına satır sayısı satırları sayfalara yayılan çünkü yuvarlama yöntemi kapalı en yakın tam satır.doldurma faktörü büyüdükçe, her sayfada daha fazla veri saklanır ve daha az sayfa olacaktır.2 Formüldeki satırın giriş sayfa yuvası dizisi için değerdir.

  4. Tüm satırlar depolamak için gereken sayfaların sayısını hesaplayın:

    Num_Leaf_Pages = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)

    Tahmini sayfa sayısı tam sayfaya yakın yuvarlanmış.

  5. Yaprak düzey (sayfa başına 8192 toplam bayt) verileri depolamak için gereken alan miktarını hesaplamak:

Leaf_space_used* = 8192 x *Num_Leaf_Pages

Adım 2.Dizin bilgileri için kullanılan alanı hesaplayın

Dizinin üst düzeyleri depolamak için gereken alanı tahmin etmek için aşağıdaki adımları kullanabilirsiniz:

  1. Sabit uzunluk ve değişken uzunlukta sütun sayısını belirtin dizin içinde anahtar ve kendi depolama için gereken alanı hesaplamak:

    Dizin anahtar sütunları sabit uzunluk ve değişken uzunlukta sütun içerebilir.Hesaplama alanı iç düzey dizin satır boyutunu tahmin etmek için dizin satır içinde sütun bu grupların her biri kaplar.Boyutu, sütun veri türü ve uzunluğu belirtimine bağlıdır.Daha fazla bilgi için bkz: Veri türleri (veritabanı altyapısı).

    Num_Key_Cols = anahtar sütunları (sabit uzunluk ve değişken uzunlukta) toplam sayısı

    Fixed_Key_Size = tüm sabit uzunlukta anahtar sütunları toplam bayt boyutu

    Num_Variable_Key_Cols = anahtar değişken uzunlukta sütun sayısı

    Max_Var_Key_Size = tüm değişken uzunlukta anahtar sütunlarının en yüksek bayt boyutu

  2. Dizin benzer ise gerekli herhangi bir benzersizleştirici hesabı:

    benzersizleştirici sütun null olabilecek, değişken uzunlukta olur.Bu nonnull ve 4 bayt boyutunda benzersiz olmayan bir dizin anahtar değerlere sahip satırlar olacaktır.Bu değer dizin anahtarını bir parçasıdır ve her satır benzersiz bir anahtar değeri olduğundan emin olmak için gereklidir.

    Num_Key_Cols = Num_Key_Cols + 1

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1

    Max_Var_Key_Size = Max_Var_Key_Size + 4

    Bu değişiklikler tüm değerlerin benzersiz olmayan varsayalım.

  3. null bitmap boyutunu Hesapla:

    Dizin anahtar olarak null olabilecek sütunları varsa, dizin satır parçası boş bitmap için ayrılmıştır.Boyutu Hesapla:

    Index_Null_Bitmap = 2 + ((dizin satır + 7 sütun sayısı) / 8)

    Yalnızca bir tamsayı bölümü önceki ifade kullanılmalıdır.Bir hatırlatıcı atın.

    küme Null olabilecek hiçbir anahtar sütunları, Index_Null_Bitmap 0.

  4. Değişken uzunlukta veri boyutu Hesapla:

    Dizin içinde değişken uzunlukta sütun varsa, dizin satır içinde sütun depolamak için kullanılan alan miktarını belirleyin:

Variable_Key_Size* = 2 + (Num_Variable_Key_Cols x 2) + *Max_Var_Key_Size

Eklenen bayt ***Max_Var_Key_Size*** olan her değişken uzunlukta sütun izlemek için.Bu formül, tüm değişken uzunluklu sütunları yüzde 100 olduğunu varsayar.Değişken uzunlukta sütun depolama alanı küçük bir yüzdesi kullanılacak öngörüyorsanız, ayarlayabilirsiniz ***Max_Var_Key_Size*** göre toplam tablo boyutunun daha doğru bir tahmin verim için bu yüzde değeri.

Değişken uzunlukta sütun varsa, küme ***Variable_Key_Size*** 0.
  1. Dizin satır boyutu Hesapla:

    Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (dizin satır satır üstbilgi yükü) + 6 (alt sayfa kimliği işaretçisi)

  2. (Sayfa başına 8096 boş bayt) sayfa başına dizin satır sayısını hesaplayın:

    Index_Rows_Per_Page 8096 = / (Index_Row_Size + 2)

    Sayfa başına satır dizini dizin satır sayfalara yayılan çünkü yuvarlama yöntemi kapalı en yakın tam satır.Formülde 2 sayfa yuvası dizisinin satırın giriş içindir.

  3. Dizin düzeylerin sayısını hesaplayın:

    Non-leaf_Levels = 1 + günlük Index_Rows_Per_Page (Num_Leaf_Pages / Index_Rows_Per_Page)

    Bu değer en yakın tam sayıya Yukarı yuvarlama.Bu değeri içeren yaprak düzey kümelenmiş dizin.

  4. Yaprak olmayan sayfalara dizin sayısını hesaplayın:

Num_Index_Pages =∑düzeyi (Num_Leaf_Pages / (Index_Rows_Per_Pagedüzeyi))

1 burada \<düzeyi = \<= ***leaf_Levels***

Her summand en yakın tam sayıya Yukarı yuvarlama.Basit bir örnek dizin düşünün nerede ***Num_Leaf_Pages*** = 1000 ve ***Index_Rows_Per_Page*** = 25.Yaprak sayfa başına bir dizin satır olduğu 1000 dizin satır yukarıda yaprak düzey ilk dizin düzey saklar ve 25 dizin satırları gruplayabilirsiniz uyma sayfa başına.Yani 40 sayfalarını 1000 dizin satırları depolamak için gereklidir.Sonraki düzey 40 satır depolamak dizini vardır.Yani, 2 sayfa gerektirir.2 Satır depolamak dizinin son düzey vardır.Yani, 1 sayfa gerektirir.Bu, 43 yaprak olmayan dizin sayfaları sağlar.Bu sayılar önceki formüllerde kullanıldığında sonuç aşağıdaki gibidir:

***Non-leaf_Levels*** = 1 + günlük25 (1000 / 25) = 3

***Num_Index_Pages*** /(253) 1000 + = 1000 / (252) + 1000 / (251) = 1 + 2 + 40 = açıklanan örnekte sayfa sayısı olan 43 '.
  1. (Sayfa başına 8192 toplam bayt) dizin boyutunu hesaplamak:

Index_Space_Used* = 8192 x *Num_Index_Pages

Adım 3.Hesaplanan değerleri toplamı

Önceki iki adımı elde edilen değerlerin toplamı:

Kümelenmiş dizin boyutu (bayt) = Leaf_Space_Used + Index_Space_used

Bu hesaplama, aşağıdakileri dikkate almaz:

  • Bölümleme

    Bölümleme gelen genel giderleri en düşük düzeyde, ancak hesaplamak için karmaşık alandır.Dahil etmek önemli değildir.

  • Ayırma sayfaları

    Bir yığın için ayrılan sayfaları izlemek için kullanılan en az bir IAM sayfa vardır ancak alan yükü azdır ve deterministically kaç IAM sayfa kullanılan tam olarak hesaplamak için hiçbir algoritması vardır.

  • Büyük nesne (lob) değerleri

    lob veri türlerini depolamak için alan miktarını tam olarak kullanılacağını belirlemek için kullanılan algoritma varchar(max), varbinary(max), nvarchar(max), text, ntext, xml, ve image değerler ise karmaşık.Yalnızca ortalama boyutunu beklenen lob değerleri eklemek için çarpmak yeterlidir Num_Rowsve toplam eklemek kümelenmiş dizin boyutu.

  • Sıkıştırma

    Sıkıştırılmış bir dizin boyutu pre-calculate olamaz.