Share via


Kümelendirilmemiş dizin boyutunu tahmin etmek

Kümelendirilmemiş dizin depolamak için gereken alanı tahmin etmek için aşağıdaki adımları izleyin:

  1. 2 Ve 3 numaralı adımları kullanmak için değişkenler hesaplayın.

  2. Kümelendirilmemiş dizin yaprak düzeyini dizin bilgilerini depolamak için kullanılan alanı hesaplayın.

  3. Kümelendirilmemiş dizin yaprak olmayan düzeyleri dizin bilgilerini depolamak için kullanılan alanı hesaplayın.

  4. Hesaplanan değerlerin toplam.

Adım 1.2 Ve 3 numaralı adımları kullanmak için değişkenler hesaplayın

Dizinin üst düzeyleri depolamak için gereken alanı tahmin etmek için kullanılan değişkenler hesaplamak için aşağıdaki adımları kullanabilirsiniz.

  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 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 =

  3. Dizin benzer ise gerekli olan veri satır Konumlandırıcı hesabı:

    Kümelendirilmemiş dizin benzer ise, veri satır Konumlandırıcı her satır için benzersiz bir anahtar değeri üretmek için kümelendirilmemiş dizin anahtarı ile birleştirilir.

    Kümelendirilmemiş dizin üzerinde bir yığın ise, veri satır Konumlandırıcı öbek RID olur. Bu bir 8 bayt boyutudur.

    Num_Key_Cols = Num_Key_Cols + 1

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1

    Max_Var_Key_Size = Max_Var_Key_Size + 8

    Kümelendirilmemiş dizin kümelenmiş bir dizin üzerinde ise, veri satır Konumlandırıcı kümeleme anahtarıdır. Kümelendirilmemiş dizin anahtarı ile kombine edilebilir sütun zaten kümelendirilmemiş dizin anahtar sütunları kümesi içinde mevcut olmayan bu kümeleme anahtar sütunlar vardır.

    Num_Key_Cols = Num_Key_Cols + Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan küme sayısı

    Fixed_Key_Size = Fixed_Key_Size + toplam bayt boyutu sabit uzunlukta anahtar sütunları kümelendirilmemiş dizin anahtar sütunları kümesi içinde olmayan kümeleme

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + değişken uzunlukta anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan Kümelenmiş dizin benzer ise küme sayısı

    Max_Var_Key_Size = Max_Var_Key_Size + azami bayt sayısını değişken uzunluklu Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 4) kümesinde olmayan kümeleme

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

    Dizin anahtar NULL olabilecek sütunları varsa, adım 3'te açıklandığı gibi gerekli tüm kümeleme anahtar sütunları da dahil olmak üzere dizin satır parçası boş bitmap için ayrılmıştır.

    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.

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

    Değişken uzunlukta varsa tüm gerekli Kümelenmiş dizin anahtar sütunları da dahil olmak üzere dizin anahtar sütunları 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 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.

Adım 2.Yaprak düzeyi deposu dizin bilgileri için kullanılan alanı hesaplayın

Yaprak düzeyi dizin depolamak için gereken alanı tahmin etmek için aşağıdaki adımları kullanabilirsiniz. Bu adımı tamamlamak için adım 1 ' korunmuş değerleri gerekir.

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

    [!NOT]

    Kümelendirilmemiş dizin dizin anahtar sütunları ek olarak nonkey sütunlar ekleyerek genişletebilirsiniz. Bu ek sütunlar yalnızca kümelendirilmemiş dizin yaprak düzeyinde depolanır. Daha fazla bilgi için, bkz. NIB - Create Indexes with Included Columns.

    [!NOT]

    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. Bu sütunlar dahil kümelendirilmemiş dizin yaprak satırlar için de geçerlidir. Daha fazla bilgi için, bkz. Row-Overflow Data Exceeding 8 KB.

    Kümelendirilmemiş dizin dahil herhangi bir sütun varsa, adım 1, adım 3'te belirlenen tüm değişiklikler de dahil olmak üzere değerleri kullanın:

Num_Leaf_Cols* = *Num_Key_Cols

Fixed_Leaf_Size* = *Fixed_Key_Size

Num_Variable_Leaf_Cols* = *Num_Variable_Key_Cols

Max_Var_Leaf_Size* = *Max_Var_Key_Size

Dahil sütunları kümelendirilmemiş dizin varsa, uygun değerleri adım 1, adım 3'te değişiklikler dahil olmak üzere değerleri ekleyin. Bir sütun veri türü ve uzunluğu belirtimine bağlıdır. Daha fazla bilgi için, bkz. [Data Types (Database Engine)](https://msdn.microsoft.com/tr-tr/library/ms187594\(v=sql.110\)).

***Num\_Leaf\_Cols*** = ***Num\_Key\_Cols*** + dahil sütun sayısı

