Aracılığıyla paylaş


Kümelenmemiş bir dizin boyutunu tahmin etme

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

  1. Adım 2 ve 3'de kullanmak için değişkenler hesaplayın.

  2. Dizin bilgilerini depolamak için kullanılan alanı hesaplayın yaprak düzey kümelenmemiş dizin.

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

  4. Hesaplanan değerleri toplam.

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

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. Bulunan satır sayısını tablo:

    Num_Rows = satır sayısıtablo

  2. 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

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

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

    Kümelenmemiş dizin bir yığın üzerinde ise, veri satır Konumlandırıcı RID öbek olur.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ümelenmemiş dizin kümelenmiş dizin üzerinde ise, veri satır Konumlandırıcı kümeleme anahtar.Kümelenmemiş dizin anahtarı ile birleştirilmiş sütun zaten kümelenmemiş dizin anahtar sütunları küme içinde bulunmayan bu sütunlar kümeleme anahtarı olan.

    Num_Key_Cols = Num_Key_Cols + kümelenmiş dizin benzer ise, kümeleme anahtar sütunlarında değil kümelenmemiş dizin anahtar sütunları (+ 1) küme sayısı

    Fixed_Key_Size = Fixed_Key_Size + toplam bayt boyutu sabit uzunlukta anahtar sütunlarında değil kümelenmemiş dizin anahtar sütunları küme kümeleme

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + değişken uzunlukta değil, kümelenmemiş dizin anahtar sütunları (+ 1) küme anahtar sütunları kümelenmiş dizin benzer ise, kümeleme sayısı

    Max_Var_Key_Size = Max_Var_Key_Size + en fazla bayt boyutu, değişken uzunlukta (+ 4) kümelenmemiş dizin anahtar sütunları küme içinde değil anahtar sütunları kümelenmiş dizin benzer ise, kümeleme

  4. null bir bitmap olarak bilinen satır parçası ayrılmış sütun yönetmek için null atanabilirlik.Boyutu Hesapla:

    Dizin anahtar olarak null olabilecek sütunları varsa, adım 1.3 içinde 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ış.

    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.

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

    Değişken uzunlukta ise tüm gerekli bir 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*** 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_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.

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

Depolamak için gereken alanı tahmin etmek için aşağıdaki adımları kullanabilirsiniz yaprak düzey dizin.Bu adımı tamamlamak için adım 1'den korunur değerleri gerekir.

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

    Not

    Kümelenmemiş dizin anahtar sütunları yanında anahtarı olmayan sütunlar ekleyerek genişletebilirsiniz.Bu ek sütunlar yalnızca kümelenmemiş dizin yaprak düzey depolanır.Daha fazla bilgi için bkz: Eklenen sütunlar ile dizin oluşturmak.

    Not

    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.Bu dahil sütunları kümelenmemiş dizin yaprak satırlar için de geçerlidir.Daha fazla bilgi için bkz: 8 kb aşan satır taşma veri.

    Eklenen sütunlar kümelenmemiş dizin yoksa, adım 1 adım 1.3 içinde belirlenen herhangi bir değişiklik 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

Kümelenmemiş dizin sütunlar varsa, bu adımı 1.3 içinde herhangi bir değişiklik de dahil olmak üzere adım 1 ' den değerlere uygun değerleri ekleyin.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ı)](ms187594\(v=sql.105\).md).

***Num_Leaf_Cols*** = ***Num_Key_Cols*** + dahil sütun sayısı

***Fixed_Leaf_Size*** = ***Fixed_Key_Size*** + toplam bayt boyutunu sabit uzunluklu sütunları dahil

***Num_Variable_Leaf_Cols*** = ***Num_Variable_Key_Cols*** + değişken uzunluklu sayısı dahil sütunlar

***Max_Var_Leaf_Size*** = ***Max_Var_Key_Size*** + en yüksek bayt boyutu, değişken uzunlukta sütun dahil
  1. Veri satır Konumlandırıcı hesabı:

    Kümelenmemiş dizin benzer ise, veri satır Konumlandırıcı yükü adım 1.3 kabul ve ek değişiklikler gereklidir.Bir sonraki adıma geçin.

    Kümelenmemiş dizin benzersiz ise, veri satır Konumlandırıcı için tüm satırlardaki muhasebesi gerekir yaprak düzey.

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

    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ümelenmemiş dizin kümelenmiş dizin üzerinde ise, veri satır Konumlandırıcı kümeleme anahtar.Kümelenmemiş dizin anahtarı ile birleştirilmiş sütun zaten kümelenmemiş dizin anahtar sütunları küme içinde bulunmayan bu sütunlar kümeleme anahtarı olan.

    Num_Leaf_Cols = Num_Leaf_Cols + kümelenmiş dizin benzer ise, kümeleme anahtar sütunlarında değil kümelenmemiş dizin anahtar sütunları (+ 1) küme sayısı

    Fixed_Leaf_Size = Fixed_Leaf_Size + sabit uzunluk kümeleme anahtar sütunlarında değil kümelenmemiş dizin anahtar sütunları küme sayısı

    Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + değişken uzunlukta değil, kümelenmemiş dizin anahtar sütunları (+ 1) küme anahtar sütunları kümelenmiş dizin benzer ise, kümeleme sayısı

    Max_Var_Leaf_Size = Max_Var_Leaf_Size + anahtar sütunları küme, kümelenmemiş dizin anahtar sütunları (+ 4) değil, kümelenmiş dizin benzer ise, kümeleme değişken uzunluğu bayt cinsinden boyutu

  2. null bitmap boyutunu Hesapla:

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

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

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

    Dizin anahtar değişken uzunlukta sütun varsa, daha önce adım 2.2'de 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*** 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_Leaf_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_Leaf_Size*** 0.
  1. Dizin satır boyutu Hesapla:

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

    Leaf_Rows_Per_Page 8096 = / (Leaf_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. 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) / (Leaf_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.Formülde 2 sayfa yuvası dizisinin satırın giriş içindir.

  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ı tam sayfaya yakın yuvarlanmış.

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

Leaf_Space_Used* = 8192 x *Num_Leaf_Pages

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

Orta depolamak ve kök dizin düzeyi için gereken alanı tahmin etmek için aşağıdaki adımları izleyin.2 Ve 3'ün bu adımı tamamlamak için adımları korunur değerleri gerekir.

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

    Yaprak olmayan düzeyleri = 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ümelenmemiş dizin.

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

Num_Index_Pages* = ∑düzeyi (num_leaf_pages/index_rows_per_pagedüzeyi) 1 yerlerde <düzeyi = <= *düzeyleri

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ı ortaya çıkarır.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 4.Hesaplanan değerleri toplamı

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

  • Kümelenmemiş 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, kümelenmemiş dizin toplam boyutunu artırır.

  • Sıkıştırma

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