İlginizi Çekebilir
  1. Ana Sayfa
  2. SQL Server
  3. SQL Server Mimarisi – Nedir? Nasıldır?

SQL Server Mimarisi – Nedir? Nasıldır?

Server’ın mimarisi oldukça detaylı bir konu. Bu makalede Server mimarisine genel bir bakış yapacağız.

SQL Server, SQL Server Network Interface (SNI), Database Engine ve SQLOS olmak üzere 3 ana kısımdan oluşur. Database Engine ise Relational Engine ve Storage Engine olmak üzere 2 kısımdan meydana gelir.


Resim-1


Resim-2

1) SQL Server Network Interface (SNI)

SQL Server Network Interface (SNI) istemci ve sunucu arasında ağ bağlantısı sağlayan bir katmandır.
Direkt olarak konfigürasyon yapılamadığı için istemci ve sunucu üzerindeki ağ protokolünün konfigürasyonu yapılmalıdır. SQL Server 4 protokolü destekler:

Shared memory: Sadece SQL Server ve istemci aynı bilgisayar ise kullanılabilir ve oldukça hızlıdır. Herhangi bir konfigürasyon gerektirmez.

TCP/IP: SQL Server’a bir IP (ya da hostname) ve port ile bağlantı sağlar. Varsayılan port 1433’tür.

Named Pipes: LAN için geliştirilmiştir, TCP 445 portunu kullanır.

Virtual Interface Adapter (VIA): Yüksek performanslı bir protokoldür, ancak hem istemci hem de sunucu için özel bir donanıma ihtiyacı vardır.

SNI’ın görevi, sunucudaki Tabular Data Stream (TDS) endpoint’e istek yapan ve verileri alan güvenli bağlantı oluşturmaktır.

Tabular Data Stream (TDS): İstemci tarafından sunucuya bir istek gittiği zaman SNI bu mesajı TDS paketi haline getirir. Sunucu da TDS paketleri dinleyen endpoint’ler mevcuttur. Her ağ protokolü etkin olmasa bile bir TDS enpoint’e atanmıştır. Aşağıdaki sorgu ile TDS endpoint’leri görebiliriz.


Resim-3

Sonuçlarda dikkat edeceğiniz üzere yukarıda bahsetmediğimiz ve ilk sırada yer alan Dedicated Admin Connection (DAC) ise acil durumlarda yani SQL Server üzerinde bir sorun olduğunda ve diğer protokollerden erişim sağlanamadığı zamanlarda erişim sağlar.

2) Database Engine

a) Relational Engine

Sorguların optimizasyonu ve çalıştırılmasından sorumludur. 3 kısımdan oluşur:

Command Parser: Sorguları yazım hatalarına karşı denetler ve sorgu ağacını hazırlar.

Query Optimizer: Execution Planı hazırlar. İlk aşama pre-optimization denilen ve sorgunun karmaşıklığına göre kaç plan çıkaracağına karar verdiği aşamadır. Tek tablodan çekilen basit bir SELECT sorgusu için sadece bir plan vardır ve maliyetsiz (zero cost) olarak tanımlanır.

Karmaşık sorgular için 3 aşamalı bir optimizasyon yapılır:

1) Optimizer nested loop join, diğer adıyla nested iteration olup olmadığına bakar.

Nested Loop Join: Bir tablodaki her satırı (outer table), diğer tablodaki (inner table) her satırla karşılaştırarak join’in sağlayacağı satırlara karar verir. Algoritmayı pseudo-code olarak yazarsak:

for each row R1 in the outer table

for each row R2 in the inner table

if R1 joins with R2

return (R1, R2)

Eğer burada maliyet 0,2’nin altında ise optimizer bu aşamada durur.

2) Bu aşamada bir plan olup olmadığını anlamak için olası optimizasyonlara ve genel desenlere bakar. Eğer maliyet 1’in altında ise optimizer bu aşamada durur.

3) Son olarak ise bütün optimizasyon kurallarına bakar. Eğer Enterprise Edition kullanıyorsanız parallelism ve indexed view’lara da bakar.

Query Executor: Sorguyu çalıştırır.

b) Storage Engine

I/O ile ilgili işlemlerden sorumludur.