***Fixed\_Leaf\_Size*** = ***Fixed\_Key\_Size*** + toplam bayt sayısını sabit uzunluklu sütunları dahil

***Num\_Variable\_Leaf\_Cols*** = ***Num\_Variable\_Key\_Cols*** + değişken sayısı dahil sütunlar

***Max\_Var\_Leaf\_Size*** = ***Max\_Var\_Key\_Size*** + azami bayt sayısını değişken uzunlukta sütun dahil
  1. Veri satır Konumlandırıcı hesabı:

    Kümelendirilmemiş dizin benzer ise, veri satır Konumlandırıcı yükünü zaten adım 3'te kabul ve hiçbir ek değişiklikler gereklidir. Sonraki adıma geçin.

    Kümelendirilmemiş dizin benzersiz ise, veri satır Konumlandırıcı yaprak düzeyinde tüm satırlarda oluşturuyor gerekir.

    Kümelendirilmemiş dizin üzerinde bir yığın ise, veri satır Konumlandırıcı öbek RID (boyutu 8 bayt) ' dir.

    Num_Leaf_Cols = Num_Leaf_Cols + 1

    Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1

    Max_Var_Leaf_Size = Max_Var_Leaf_Size + 8

    Kümelendirilmemiş dizin kümelenmiş bir dizin üzerinde ise, veri satır Konumlandırıcı kümeleme anahtarıdır. Kümelendirilmemiş dizin anahtarı ile kombine edilebilir sütun zaten kümelendirilmemiş dizin anahtar sütunları kümesi içinde mevcut olmayan bu kümeleme anahtar sütunlar vardır.

    Num_Leaf_Cols = Num_Leaf_Cols + Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan küme sayısı

    Fixed_Leaf_Size = Fixed_Leaf_Size + Sabit uzunluk anahtar sütunları kümelendirilmemiş dizin anahtar sütunları kümesi içinde olmayan küme sayısı

    Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + değişken uzunlukta anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan Kümelenmiş dizin benzer ise küme sayısı

    Max_Var_Leaf_Size = Max_Var_Leaf_Size + boyutunu bayt cinsinden değişken uzunluklu Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 4) kümesinde olmayan kümeleme

  2. Boş bitmap boyutunu Hesapla:

    Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)

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

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

    Dizin anahtar değişken uzunlukta sütun varsa, adım 2'de, daha önce açıklandığı gibi gerekli tüm kümeleme anahtar sütunları da dahil olmak üzere dizin satır içinde sütun depolamak için kullanılan alan miktarını belirleyin:

Variable_Leaf_Size* = 2 + (Num_Variable_Leaf_Cols x 2) + *Max_Var_Leaf_Size

Eklenen bayt ***Max\_Var\_Key\_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\_Leaf\_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\_Leaf\_Size*** 0.
  1. Dizin satır boyutunu hesaplamak:

    Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_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:

    Leaf_Rows_Per_Page 8096 = / (Leaf_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. 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) / (Leaf_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. Sayfanın yuvası dizideki satır'ın giriş için 2 formül olduğunu.

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

    Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)

    Tahmini sayfa sayısı için en yakın tam sayfa yuvarlanmış.

  5. (Sayfa başına 8192 toplam bayt sayısı) dizin boyutunu hesaplamak:

Leaf_Space_UsedIndex_Space_used* = 8192 x *Num_Leaf_Pages

Adım 3.Yaprak olmayan düzeyde deposu dizin bilgisi için kullanılan alanı hesaplayın

Orta depolamak ve kök dizinin düzeyleri için gereken alanı tahmin etmek için aşağıdaki adımları izleyin. Adım 2 ve 3 bu adımı tamamlamak için korunmuş değerleri gerekir.

  1. Yaprak olmayan düzey dizin sayısını hesaplayın:

    Yaprak olmayan düzeyleri = 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ümelendirilmemiş dizin yaprak düzeyini içermez.

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

Num_Index_Pages* ∑ =düzeyi (Num_Leaf_Pages/Index_Rows_Per_PageLevel) 1 yerlerde <Level = <= *düzeyleri

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. Bu, o 2 sayfa istemek anlamına gelir. 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 4.Hesaplanan değerlerin toplam

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

Kümelendirilmemiş 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. Just lob değerleri beklenen ortalama boyutu eklemek için çarpmak yeterlidir Num_Rowsve toplam kümelendirilmemiş dizin boyutu eklemek.

  • 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ümelenmiş bir dizin boyutunu tahmin etmek

Bir yığın boyutunu tahmin etmek

Diğer Kaynaklar

Table and Index Organization

Nonclustered Index Structures

Clustered Index Design Guidelines

Creating Indexes (Database Engine)

Nonclustered Index Design Guidelines

Veritabanı boyutunu tahmin etmek