Sql Server Depolama
31 Aralık 2016 Cumartesi
Varsayılan olarak, Sql Server dosyaları 2 şekilde saklar.
* Bunlardan ilki, birincil fiziksel veritabanı dosyalarıdır. Bu dosyalar .mdf uzantılıdır. Bu dosya yapısında şema yapıları ve verileriniz tutulur.
* İkincisi, log dosyası olarak adlandırılan .ldf uzantılı dosyadır. Bu dosya türü olmadan veritabanı herhangi bir işlem(transaction) yapmaz.
Veritabanları tek başına verinin tam bir kümesidir diyemeyiz keza log dosyaları için de bu geçerlidir. Ancak biz veritabanına log uygularsak, verinin tam bir kümesini elde etmiş oluruz.
Bahse konu her 2 dosyanın'da konumları ile ilgili herhangi bir kısıtlama yoktur. Yani bir arada bulunacaklar diye bir kaide yok. Bilakis ayrı ayrı konumlandırılması olası bir felaket(dosyalardan birinin zarar görmesi) anında diğer dosya ile yola devam etme şansı verir.
Page ve Extent Kavramı
Sql Server'da en temel depolama birimi Page'lerdir. Siz bir database oluşturduğunuzda diskiniz sizin için pagelerden oluşan bir dosya(mdf ve ndf uzantılı) tahsis eder. Disk I/O işlemlerinin tümü page düzeyinde gerçekleşir. Bu şu demek oluyor; Sql Server tüm page'lere datayı yazar ya da page'den datayı okur. Extent'ler ise her biri bünyesinde 8 adet page bulunduran koleksiyonlardan oluşur. Her extent'teki page sayısı aynı olmakla birlikte, page'deki satır sayısı aynı değildir. Bu tamamen satır boyutuna bağlıdır. Extent'lerin görevi page'leri etkin şekilde yönetmektir. Extent'ler için page'lerin barınma yeridir diyebiliriz. Her bir page 8 KB boyutundadır. Dolayısıyla 1 M.B başına 128 pages düşer.(128*8=1024 K.B) Her bir page içersinde sistem bilgisi bulunan 96 byte lık başlık kısmından oluşur. Bu bilgiler; sayfa numarası, sayfa tipi, sayfa içersindeki boş alan ve ilgili sayfa'ya sistem tarafından otomatik olarak atanan bir birim numarasından oluşur. Bu kısmı özetlemek gerekirse; Extent veritabanı içersinde ayrılan bir birimdir aynı şekilde page de extent içinde ayrılan birim alandır.
Page Tipleri :
* Data :
* Index :
Clustered Index'in non-leaf page'lerini ve Non-clustered indeksin leaf ve non-leaf page'lerini içerir.
* Text/Image(BLOB)
* GAM (Global Allocation Map) & SGAM (Shared Global Allocation Map) & PFS (Page Free Space) :
Bu tip page'ler, hangi extent ve page'lerin kullanıldığını ve hangilerinin kullanılmadığını gösterir. Esasen bu page'ler için nerede boş yer olduğunu gösteren kayıtları saklarlar da diyebiliriz.
* IAM (Index Allocation Map):
Tabloların ve Index'lerin extent'ler üzerinde tahsis ettikleri birim hakkında bilgi verirler.
* Bulk Changed Map (BCP):
Bu page tipini kavrayabilmemiz için evvela BULK işlemini anlamamız gerekiyor. BULK operasyonları, veritabanındaki çok yüksek hızlı değişimlerdir.(genellikle dışardan toplu veri alımı ya da tablonun truncate edilmesi gibi işlemler.) Bu işlemlerin hızlı olması, yapılan her işlemin log olarak tutulmamasından dolayıdır. Log bilgisi yedekleme ve sistem kurtarma açısından kritiktir fakat veritabanında meydana gelen BULK işlemlerinin log bilgisi tutulmaz. (Veritabanında bir operasyon yapıldığına dair bir log bilgisi tutulur fakat çok özel bilgiler yoktur, bu nedenle yapılan değişiklikler yeniden düzenlenemez.)
* Differential Changed Map :
Bu tip de BCP ile aynıdır. Sadece BULK operasyonları ile değişen extent'ler yerine veritabanında alınan son yedeklemeden sonra yapılmış olan değişiklikler izlenir. Fark yedekleme yapmak istediğinizde, Differantial Changed Map(DCM) hangi extent'lerin yedeğinin alınması gerektiği bilgisini sağlar. Sadece bu extent'lerin yedeği alınacağından daha küçük ve kısmen de olsa hızlı çalışan bir yedekleme yapılır.