SQL Server Mimarisi
Bu makalede genel hatlarıyla SQL Server Mimarisini anlatacağım. Makalede wikipedia’dan aldığım aşağıdaki resim üzerinden ilerleyeceğim. Ve bu katmanların ne işe yaradıklarından kısaca bahsedeceğim.
Gördüğünüz gibi SQL Server Mimari olarak 3 ana katmadan oluşuyor.
1.Katmanımız: Üst kısımda gördüğünüz External Protocols kısmındaki bileşenler SQL Server Network Interface(SNI) olarak geçiyor.
2.katmanımız: Hemen altındaki Database Engine katmanı. Database Engine içersinde de Storage Engine, Query Processor ve diğer bileşenler var.
3.Katmanımız: Alt tarafta gördüğünüz SQLOS API katmanı.
Makalenin bu kısmından sonra bu katmanları detaylandırarak ilerleyeceğiz.
SQL Server Network Interface(SNI): SNI, client(istemci) ve server(sunucu) arasındaki bağlantıyı sağlayan protokol katmanıdır. SQL Server aşağıdaki 4 protokolü destekler.
SQL Server Configuration Manager üzerinde bu protokolleri konfigüre edebilirsiniz. Aşağıda gördüğünüz gibi her instance için farklı protokol yapılandırması vardır. Aşağıda resimde Shared Memory ve TCP/IP protokolü aktif durumda.
Diğer SQL Server Configuration Manager ayarları için “SQL Server Configuration Manager ayarları” isimli makaleyi okumanızı tavsiye ederim.
- Shared Memory: Client ve Server aynı makinede olduğunda kullanılan protokoldür. Herhangi bir konfigürasyon yapılamaz. Sadece pasif hale getirebilirsiniz. Eğer client olarak sql server’ın kurulu olduğu sunucuyu kullanıyorsanız, sql server default olarak ilk önce bu protokolü kullanarak instance’a bağlanmayı dener.
- Named Pipes: Client ve Server’ın aynı LAN üzerinde olduğu durumlarda kullanılır. TCP 445 portunu kullanır. TCP/IP protokolünün olmadığı ortamlarda kullanılabilir.
- TCP/IP: Dünyanın her yerine en çok kullanılan ve kabul görmüş protokoldür. Client, sql server’a bağlanırken bir IP ya da sunucu ismi ve port(Örneğin 10.56.43.23,1433) ile bağlanır. SQL Server’ın default tcp portu 1433’tür.
- Virtual Interface Adapter (VIA) : SQL Server Configuration Manager’da bu protokolü göremezsiniz. Yüksek performanslı bir protokol olmasına rağmen, client ve server’da ek donanım gerektirdiği için tercih edilmez.
Database Engine: Relational Engine(Query Processor olarak da geçer) ve Storage Engine olarak iki alt başlık halinde inceleyeceğiz.
Relational Engine(Query Processor): Relational Engine genel olarak sorguların en optimize bir şekilde çalışmasından sorumludur. Aşağıdaki bileşenlerden oluşur.
SQL Manager: Procedure cache’i yönetir. Stored Procedure’lerin çalıştırılması ile ve ad hoc sorguların otomatik parametreleştirmesi işlemleri ile ilgilenir. Bir sorgu, çalıştırılmak için SQL Server’a geldiğinde SQL Manager ilk olarak sorguyu cache’de arar. Eğer cache’de yoksa sorgunun compile edilmesi gerektiğini belirler. Daha sonra Parse işlemi başlar.
Parser: Sorguyu bir bilgisayar tarafından daha kolay işlenebilecek hale döndürür. Ayrıca yazım hatalarını denetler.
Optimizer: Veriyi kullanıcıya iletmek için sorguyu çalıştırmanın bir sürü yolu vardır. Örneğin index seek+ key lookup ya da Clustered Index Scan işlemi bir sorgu sonucunu üretebilir. Optimizer istatistiklerden de faydalanarak sorguyu en optimize bir şekilde çalıştırmak için execution planını hazırlar. Aşağıdaki makaleler ilginizi çekebilir.
“SQL Server’da İstatistik Kavramı ve Performansa Etkisi“,
“SQL Server’da Index Kavramı ve Performansa Etkisi“
Query Executor: Optimizer tarafından oluşturulan execution plan kullanılarak sorgunun adım adım çalıştırıldığı ve storage engine ile irtibata geçildiği kısımdır.
Storage Engine: Adından da anlaşılacağı üzere genel olarak verilerin depolanmasından ve gerektiğinde okunmasından sorumludur. Alt bileşenlerini aşağıda bulabilirsiniz.
Buffer Manager: Bellekte olmayan verilerin diskten belleğe aktarılması ve bellekteki değiştirilmiş verilerin tekrar diske yazılması işlemleri burada yönetilir.
Transaction Services:
- SQL Server’a gelen transaction’ların ACID kurallarına uymasını garanti eder. “SQL Server ACID Kuralları” isimli makaleyi okumak isteyebilirsiniz.
- Write Ahead Logging(WAL) burada yönetilir. WAL için “Database Checkpoint Nedir” isimli makaleyi okumanızı tavsiye ederim.
- Concurrency kontrolleri burada yönetilir. “Optimistic ve Pessimistic Concurrency Control Nedir” isimli makaleyi okumanızı tavsiye ederim.
Lock Manager: Bütün lock çeşitleri burada yönetilir. “SQL Server Lock(Kilit) Çeşitleri” isimli makalede lock çeşitlerini ve açıklamalarını bulabilirsiniz.
File Manager: Veri için veritabanında alan tahsis edilmesi ve veritabanının büyümesi için gerekli alanın tahsis edilmesinden sorumludur.
“SQL Server Storage Kavramları(Page, Extents, GAM, SGAM, PFS, IAM, BCM, DCM)” isimli makalede storage kavramları hakkında bilgi bulabilirsiniz.
SQLOS: SQLOS, SQL Server’a özgü tüm işletim sistemi kaynaklarını yöneten katmandır. SQL Server 2005 ile hayatımıza girdi. 2005 öncesinde işletim sistemi ile ilgili kaynaklar SQL Server Engine’in içindeki farklı kısımlar tarafından yönetiliyordu. SQLOS’un geliştirilmesi sebebi SQL Engine’in içindeki bütün bu kısımları ayrı ayrı geliştirmek yerine tek bir noktada toplamaktı. Yukarıdaki resimde yönetilen parametreleri görebilirsiniz.