Aracılığıyla paylaş


Kümelenmiş bir dizin boyutunu tahmin etmek

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

  1. Kümelenmiş dizin yaprak düzeyini verileri depolamak için kullanılan alanı hesaplayın.

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

  3. Hesaplanan değerlerin toplam.

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

  1. Tabloda mevcut olacaktır satır sayısını belirtin:

    Num_Rows = tablosu içinde satır sayısı

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

    Alanı hesaplamak her biri bu gruplar sütun içinde veri satırı kaplar. Bir sütun veri türü ve uzunluğu belirtimine bağlıdır. Daha fazla bilgi için, bkz. Data Types (Database Engine).

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

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

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

    Max_Var_Size tüm değişken uzunlukta sütun azami bayt =

  3. Kümelenmiş dizin benzer ise, hesap uniqueifier sütunu:

    Uniqueifier sütun NULL olabilecek, değişken uzunlukta olduğunu. Nonnull ve 4 bayt boyutunda benzer anahtar değerlere sahip satırlar olacaktır. Bu değer, dizin anahtar bir parçası 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ğerler benzer olacaktır varsayalım.

  4. Bölümü boş bitmap olarak bilinen satır, Sütun nullability yönetmek için ayrılmıştır. Boyutu Hesapla:

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

    Yalnızca tamsayı bölümünü önceki kullanılmalıdır; herhangi bir geri kalanı atın.

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

    Tabloda değişken uzunlukta sütun varsa, 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*** her değişken sütun izlemek için vardır. Bu formül, tüm değişken uzunlukta sütun yüzde 100 dolu olduğunu varsayar. Değişken uzunlukta sütun depolama alanı küçük bir yüzdesi kullanılacak öngörüyorsanız, ayarlayabileceğiniz ***Max\_Var\_Size*** toplam tablo boyutunun daha doğru bir tahmin verimi yüzde değeri.


> [!NOT]
> <P>Bu birleştirebilirsiniz varchar, nvarchar, varbinary, ya sql_variant8,060 bayt aşan toplam tanımlanan tablo genişliği neden sütun. Bu sütunların her birinin uzunluğu hala sınırı için 8.000 bayt aralığı içinde olmalıdır bir varchar, varbinary, ya sql_variantsütunu ve 4.000 bayt nvarcharsütun. Ancak, bunların kombine genişlikleri Tablo 8,060 bayt sınırını aşıyor olabilir. Daha fazla bilgi için, bkz. <A href="https://msdn.microsoft.com/tr-tr/library/ms186981(v=sql.110)">Row-Overflow Data Exceeding 8 KB</A>.</P>


Hiçbir değişken uzunlukta sütun varsa, set ***Variable\_Data\_Size*** 0.
  1. Toplam satır boyutunu hesaplamak:

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

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

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

    Rows_Per_Page 8096 = / (Row_Size + 2)

    Satır sayfalara yayılan değil çünkü, sayfa başına satır sayısı yakın bütün satır yuvarlanmasını. 2 Formül satırın giriş sayfası yuvası dizisi için değerdir.

  3. Temel sayfa başına ayrılan boş satır sayısını hesaplamak dolgu etmeni belirtilen:

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

    Hesaplamada kullanılan dolgu etmeni, yüzde yerine bir tamsayı değeridir. Satır sayfalara yayılan değil çünkü, sayfa başına satır sayısı yakın bütün satır yuvarlanmasını. Dolgu etmeni büyüdükçe, her sayfada daha fazla veri saklanır ve orada-ecek var olmak daha az sayfa. 2 Formül satırın giriş sayfası 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ı için en yakın tam sayfa yuvarlanmış.

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

