MS SQL Server - Mimari
Kolay anlaşılması için SQL Server mimarisini aşağıdaki bölümlere ayırdık -
- Genel mimari
- Bellek mimarisi
- Veri dosyası mimarisi
- Günlük dosyası mimarisi
Genel Mimari
Client - İsteğin başladığı yer.
Query - Yüksek seviyeli dil olan SQL sorgusu.
Logical Units - Anahtar kelimeler, ifadeler ve operatörler vb.
N/W Packets - Ağ ile ilgili kod.
Protocols - SQL Server'da 4 protokolümüz var.
Paylaşılan hafıza (yerel bağlantılar ve sorun giderme amacı için).
Adlandırılmış kanallar (LAN bağlantısında olan bağlantılar için).
TCP / IP (WAN bağlantısında olan bağlantılar için).
VIA-Virtual Interface Adapter (satıcı tarafından kurulması için özel donanım gerektirir ve ayrıca SQL 2012 sürümünden kaldırılmıştır).
Server - SQL Hizmetlerinin kurulduğu ve veritabanlarının bulunduğu yer.
Relational Engine- Burası gerçek infazın yapılacağı yer. Sorgu ayrıştırıcı, Sorgu iyileştirici ve Sorgu yürütücüsü içerir.
Query Parser (Command Parser) and Compiler (Translator) - Bu, sorgunun sözdizimini kontrol edecek ve sorguyu makine diline dönüştürecektir.
Query Optimizer - Sorgu, istatistik ve Algebrizer ağacını girdi olarak alarak yürütme planını çıktı olarak hazırlayacaktır.
Execution Plan - Sorgu yürütmenin bir parçası olarak gerçekleştirilecek tüm adımların sırasını içeren bir yol haritası gibidir.
Query Executor - Burası yürütme planı yardımıyla sorgunun adım adım yürütüleceği ve ayrıca depolama motoruyla iletişime geçileceği yerdir.
Storage Engine - Depolama sistemindeki verilerin (disk, SAN, vb.) Depolanması ve geri alınmasından, veri manipülasyonundan, kilitlenmesinden ve işlemlerin yönetilmesinden sorumludur.
SQL OS- Bu, ana makine (Windows OS) ile SQL Server arasındadır. Veritabanı motorunda gerçekleştirilen tüm faaliyetler SQL OS tarafından halledilir. SQL OS, engelleme ve kilitleme yapısını kullanarak arabellek havuzu, günlük arabelleği ve kilitlenme algılama gibi bellek yönetimi anlaşmaları gibi çeşitli işletim sistemi hizmetleri sağlar.
Checkpoint Process- Kontrol noktası, tüm kirli sayfaları (değiştirilmiş sayfalar) Arabellek Önbelleğinden Fiziksel diske yazan dahili bir işlemdir. Bunun dışında log kayıtlarını log buffer'dan fiziksel dosyaya yazar. Kirli sayfaların arabellekten veri dosyasına yazılması, kirli sayfaların sertleştirilmesi olarak da bilinir.
Adanmış bir işlemdir ve belirli aralıklarla SQL Server tarafından otomatik olarak çalışır. SQL Server, her veritabanı için ayrı ayrı kontrol noktası işlemini çalıştırır. Checkpoint, beklenmeyen kapanma veya sistem çökmesi \ Arızası durumunda SQL Server için kurtarma süresini azaltmaya yardımcı olur.
SQL Server'daki denetim noktaları
SQL Server 2012'de dört tür checkpoints -
Automatic - Bu, SQL Server Veritabanının Kurtarma Aralığı - Sunucu Yapılandırma Seçeneği tarafından tanımlanan zaman sınırında kurtarılabildiğinden emin olmak için arka planda bir işlem olarak çalışan en yaygın kontrol noktasıdır.
Indirect- Bu, SQL Server 2012'de yenidir. Bu, arka planda da çalışır, ancak seçeneğin yapılandırıldığı belirli veritabanı için kullanıcı tarafından belirlenen hedef kurtarma süresini karşılamak için. Belirli bir veritabanı için Target_Recovery_Time seçildikten sonra, bu, sunucu için belirtilen Kurtarma Aralığını geçersiz kılar ve bu tür bir DB üzerinde otomatik kontrol noktasını önler.
Manual- Bu, diğer tüm T-SQL deyimleri gibi çalışır, denetim noktası komutunu verdiğinizde tamamlanana kadar çalışır. Manuel denetim noktası yalnızca mevcut veritabanınız için çalışır. Ayrıca isteğe bağlı olan Kontrol Noktası_Süresi'ni de belirtebilirsiniz - bu süre, kontrol noktanızın tamamlanmasını istediğiniz zamanı belirtir.
Internal- Kullanıcı olarak dahili kontrol noktasını kontrol edemezsiniz. Gibi belirli işlemlerde yayınlanmıştır
Kapatma, kapatmanın temiz olmadığı durumlar dışında tüm veritabanlarında bir kontrol noktası işlemi başlatır (nowait ile kapatma).
Kurtarma modeli Tam \ Toplu günlükten Basit'e değiştirilirse.
Veritabanının yedeğini alırken.
DB'niz basit kurtarma modelindeyse, denetim noktası işlemi, günlük% 70 dolduğunda veya Sunucu seçeneği Kurtarma Aralığı temelinde otomatik olarak yürütülür.
Bir data \ log dosyası eklemek veya kaldırmak için veritabanı komutunu değiştir komutu da bir kontrol noktası başlatır.
Denetim noktası, DB'nin kurtarma modeli toplu olarak günlüğe kaydedildiğinde ve minimum düzeyde günlüğe kaydedilen bir işlem gerçekleştirildiğinde de gerçekleşir.
DB Snapshot oluşturma.
Lazy Writer Process- Tembel yazar, kirli sayfaları bambaşka bir nedenle diske itecektir, çünkü arabellek havuzunda belleği boşaltması gerekir. Bu, SQL sunucusu bellek baskısı altına girdiğinde gerçekleşir. Bildiğim kadarıyla bu, içsel bir süreç tarafından kontrol ediliyor ve bunun için bir ortam yok.
SQL sunucusu, kaynak çekişmesini (veya kullanılabilirliğini) değerlendirmek için bellek kullanımını sürekli olarak izler; işi, her zaman belirli miktarda boş alan olduğundan emin olmaktır. Bu sürecin bir parçası olarak, bu tür bir kaynak çekişmesi fark ettiğinde, Lazy Writer'ı kirli sayfaları diske yazarak bellekteki bazı sayfaları boşaltması için tetikler. Diske hangi sayfaların yıkanacağına karar vermek için En Son Kullanılanlar (LRU) algoritmasını kullanır.
Lazy Writer her zaman etkinse, bellek darboğazını gösterebilir.
Bellek Mimarisi
Aşağıda, bellek mimarisinin göze çarpan özelliklerinden bazıları verilmiştir.
Tüm veritabanı yazılımlarının birincil tasarım hedeflerinden biri, disk giriş / çıkışını en aza indirmektir çünkü disk okuma ve yazma işlemleri, en yoğun kaynak gerektiren işlemler arasındadır.
Pencerelerdeki bellek, Kernel modu (OS modu) ve Kullanıcı modu (SQL Server gibi uygulama) ile paylaşılan Sanal Adres Alanı ile çağrılabilir.
SQL Sunucusu "Kullanıcı adres alanı" iki bölgeye ayrılmıştır: MemToLeave ve Buffer Pool.
MemToLeave (MTL) ve Buffer Pool (BPool) boyutu, başlatma sırasında SQL Server tarafından belirlenir.
Buffer managementyüksek düzeyde I / O elde etmede anahtar bir bileşendir. Tampon yönetimi bileşeni iki mekanizmadan oluşur: veritabanı sayfalarına erişmek ve bunları güncellemek için tampon yöneticisi ve veritabanı dosyası G / Ç'sini azaltmak için tampon havuzu.
Tampon havuzu ayrıca çoklu bölümlere ayrılmıştır. En önemlileri tampon önbelleği (veri önbelleği olarak da adlandırılır) ve prosedür önbelleğidir.Buffer cacheveri sayfalarını bellekte tutar, böylece sık erişilen veriler önbellekten alınabilir. Alternatif, diskten veri sayfalarını okumak olabilir. Veri sayfalarını önbellekten okumak, bellekten veri almaktan doğal olarak daha yavaş olan gerekli G / Ç işlemlerinin sayısını en aza indirerek performansı optimize eder.
Procedure cachesaklı yordamı ve sorgu yürütme planlarını sorgu planlarının oluşturulması gereken sayıyı en aza indirmek için tutar. DBCC PROCCACHE deyimini kullanarak prosedür önbelleğindeki boyut ve etkinlik hakkında bilgi edinebilirsiniz.
Tampon havuzunun diğer bölümleri şunları içerir:
System level data structures - Veritabanları ve kilitlerle ilgili SQL Server örnek düzeyi verilerini tutar.
Log cache - İşlem günlüğü sayfalarını okumak ve yazmak için ayrılmıştır.
Connection context- Örneğe yapılan her bağlantı, bağlantının mevcut durumunu kaydetmek için küçük bir bellek alanına sahiptir. Bu bilgiler, saklı prosedür ve kullanıcı tanımlı fonksiyon parametrelerini, imleç pozisyonlarını ve daha fazlasını içerir.
Stack space - Windows, SQL Server tarafından başlatılan her iş parçacığı için yığın alanı ayırır.
Veri Dosyası Mimarisi
Veri Dosyası mimarisi aşağıdaki bileşenlere sahiptir -
Dosya Grupları
Veritabanı dosyaları, tahsis ve yönetim amaçları için dosya grupları halinde gruplanabilir. Hiçbir dosya birden fazla dosya grubunun üyesi olamaz. Günlük dosyaları hiçbir zaman bir dosya grubunun parçası değildir. Log alanı, veri alanından ayrı olarak yönetilir.
SQL Server'da Birincil ve Kullanıcı tanımlı olmak üzere iki tür dosya grubu vardır. Birincil dosya grubu, birincil veri dosyasını ve özel olarak başka bir dosya grubuna atanmamış diğer dosyaları içerir. Sistem tablolarının tüm sayfaları birincil dosya grubuna tahsis edilmiştir. Kullanıcı tanımlı dosya grupları, veritabanı oluştur veya veritabanı değiştir deyiminde dosya grubu anahtar sözcüğü kullanılarak belirtilen herhangi bir dosya grubudur.
Her veritabanındaki bir dosya grubu, varsayılan dosya grubu olarak çalışır. SQL Server, oluşturuldukları sırada dosya grubu belirtilmemiş bir tablo veya dizine bir sayfa ayırdığında, sayfalar varsayılan dosya grubundan ayrılır. Varsayılan dosya grubunu bir dosya grubundan başka bir dosya grubuna geçirmek için, db_owner sabit db rolüne sahip olmalıdır.
Varsayılan olarak, birincil dosya grubu varsayılan dosya grubudur. Dosyaların ve dosya gruplarının ayrı ayrı yedeklenmesi için kullanıcının db_owner sabit veritabanı rolüne sahip olması gerekir.
Dosyalar
Veritabanlarında üç tür dosya bulunur - Birincil veri dosyası, İkincil veri dosyası ve Günlük dosyası. Birincil veri dosyası, veritabanının başlangıç noktasıdır ve veritabanındaki diğer dosyaları gösterir.
Her veritabanının bir birincil veri dosyası vardır. Birincil veri dosyası için herhangi bir uzantı verebiliriz ancak önerilen uzantı.mdf. İkincil veri dosyası, o veritabanındaki birincil veri dosyası dışındaki bir dosyadır. Bazı veritabanlarında birden çok ikincil veri dosyası olabilir. Bazı veritabanlarında tek bir ikincil veri dosyası bulunmayabilir. İkincil veri dosyası için önerilen uzantı.ndf.
Günlük dosyaları, veritabanını kurtarmak için kullanılan tüm günlük bilgilerini tutar. Veritabanında en az bir günlük dosyası olmalıdır. Bir veritabanı için birden fazla günlük dosyamız olabilir. Günlük dosyası için önerilen uzantı şudur:.ldf.
Bir veritabanındaki tüm dosyaların konumu hem ana veritabanına hem de veritabanı için birincil dosyaya kaydedilir. Çoğu zaman, veritabanı motoru ana veritabanındaki dosya konumunu kullanır.
Dosyaların iki adı vardır - Mantıksal ve Fiziksel. Mantıksal ad, tüm T-SQL ifadelerinde dosyaya atıfta bulunmak için kullanılır. Fiziksel ad OS_file_name'dir, OS kurallarına uymalıdır. Veri ve Günlük dosyaları, FAT veya NTFS dosya sistemlerine yerleştirilebilir ancak sıkıştırılmış dosya sistemlerine yerleştirilemez. Bir veritabanında 32.767 adede kadar dosya olabilir.
Kapsamlar
Kapsamlar, alanın tablolara ve dizinlere ayrıldığı temel birimdir. Bir ölçüde, 8 bitişik sayfa veya 64KB'dir. SQL Server'ın iki tür kapsamı vardır - Tekdüzen ve Karışık. Tek tip kapsamlar yalnızca tek bir nesneden oluşur. Karışık kapsamlar sekiz adede kadar nesne tarafından paylaşılır.
Sayfalar
MS SQL Server'da veri depolamanın temel birimidir. Sayfanın boyutu 8 KB'dir. Her sayfanın başlangıcı, sayfa türü, sayfadaki boş alan miktarı ve sayfaya sahip olan nesnenin nesne kimliği gibi sistem bilgilerini depolamak için kullanılan 96 bayt başlıktır. SQL Server'da 9 tür veri sayfası vardır.
Data - Metin, ntext ve resim verileri dışındaki tüm verileri içeren veri satırları.
Index - Dizin girişleri.
Tex\Image - Metin, resim ve ntext verileri.
GAM - Tahsis edilen alanlarla ilgili bilgiler.
SGAM - Sistem düzeyinde tahsis edilen kapsamlar hakkında bilgiler.
Page Free Space (PFS) - Sayfalarda bulunan boş alan hakkında bilgiler.
Index Allocation Map (IAM) - Bir tablo veya dizin tarafından kullanılan kapsamlar hakkında bilgiler.
Bulk Changed Map (BCM) - Son yedekleme günlük ifadesinden bu yana toplu işlemlerle değiştirilen kapsamlar hakkında bilgiler.
Differential Changed Map (DCM) - Son yedekleme veritabanı ifadesinden bu yana değişen kapsamlar hakkında bilgiler.
Günlük Dosyası Mimarisi
SQL Server işlem günlüğü, işlem günlüğü bir günlük kayıtları dizisiymiş gibi mantıksal olarak çalışır. Her günlük kaydı, Günlük Sıra Numarası (LSN) ile tanımlanır. Her günlük kaydı, ait olduğu işlemin kimliğini içerir.
Veri değişiklikleri için günlük kayıtları, gerçekleştirilen mantıksal işlemi veya değiştirilen verilerin önceki ve sonraki görüntülerini kaydeder. Önceki görüntü, işlem gerçekleştirilmeden önceki verilerin bir kopyasıdır; sonraki görüntü, işlem gerçekleştirildikten sonraki verilerin bir kopyasıdır.
Bir işlemi kurtarma adımları, günlük kaydının türüne bağlıdır -
- Mantıksal işlem günlüğe kaydedildi.
- Mantıksal işlemi ileriye taşımak için işlem tekrar gerçekleştirilir.
- Mantıksal işlemi geri almak için, ters mantıksal işlem gerçekleştirilir.
- Görüntü kaydedilmeden önce ve sonra.
- İşlemi ileriye taşımak için, sonraki görüntü uygulanır.
- İşlemi geri almak için önceki görüntü uygulanır.
İşlem günlüğüne farklı işlem türleri kaydedilir. Bu işlemler şunları içerir -
Her işlemin başlangıcı ve bitişi.
Her veri değişikliği (ekleme, güncelleme veya silme). Bu, sistem tabloları dahil olmak üzere herhangi bir tablodaki sistemde saklanan prosedürler veya veri tanımlama dili (DDL) ifadeleri tarafından yapılan değişiklikleri içerir.
Her ölçüde ve sayfa ayırma veya ayırma.
Tablo veya dizin oluşturma veya bırakma.
Geri alma işlemleri de günlüğe kaydedilir. Her işlem, açık bir geri alma ifadesinden veya bir hatayla karşılaşıldığında oluşan bir geri dönüşü desteklemek için yeterli günlük alanı olduğundan emin olmak için işlem günlüğünde yer ayırır. Bu ayrılmış alan, işlem tamamlandığında serbest bırakılır.
Veritabanı çapında başarılı bir şekilde son yazılan günlük kaydına geri dönüş için bulunması gereken ilk günlük kaydından günlük dosyası bölümüne, günlüğün etkin bölümü veya etkin günlük adı verilir. Bu, veritabanının tam olarak kurtarılması için gereken günlük bölümüdür. Aktif günlüğün hiçbir bölümü asla kesilemez. Bu ilk günlük kaydının LSN'si, minimum kurtarma LSN'si (Min LSN) olarak bilinir.
SQL Server Veritabanı Motoru, her fiziksel günlük dosyasını dahili olarak bir dizi sanal günlük dosyasına böler. Sanal günlük dosyalarının sabit boyutu yoktur ve fiziksel bir günlük dosyası için sabit sayıda sanal günlük dosyası yoktur.
Veritabanı Motoru, günlük dosyalarını oluştururken veya genişletirken sanal günlük dosyalarının boyutunu dinamik olarak seçer. Veritabanı Motoru az sayıda sanal dosyayı korumaya çalışır. Sanal günlük dosyalarının boyutu veya sayısı, yöneticiler tarafından yapılandırılamaz veya ayarlanamaz. Sanal günlük dosyalarının sistem performansını etkilediği tek zaman, fiziksel günlük dosyalarının küçük boyut ve growth_increment değerleriyle tanımlanmasıdır.
Boyut değeri, günlük dosyası için başlangıç boyutudur ve growth_increment değeri, her yeni alan gerektiğinde dosyaya eklenen alan miktarıdır. Günlük dosyaları, çok sayıda küçük artış nedeniyle büyük bir boyuta ulaşırsa, birçok sanal günlük dosyasına sahip olacaktır. Bu, veritabanı başlangıcını yavaşlatabilir ve ayrıca yedekleme ve geri yükleme işlemlerini günlüğe kaydedebilir.
Günlük dosyalarına, gereken son boyuta yakın bir boyut değeri atamanızı ve ayrıca nispeten büyük bir büyüme artış değerine sahip olmanızı öneririz. SQL Server, ilişkili günlük kaydı diske yazılmadan önce hiçbir veri değişikliğinin diske yazılmamasını garanti eden bir ileri yazma günlüğü (WAL) kullanır. Bu, bir işlemin ACID özelliklerini korur.