Access Methods: I/O isteklerini idare eder.

Buffer Manager: Buffer pool’un yönetiminden sorumludur. Buffer pool veri, log, plan önbelleği gibi önbellek tiplerinden oluşur. Veriler direkt olarak diskten alınmaz, istekler Buffer Manager’a gönderilir. Buffer Manager da sayfayı render edilmeden önce önbelleğe verir.

Transaction Manager: Transaction işlemlerinden sorumludur. SQL Server üzerinde transaction işlemi 2 çeşittir.

1) Implicit transaction: SQL Server otomatik olarak ACID (Atomicity, Consistency, Isolation, Durability) özelliklerini sağlar.

Atomicity: Bir transaction içerisindeki değişikliklerin hepsi başarıyla tamamlanır ya da tümüyle geri alınır. Örnek olarak, A tablosuna veri eklendikten sonra B tablosundaki bir değer güncellenecek ise, A’ya veri eklenmediyse B’deki veri güncellenmez.

Consistency: Transaction veri bütünlüğünü korumak zorundadır. Eğer bir kolon sadece A veya B değeri almalıysa, C değeri girilemez.

Isolation: Aynı anda çalışan ve henüz tamamlanmayan transaction’ların birbirini etkilemeden çalışabilmesidir.

Durability: Transaction tamamlandığında, sistem hatası olsa bile verinin korunmasıdır.

2) Explicit transaction: Sorgu yazarken BEGIN TRANSACTION ile başlayıp COMMIT TRANSACTION veya ROLLBACK TRANSACTION ile bitirdiğimizdeki transaction işlemidir.

3) SQLOS

SQLOS, işletim sistemi (Windows) ile SQL Server arasında yer alan bir katmandır. Hafıza yönetimi, kaynak planlaması, I/O tamamlama gibi düşük seviyedeki işlemleri yapar. İsmindeki “OS” kısmı farklı anlamlar andırsa da, Windows yerine geçecek şekilde bir işletim sistemi gibi çalışmamaktadır. SQLOS, bu işlemleri yaparken kendi içerisinde belirli optimizasyonlar yaparak yine Windows sistem servislerini kullanır. sys.dm_os_ ile başlayan DMV’ler (Dynamic Management View) sayesinde SQLOS üzerindeki bütün bilgilere erişmek mümkündür.

Sorgular Nasıl Çalışır?

Konuyu örneklemek için bir select sorgusunun nasıl çalıştığını inceleyelim.

1) İstemci tarafındaki SNI ile SQL Server üzerindeki SNI bahsettiğimiz protokollerden biriyle bağlantı kurar. Sonra, TDS endpoint ile bağlantı kurulur ve sorgumuz TDS mesajı olarak gönderilir.

2) Command Parser önce Buffer Pool’da gelen sorgu için bir execution plan olup olmadığına bakar. Eğer yoksa bir sorgu ağacı oluşturarak, plan oluşturması için Query Optimizer’a gönderir.

3) Query Optimizer planı oluşturduktan sonra Query Executor’a gönderir.

4) Çalışma zamanında, Query Executor sorgu planına göre ihtiyacı olan datayı Storage Engine içerisindeki Access Methods’a gönderir.

5) Access Methods, Buffer Manager’a ilgili data page’in önbellekte olup olmadığını sorar. Eğer yoksa, diskten çekilir.

6) Access Methods, gelen sonucu istemciye geri göndermesi için Relational Engine’e geri gönderir.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

Yorum Yap

Yazar Hakkında

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi Gemi İnşaatı Mühendisliği bölümünde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi Bilgi Teknolojileri bölümünde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir. Şu anda da Done'de Cloud Development Manager olarak Azure, .NET Core, SQL Server, Docker vb güncel teknolojiler üzerinde çalışmaktadır.

Yorum Yap

Yorumlar (4)

  1. Bilgi dolu bir yazı olmuş, tebrikler..

  2. Elinize sağlık.

  3. 1 ay önce

    Dostum. Adamsın. İlk defa böyle bi makale ile karşılaştım. Bizim TR kaynakları heptir b**tan birbirinin benzeri makaleler ile dolu. Emeğine sağlık. Teşekkürler.