Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Bir kümelenmemiş dizini depolamak için gereken alan miktarını tahmin etmek için şu adımları izleyin:
2. ve 3. adımlarda kullanılacak değişkenleri hesaplayın.
Dizin bilgilerini kümelenmemiş dizinin yaprak düzeyinde depolamak için kullanılan alanı hesaplayın.
Dizin bilgilerini kümelenmemiş dizinin yaprak olmayan düzeylerinde depolamak için kullanılan alanı hesaplayın.
Hesaplanan değerlerin toplamını alır.
Adım 1. 2. ve 3. adımlarda kullanılacak değişkenleri hesaplama
Dizinin üst düzeylerini depolamak için gereken alan miktarını tahmin etmek için kullanılan değişkenleri hesaplamak için aşağıdaki adımları kullanabilirsiniz.
Tabloda yer alacak satır sayısını belirtin:
- Num_Rows = tablodaki satır sayısı
Dizin anahtarında sabit uzunluklu ve değişken uzunluklu sütun sayısını belirtin ve depolamaları için gereken alanı hesaplayın:
Bir dizinin anahtar sütunları sabit uzunlukta ve değişken uzunlukta sütunlar içerebilir. İç düzey dizin satırı boyutunu tahmin etmek için, bu sütun gruplarının her birinin dizin satırında kaplayacakları alanı hesaplayın. Sütunun boyutu, veri türüne ve uzunluk tanımına bağlıdır.
- Num_Key_Cols = toplam anahtar sütun sayısı (sabit uzunluk ve değişken uzunluk)
- Fixed_Key_Size = tüm sabit uzunlukta anahtar sütunlarının toplam bayt boyutu
- Num_Variable_Key_Cols = değişken uzunlukta anahtar sütunlarının sayısı
- Max_Var_Key_Size = tüm değişken uzunluklu anahtar sütunlarının bayt boyutu üst sınırı
Dizin benzersiz değilse gerekli olan veri satırı bulucuyu dikkate alın:
Küme dışı dizin benzersiz olmayan ise, her bir satır için benzersiz bir anahtar değeri üretmek amacıyla veri satırı bulucu ile küme dışı dizin anahtarı birleştirilir.
Kümelenmemiş dizin bir yığın üzerindeyse, veri satırı bulucu yığın RID'dir. Bu, 8 bayt boyutundadır.
- Num_Key_Cols = Num_Key_ColsNum_Key_Cols + 1
- = Num_Variable_Key_ColsNum_Variable_Key_Cols + 1
- = Max_Var_Key_SizeMax_Var_Key_Size + 8
Kümelenmemiş dizin kümelenmiş bir dizinin üzerindeyse, veri satırı bulucu kümeleme anahtarıdır. Kümelenmemiş dizin anahtarıyla birleştirilmesi gereken sütunlar, kümelenmemiş dizin anahtarı sütunları kümesinde henüz mevcut olmayan kümeleme anahtarındaki sütunlardır.
= Num_Key_ColsNum_Key_Cols + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan kümeleme anahtarı sütunlarının sayısı (kümelenmiş dizin tekil değilse+ 1)
= Fixed_Key_SizeFixed_Key_Size + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan sabit uzunlukta kümeleme anahtarı sütunlarının toplam bayt boyutu
= Num_Variable_Key_ColsNum_Variable_Key_Cols + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan değişken uzunlukta kümeleme anahtarı sütunlarının sayısı (kümelenmiş dizin tekil değilse+ 1)
= Max_Var_Key_SizeMax_Var_Key_Size + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan değişken uzunlukta kümeleme anahtarı sütunlarının bayt boyutu üst sınırı (kümelenmiş dizin tekil değilse+ 4)
Satırın null bitmap olarak bilinen bir bölümü, sütun boş değer atanabilirliğini yönetmek için ayrılmış olabilir. Boyutunu hesaplama:
Dizin anahtarında, 1.3. Adımda açıklandığı gibi gerekli kümeleme anahtarı sütunları dahil null atanabilir sütunlar varsa, dizin satırının bir kısmı null bit haritası için ayrılmıştır.
- Index_Null_Bitmap = 2 + ((dizin satırındaki sütun sayısı + 7) / 8)
Yalnızca önceki ifadenin tamsayı bölümü kullanılmalıdır. Kalanları atın.
Eğer boş değer atanabilir anahtar sütunu yoksa, Index_Null_Bitmap'i 0 olarak ayarlayın.
Veri boyutunu, değişken uzunluğu kullanarak hesaplayın.
Dizin anahtarında gerekli kümelenmiş dizin anahtarı sütunları da dahil olmak üzere değişken uzunlukta sütunlar varsa, dizin satırındaki sütunları depolamak için ne kadar alan kullanıldığını belirleyin:
- Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Max_Var_Key_Size eklenen baytlar her değişken sütununu izlemeye yöneliktir. Bu formül, tüm değişken uzunluklu sütunların yüzde 100 dolu olduğunu varsayar. Değişken uzunluktaki sütun depolama alanının daha küçük bir yüzdesinin kullanılacağını düşünüyorsanız, genel tablo boyutunun daha doğru bir tahminini sağlamak için Max_Var_Key_Size değerini bu yüzdeye göre ayarlayabilirsiniz.
Değişken uzunlukta sütun yoksa Variable_Key_Size 0 olarak ayarlayın.
Dizin satırı boyutunu hesaplama:
- Index_Row_Size (Dizin_Satır_Boyutu) = Fixed_Key_Size (Sabit_Anahtar_Boyutu) + Variable_Key_Size (Değişken_Anahtar_Boyutu) + Index_Null_Bitmap (Dizin_Null_Bitmap) + 1 (dizin satırının satır üst bilgisi ek yükü için) + 6 (alt sayfa kimliği işaretçisi için)
Sayfa başına dizin satırı sayısını hesaplama (sayfa başına 8.096 boş bayt):
- Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Dizin satırları sayfalara yayılmadığından, sayfa başına dizin satırlarının sayısı en yakın tam satıra yuvarlanmalıdır. Formüldeki 2, sayfanın yuva dizisindeki satırın girişi içindir.
Adım 2. Dizin bilgilerini yaprak düzeyinde depolamak için kullanılan alanı hesaplama
Dizinin yaprak düzeyini depolamak için gereken alan miktarını tahmin etmek için aşağıdaki adımları kullanabilirsiniz. Bu adımı tamamlamak için 1. Adımdaki değerlerin korunması gerekir.
Yaprak düzeyinde sabit uzunluklu ve değişken uzunlukta sütunların sayısını belirtin ve depolamaları için gereken alanı hesaplayın:
Dizin anahtarı sütunlarına ek olarak anahtar olmayan sütunları da ekleyerek, kümelenmemiş dizini genişletebilirsiniz. Bu ek sütunlar yalnızca kümelenmemiş dizinin yaprak düzeyinde depolanır. Daha fazla bilgi için bkz. Eklenen sütunlarla dizin oluşturma.
Note
varchar, nvarchar, varbinaryveya toplam tanımlı tablo genişliğinin 8.060 bayt'ı aşmasına neden olan sql_variant sütunlarını birleştirebilirsiniz. Bu sütunlardan her birinin uzunluğu yine de bir varchar, varbinary veya sql_variant sütunu için 8.000 bayt ve nvarchar sütunları için 4.000 bayt sınırı içinde olmalıdır. Ancak, birleştirilmiş genişlikleri bir tablodaki 8.060 bayt sınırını aşabilir. Bu, sütun içeren kümelenmemiş dizin yaprak satırları için de geçerlidir.
Kümelenmemiş dizinde dahil edilmiş sütun yoksa, Adım 1.3'te belirlenen değişiklikler de dahil olmak üzere 1. Adımdaki değerleri kullanın:
- = Num_Leaf_ColsNum_Key_Cols
- Fixed_Leaf_Size = Fixed_Key_Size
- = Num_Variable_Leaf_ColsNum_Variable_Key_Cols
- Max_Var_Leaf_Size = Max_Var_Key_Size
Kümelenmemiş dizinde sütunlar varsa, Adım 1.3'teki değişiklikler de dahil olmak üzere 1. Adımdaki değerlere uygun değerleri ekleyin. Sütunun boyutu, veri türüne ve uzunluk tanımına bağlıdır. Daha fazla bilgi için bkz. Veri türleri.
- Num_Leaf_Cols = Num_Key_Cols + eklenen sütun sayısı
- Fixed_Leaf_Size = Fixed_Key_Size + sabit uzunluktaki dahil edilen sütunların toplam bayt boyutu
- Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + değişken uzunluklu eklenen sütunların sayısı
- Max_Var_Leaf_Size = Max_Var_Key_Size + değişken uzunlukta dahil edilen sütunların maksimum bayt boyutu
Veri satırı bulucu hesabı:
Kümelenmemiş dizin tek bir dizin değilse, veri satırı bulucunun yükü 1.3. Adımda zaten dikkate alınmıştır ve başka değişiklik yapılması gerekmez. Sonraki adıma gidin.
Kümelenmemiş dizin benzersizse, veri satırı bulma işaretçisi, yaprak düzeyindeki tüm satırlarda dikkate alınmalıdır.
Kümelenmemiş dizin bir yığın üzerindeyse, veri satırı bulucu yığın RID'dir (8 bayt boyutunda).
- Num_Leaf_Cols = Num_Leaf_ColsNum_Leaf_Cols + 1
- Num_Variable_Leaf_Cols = Num_Variable_Leaf_ColsNum_Variable_Leaf_Cols + 1
- Max_Var_Leaf_Size = Max_Var_Leaf_SizeMax_Var_Leaf_Size + 8
Kümelenmemiş dizin kümelenmiş bir dizinin üzerindeyse, veri satırı bulucu kümeleme anahtarıdır. Kümelenmemiş dizin anahtarıyla birleştirilmesi gereken sütunlar, kümelenmemiş dizin anahtarı sütunları kümesinde henüz mevcut olmayan kümeleme anahtarındaki sütunlardır.
= Num_Leaf_ColsNum_Leaf_Cols + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan kümeleme anahtarı sütunlarının sayısı (kümelenmiş dizin tekil değilse+ 1)
= Fixed_Leaf_SizeFixed_Leaf_Size + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan sabit uzunlukta kümeleme anahtarı sütunlarının sayısı
= Num_Variable_Leaf_ColsNum_Variable_Leaf_Cols + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan değişken uzunlukta kümeleme anahtarı sütunlarının sayısı (kümelenmiş dizin tekil değilse+ 1)
= Max_Var_Leaf_Size + kümelenmemiş dizin anahtarı sütunları kümesinde bulunmayan değişken uzunlukta kümeleme anahtarı sütunlarının bayt cinsinden boyutu (+ 4 eğer kümelenmiş dizin tekil değilse)
Null bit haritası boyutunu hesapla.
- Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Yalnızca önceki ifadenin tamsayı bölümü kullanılmalıdır. Kalanları atın.
Veri boyutunu, değişken uzunluğu kullanarak hesaplayın.
Daha önce Adım 2.2'de açıklandığı gibi gerekli kümeleme anahtarı sütunları dahil olmak üzere değişken uzunlukta sütunlar (anahtar sütunları veya dahil) varsa, sütunları dizin satırında depolamak için ne kadar alan kullanıldığını belirleyin:
- Variable_Leaf_Size = 2 + (Num_Variable_Leaf_Cols x 2) + Max_Var_Leaf_Size
Max_Var_Key_Size eklenen baytlar her değişken sütununu izlemeye yöneliktir. Bu formül, tüm değişken uzunluklu sütunların yüzde 100 dolu olduğunu varsayar. Değişken uzunluktaki sütun depolama alanının daha küçük bir yüzdesinin kullanılacağını düşünüyorsanız, genel tablo boyutunun daha doğru bir tahminini sağlamak için Max_Var_Leaf_Size değerini bu yüzdeye göre ayarlayabilirsiniz.
Değişken uzunlukta sütun yoksa (anahtar sütunlar veya dahil), Variable_Leaf_Size 0 olarak ayarlayın.
Dizin satırı boyutunu hesaplama:
- Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap + 1 (bir dizin satırının satır başlığı ek yükü için)
Sayfa başına dizin satırı sayısını hesaplama (sayfa başına 8.096 boş bayt):
- Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)
Dizin satırları sayfalara yayılmadığından, sayfa başına dizin satırlarının sayısı en yakın tam satıra yuvarlanmalıdır. Formüldeki 2, sayfanın yuva dizisindeki satırın girişi içindir.
Belirtilen doldurma faktörüne göre sayfa başına ayrılmış boş satır sayısını hesaplayın:
- Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
Hesaplamada kullanılan dolgu faktörü yüzde yerine tamsayı değeridir. Satırlar sayfalara yayılmadığından, sayfa başına satır sayısı en yakın tam satıra yuvarlanmalıdır. Doldurma faktörü büyüdükçe, her sayfada daha fazla veri depolanır ve daha az sayfa vardır. Formüldeki 2, sayfanın yuva dizisindeki satırın girişi içindir.
Tüm satırları depolamak için gereken sayfa sayısını hesaplayın:
- Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
Tahmini sayfa sayısı en yakın tam sayfa sayısına yuvarlanmalıdır.
Dizinin boyutunu hesaplayın (sayfa başına toplam 8.192 bayt):
- Leaf_Space_Used = 8192 x Num_Leaf_Pages
Adım 3. Dizin bilgilerini yaprak olmayan düzeylerde depolamak için kullanılan alanı hesaplama
Dizinin ara ve kök düzeylerini depolamak için gereken alan miktarını tahmin etmek için bu adımları izleyin. Bu adımı tamamlamak için 2. ve 3. adımlardan değerlerin korunması gerekir.
Dizindeki yaprak olmayan düzeylerin sayısını hesaplayın:
- Yaprak Olmayan Düzeyler = 1 + logaritma(Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)
Bu değeri en yakın tamsayıya yuvarlar. Bu değer, kümelenmemiş dizinin yaprak düzeyini içermez.
Dizindeki yaprak olmayan sayfaların sayısını hesaplayın:
- Num_Index_Pages = ∑Düzey (Num_Leaf_Pages/Index_Rows_Per_Page^Düzey) burada 1 <= Düzey <= Düzeyler
Her toplamı en yakın tamsayıya yuvarlar. Basit bir örnek olarak, Num_Leaf_Pages = 1000 ve Index_Rows_Per_Page = 25 olan bir dizin düşünün. Yaprak düzeyinin üzerindeki ilk dizin düzeyi yaprak sayfa başına bir dizin satırı olan 1.000 dizin satırı depolar ve sayfa başına 25 dizin satırı sığabilir. Bu, bu 1.000 dizin satırını depolamak için 40 sayfa gerektiği anlamına gelir. Dizinin bir sonraki düzeyinin 40 satırı saklaması gerekir. Bu, 2 sayfa gerektirdiği anlamına gelir. Dizinin son düzeyinin 2 satır depolaması gerekir. Bu, 1 sayfa gerektirdiği anlamına gelir. Bu, yaprak olmayan 43 dizin sayfası verir. Bu sayılar önceki formüllerde kullanıldığında sonuç aşağıdaki gibidir:
Non-leaf_Levels = 1 + logaritma(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43; örnekte açıklanan sayfa sayısıdır.
Dizinin boyutunu hesaplayın (sayfa başına toplam 8.192 bayt):
- Index_Space_Used = 8192 x Num_Index_Pages
Adım 4. Hesaplanan değerleri toplama
Önceki iki adımda elde edilen değerlerin toplamı:
Kümelenmemiş dizin boyutu (bayt) = Leaf_Space_Used + Index_Space_used
Bu hesaplama aşağıdaki koşulları dikkate almaz:
Bölümleme: Bölümlemeden kaynaklanan alan ek yükü çok azdır, ancak hesaplanması karmaşıktır. Dahil etmek zorunlu değildir.
Ayırma sayfaları: Yığına ayrılan sayfaları izlemek için kullanılan en az bir IAM sayfası vardır, ancak alan ek yükü çok azdır ve tam olarak kaç IAM sayfası kullanılacağını belirlemeye ilişkin bir algoritma yoktur.
Büyük nesne (LOB) değerleri: LOB veri türlerinin varchar(max), varbinary(max), nvarchar(max), metin, ntext, xml ve görüntü değerlerini depolamak için tam olarak ne kadar alan kullanılacağını belirleyen algoritma karmaşıktır. Beklenen LOB değerlerinin ortalama boyutunu eklemek, Num_Rows ile çarpmak ve bunu toplam kümelenmemiş dizin boyutuna eklemek yeterlidir.
Sıkıştırma: Sıkıştırılmış dizinin boyutunu önceden hesaplayamazsınız.
Seyrek sütunlar: Seyrek sütunların alan gereksinimleri hakkında bilgi için bkz. Seyrek sütunları kullanma.