Heap, Clustered İndeks ve Nonclustered İndeks Data Yapıları - Bölüm 1 (Tablo ve İndeks Organizasyonu, Heap Mimarisi)
1.Tablo ve İndeks Organizasyonu
Tablo Organizasyonu
Tablolar bir veya birden fazla partition ile oluşabilir. Her partition heap veya clustered indeks yapısında veri satırlarıdan oluşur.
Partition Organizasyonu
SQL Server tabloları partitiondaki data pageleri organize etmek için iki metot kullanır:
1.Clustered Tablo: Clustered indeks içeren tablodur.
Nonclustered İndeksler
2.Heap Mimarisi
1. http://msdn.microsoft.com
Serap PARLAK
Tablo Organizasyonu
Tablolar bir veya birden fazla partition ile oluşabilir. Her partition heap veya clustered indeks yapısında veri satırlarıdan oluşur.
Partition Organizasyonu
Partition kullanıcı tanımlı veri organizasyon birimidir. Tablolar varsayılan olarak bir partitiona sahiptirler. Bir tablo ve indeks, birden fazla partition içeriyorsa, veri yatay olarak bölümlenir. Partitionlar veritabanında bir veya daha fazla filegroup içerisine konulabilirler. Veri üzerinde sorgu ve updateler gerçekleştirilirken tablo veya indeksler tek mantıksal varlıklar olarak işlem görürler.
Clustered Tablolar, Heap ve İndeksler SQL Server tabloları partitiondaki data pageleri organize etmek için iki metot kullanır:
1.Clustered Tablo: Clustered indeks içeren tablodur.
Veri satırları (data rows) clustered indeks anahtarının sırasıyla dosyada saklanır. Clustered indeks, clustered indeks anahtar değerine dayanarak daha hızlı satır erişimi sağlayan B-tree indeks yapısında yürütülür. İndeksin her seviyesindeki pageler(leaf seviyesindeki data pageler de dahil) doubly-linked list içerisinde bağlıdırlar. Ancak bir seviyeden diğerine dolaşmak key değerlerini kullanarak gerçekleşir.
2.Heap: Clustered indeks içermeyen tablodur. Veri satırları özel bir sıralama içinde saklanmazlar, ve data pagelerin sırasında da özel bir sıralama yoktur. Data pageler linked list içinde bağlı değillerdir. Indexed Viewler de clustered tablolarla aynı yapıda saklanırlar. Heap veya clustered tablolar birden fazla partition içerirse, her partition kendine ait satır gruplarını içeren heap veya B-tree yapısına sahip olur. Örneğin bir clustered tablo dört partition içeriyorsa, dört tane B-tree yapısı vardır.
Nonclustered İndeksler
Nonclustered indeksler bir clustered indekse benzer B-tree indeks yapısına sahiptir. Farklı olarak nonclustered indeksler veri satırlarının sıralanmasını etkilemezler. Leaf seviyesi indeks satırlarını içerir. Her indeks satırı bir değer, satır göstergesi ve varsa included(veya nonkey) kolon içerir. Gösterge anahtar değerine sahip veri satırını işaret eder.
Bir allocation unit, kendi page tipindeki veriyi yönetmek için kullanılan heap veya B-tree içinde page grubudur. Aşağıdaki tabloda, tablo ve indeksin verisini yönetmek için kullanılan allocation unit tipleri listelenmektedir:
IN_ROW_DATA | Veri veya indeks satırları Large Object Data (LOB) dışında tüm veriyi kapsar. Pageler veri veya indeks tipleridir. |
LOB_DATA | Large Object veri text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) veya user defined types data tipleri içinde depolanır. Pageler text\Image tipleridir. |
ROW_OVERFLOW_DATA | Variable-Length veri, 8060 byte row size ile sınırlı varchar, nvarchar, varbinary ve sql_variant veri tiplerinde depolanır. Pageler veri tipleridir. |
Heap, clustered indeks içermeyen tablodur. Heap, heapte kullanılan her partition için sys.partitions içerisinde indid = 0 olan bir satır içerir. Heap ön değer olarak bir partitiona sahiptir. Eğer birden fazla partition oluşturulursa her biri kendine özel veri yapısını içeren bir heap yapısı içerir. Örneğin bir heap dört partition ise, burada dört heap yapısı vardır.
Heap içinde veri tipine bağlı olarak her heap yapısı, partitiona özel veriyi kaydetmek ve yönetmek için bir veya daha fazla yerleşim birimine(allocation unit) sahiptir. Her heap, her partition için minimum bir IN_ROW_DATA yerleşim birimine sahiptir. Heap eğer large object (LOB) kolon içeriyorsa her partition için bir de LOB_DATA yerleşim birimini içerir. Heap eğer 8060 byte row size ile sınırlanmış variable length kolon içeriyorsa her partition için bir de ROW_OVERFLOW_DATA yerleşim birimine sahiptir.
sys.system_internals_allocation_units sistem view içinde first_iam_page kolonu, heap yapısının boş alanlarını yöneten IAM page zincirindeki ilk IAM page göstergesidir. SQL Server IAM pageleri heaplere ulaşmak için kullanır. Data page ve rowlar bunları içinde özel bir sıralamada da değildir ve birbirine bağlı değildir. IAM pagelerin içine kaydedilmiş data pageler mantıksal olarak birbirine bağlıdır.
Tablo tarama ve heap okuma, heap için tutulan pagelerin alanlarını IAM pageleri tarayarak bulur. Çünkü IAM veri dosyasında bulunduğu sıra ile aynı sırada tutan bir alanı gösterir, yani Heap dosyaları birbirleriyle aynı sırada scan işlemi yapar.
Referanslar 1. http://msdn.microsoft.com
Serap PARLAK
Yorumlar
Yorum Gönder