Leaf_Space_UsedIndex_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. Kendi depolama için gereken alanı hesaplamak ve dizin anahtar Sabit uzunluk ve değişken uzunlukta sütun sayısını belirtin:

    Dizin anahtar sütunları Sabit uzunluk ve değişken uzunlukta sütun içerebilir. İç düzey dizin satır boyutunu tahmin etmek için alanı hesaplamak her sütun bu grupların içinde dizin satır kaplar. Bir sütun veri türü ve uzunluğu belirtimine bağlıdır. Daha fazla bilgi için, bkz. Data Types (Database Engine).

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

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

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

    Max_Var_Key_Size tüm değişken uzunlukta anahtar sütunlarının azami bayt =

  2. Dizin benzer ise gerekli herhangi bir uniqueifier hesabı:

    Uniqueifier sütun NULL olabilecek, değişken uzunlukta olduğunu. Nonnull ve 4 bayt boyutunda benzer dizin anahtar değerlere sahip satırlar olacaktır. Bu değer, dizin anahtar bir parçası 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ğerler benzer olacaktır varsayalım.

  3. Boş bitmap boyutunu Hesapla:

    Dizin anahtar 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 tamsayı bölümünü önceki kullanılmalıdır. Herhangi bir geri kalanı atın.

    NULL olabilecek hiçbir anahtar sütun varsa, set Index_Null_Bitmap 0.

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

    Dizinde 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*** her değişken uzunlukta sütun izlemek için vardır. Bu formül, tüm değişken uzunlukta sütun yüzde 100 dolu olduğunu varsayar. Değişken uzunlukta sütun depolama alanı küçük bir yüzdesi kullanılacak öngörüyorsanız, ayarlayabileceğiniz ***Max\_Var\_Key\_Size*** toplam tablo boyutunun daha doğru bir tahmin verimi yüzde değeri.

Hiçbir değişken uzunlukta sütun varsa, set ***Variable\_Key\_Size*** 0.
  1. Dizin satır boyutunu hesaplamak:

    Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap (için bir dizin satır satır üstbilgi yükü) 1 + 6 (çocuk sayfa numarası işaretçisi)

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

    Index_Rows_Per_Page 8096 = / (Index_Row_Size + 2)

    Dizin satır sayfalara yayılan değil çünkü dizin satır başına sayfa sayısı yakın bütün satır yuvarlanmasını. Sayfanın yuvası dizideki satır'ın giriş için 2 formül olduğunu.

  3. Dizin sayısını hesaplayın:

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

    Yuvarlak bu değere en yakın tam sayıya yukarı. Bu değer, kümelenmiş dizin yaprak düzeyini içermez.

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

Num_Index_Pages =∑Level (Num_Leaf_Pages / (Index_Rows_Per_PageLevel))

1 yerlerde \<Level = \<= ***sigara-leaf\_Levels***

Yuvarlak olan en yakın tam sayıya kadar her summand. 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 ise, 1000 dizin satırları ilk dizin düzeyi yukarıda yaprak düzeyi saklar ve 25 dizin satır her sayfa için uygun olabilir. Buna göre 40 sayfalarını 1000 Index satırlar depolamak için gereklidir. 40 Satır depolamak dizinin sonraki seviyeye sahiptir. Yani 2 sayfa gerektirir. 2 Satır depolamak dizinin son düzeyi vardır. Buna göre 1 sayfa gerektirir. Bu 43 yaprak olmayan dizin sayfaları verir. Bu rakamlar önceki formüllerde kullanıldığında sonuç aşağıdaki gibidir:

***Sigara-leaf\_Levels*** = 1 + günlük25 (1000 / 25) = 3

***Num\_Index\_Pages*** 1000 /(253) + = 1000 / (252) + 1000 / (251) = 1 + 2 + 40 = hangi örneğinde açıklanan sayfa sayısı 43,.
  1. (Sayfa başına 8192 toplam bayt sayısı) dizin boyutunu hesaplamak:

Index_Space_used* = 8192 x *Num_Index_Pages

Adım 3.Hesaplanan değerlerin toplam

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

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

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

  • Bölümleme

    Bölümleme gelen yükü en az, ama karmaşık hesaplamak için alandır. İçerecek şekilde önemli değildir.

  • Ayırma sayfaları

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

  • 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 algoritma varchar(max), varbinary(max), nvarchar(max), text, ntext, xml, ve imagedeğerleri karmaşık. It's just lob değerleri beklenen ortalama boyutu eklemek, çarpmak için yeterli Num_Rowsve toplam dizin boyutu kümelenmiş ekleyin.

  • Sıkıştırma

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

  • Seyrek sütunlar

    Seyrek sütun alanı gereksinimleri hakkında daha fazla bilgi için bkz: Seyrek sütunlar kullanma.

Ayrıca bkz.

Kavramlar

Tablo boyutunu tahmin etmek

Kümelendirilmemiş dizin boyutunu tahmin etmek

Bir yığın boyutunu tahmin etmek

Diğer Kaynaklar

Table and Index Organization

Clustered Index Structures

Clustered Index Design Guidelines

Creating Indexes (Database Engine)

Nonclustered Index Design Guidelines

Veritabanı boyutunu tahmin etmek