SQL Server Nedir  SQL Server Mimarisi

SQL Server, Microsoft tarafından geliştirilen bir veritabanı yönetim sistemi (DBMS) yazılımıdır. Temel amacı, verileri depolamak, yönetmek ve bu verilere hızlı ve güvenilir bir şekilde erişim sağlamaktır. İşletmelerin büyük miktarda veriyi analiz etmesine ve yönetmesine olanak tanır. SQL Server, ilişkisel bir veritabanı sistemidir; yani veriler, tablolar arasında ilişkilendirilmiş bir şekilde saklanır.

SQL Server, özellikle OLTP (Online Transaction Processing), OLAP (Online Analytical Processing) ve hibrit işlemler için kullanılır. Ayrıca yüksek ölçeklenebilirlik, güvenlik ve performans sağlamasıyla bilinir.

SQL Server mimarisi, katmanlı bir yapı üzerine kuruludur ve işlevsel olarak farklı bölümlere ayrılmıştır. Bu bölümler, kullanıcılara hızlı ve optimize edilmiş bir veritabanı deneyimi sunar.

Bu görsel, SQL Server’ın mimarisini ve ana bileşenlerini detaylı bir şekilde göstermektedir. Aşağıda, şemadaki her katmanı ve bileşeni açıklıyorum:

 1. SQL Server Network Interface (SNI)
Kullanıcılardan gelen sorguların alınması ve sonuçların kullanıcılara iletilmesi için kullanılan arayüzdür. Sql server 4 protokolü desteklemektedir. belirtilen linkte Shared memory,Names Pipes, TCP/IP protokollerini detaylı görebilirsiniz.
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.
SQL Server, TDS (Tabular Data Stream) protokolünü kullanarak istemcilerle iletişim kurar. TDS, sorguları ve verileri taşımak için kullanılan bir iletişim protokolüdür.

 2. Protocol Layer (Protokol Katmanı)
SQL Server’a gelen sorguları uygun bir şekilde yorumlamak ve iç bileşenlere iletmek. Ayrıca yanıtları da istemcilere iletir.
 Language Event:
Sorgular bu katmanda SQL Server’ın anlayabileceği bir biçime dönüştürülür.
 TDS Protokolü:
Verilerin taşınmasından sorumludur.

 3. Relational Engine
SQL Server’ın beynidir ve sorguların nasıl çalıştırılacağını belirler.  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.

 a. CMD Parser (Komut Ayrıştırıcı)

Gelen SQL sorgusunu sözdizimsel (syntax) ve anlamsal (semantic) açıdan analiz eder.
Örneğin:  SELECT  FROM Users sorgusunun tablolar ve sütunlar açısından geçerli olup olmadığını kontrol eder. Analiz edilen sorgu bir Query Tree (Sorgu Ağacı) olarak aktarılır.

 b. Optimizer
Sorgunun en verimli şekilde nasıl çalıştırılacağını belirler.
Örneğin: Hangi dizinlerin kullanılacağı, hangi tabloya önce erişileceği gibi kararlar burada alınır.
Optimize edilmiş bir Query Plan (Sorgu Planı) üretir.

 c. Query Executor
Sorgu planını alır ve bu plana göre işlemeyi başlatır. Verilere erişmek için Storage Engine (Depolama Motoru) ile iletişim kurar.
Aşağıdaki resim daha detaylı bir sql server mimarisi olarak karşımıza çıkmaktadır. Açıklamalarımızı ilk resim üzerine yapmış olacağız.


 4. Storage Engine
Verinin fiziksel olarak saklandığı ve işlendiği katmandır.

 a. Transaction Manager
Transaction Manager, SQL Server’da işlemleri (transactions) yönetir ve ACID kurallarını garanti eder. Ancak bir işlem ACID kurallarına uygun değilse ya da bu kurallara uyacak şekilde tamamlanamazsa, Transaction Manager bu durumu aşağıdaki şekilde ele alır:

 1. Atomicity (Bölünmezlik)
İşlem ya tamamen yapılır ya da hiç yapılmaz. İşlem sırasında bir hata oluşursa (örneğin, ağ kesintisi, disk arızası veya sorgu hatası) Transaction Manager, işlemin yapılmış olan kısımlarını geri alır(rollback) ve işlemi iptal eder. Sistem, sanki işlem hiç yapılmamış gibi olur.

 2. Consistency (Tutarlılık)
Bir işlem tamamlandığında veritabanı tutarlı bir durumda olmalıdır. Eğer işlem sonrası veritabanında tutarsız bir durum oluşursa (örneğin, veri türü uyuşmazlıkları, kısıtlama ihlalleri) Transaction Manager işlemi durdurur ve veritabanını eski tutarlı haline geri döndürmek için rollback yapar. Hata mesajı üretilir ve kullanıcı bilgilendirilir.

 3. Isolation (Yalıtım)
Bir işlem, diğer işlemlerden bağımsız çalışmalı ve diğer işlemlerin verisini etkilememelidir. Eğer bir işlem diğer bir işlemle çakışırsa (örneğin, aynı satıra eşzamanlı yazma girişimi) Transaction Manager, veriler üzerinde uygun kilitler uygulayarak işlemler arasındaki etkileşimi önler. Eğer kilitler bir deadlock (kilitlenme) oluşturursa, bir işlem durdurulur ve rollback yapılır.

 4. Durability (Süreklilik)
Bir işlem başarıyla tamamlandıktan sonra sonuçları kalıcı olmalıdır. (Hatta sistem çökse bile veri kaybı olmamalı.) Eğer bir işlem tamamlandıktan sonra sonuçları kalıcı hale getirilemiyorsa (örneğin, disk arızası veya sistem çökmesi) İşlemin tamamlanmış adımları Transaction Log içinde saklanır. Sistem yeniden başlatıldığında log kullanılarak işlemin tamamlanmamış adımları tamamlanır ya da geri alınır. Eğer işlem kalıcı hale getirilemiyorsa, rollback yapılır ve hata raporlanır.

Transaction Manager’ın Karar Süreci
1. Hata Tespiti:
İşlem sırasında herhangi bir ACID kuralı ihlal edilirse, Transaction Manager bunu algılar.
2. Rollback :
İşlem geri alınır ve sistem eski tutarlı haline döner.
3. Hata Mesajı:
Kullanıcıya veya uygulamaya uygun hata mesajı iletilir.
4. Transaction Log Kullanımı:
Yarım kalan işlemleri geri almak veya tamamlamak için log kayıtları kullanılır.

Yukarıdaki detaylı açıklamalardan sonra kaldığımız yerden devam edelim. Storage Engine bölümünde olan Access Methods kavramına değienlim.

 b. Access Methods
Verilere nasıl erişileceğini belirler. SQL Server’ın Depolama Motoru (Storage Engine) içinde bulunan ve veri sayfalarına erişimi sağlayan kritik bir bileşendir. Bu bileşen, SQL Server’ın veritabanındaki fiziksel veri ve index erişimini organize eder.  Örneğin: Tablolar, dizinler ve diğer veri yapılarıyla nasıl etkileşim kurulacağını düzenler. Veriler SQL Server’da 8 KB’lik sayfalar halinde depolanır.  Access Methods, bu veri sayfalarının nerede saklandığını belirleyerek doğru veri parçalarını getirmekle sorumludur. Eğer sorgu, bir tablo üzerinde index kullanıyorsa, Access Methods bu dizini tarayarak verilere erişir.  Clustered Index ve NonClustered Index yapılarının kullanımı Access Methods tarafından organize edilir. Access Methods, veri sayfalarını düzenler ve gerektiğinde veriyi günceller.  Yeni veri eklemek, mevcut veriyi güncellemek veya silmek gibi işlemleri yönetir. Satır, sayfa veya tablo seviyesinde kilitler uygulayarak işlemler arasındaki veri tutarlılığını sağlar.
Örnek:
SELECT  FROM Customers WHERE CustomerID = 1
 Access Methods’ın İşleyişi:
1. Query Executor, sorguyu çalıştırır ve CustomerID sütununa bir Index Seek yapılması gerektiğine karar verir.
2. Access Methods, CustomerID dizinini tarar ve ilgili veri sayfasını belirler.
3. Buffer Manager, bu veri sayfasını belleğe yükler.
4. İlgili veri Relational Engine’e döndürülür.

Access Methods, SQL Server’ın veri depolama ve erişim altyapısının anahtarıdır. Verilere doğrudan erişimi organize eder ve depolama motoru ile ilişki yönetimini sağlar. Bu, SQL Server’ın hızlı ve güvenilir çalışmasını mümkün kılar.

SQL Server Access Methods, veritabanı içindeki veri ve indekslere nasıl erişileceğini yöneten bir alt bileşendir. Yani, kullanıcı bir sorgu çalıştırdığında, bu bileşen hangi sayfalardan verinin okunacağını veya nereye yazılacağını belirler.

Basitçe özetlersek:

  • Veriye nasıl ulaşılacağını belirler.
  • SQL Server’da tablo, indeks, satır ve sayfa gibi yapılarla düşük seviyede iletişim kurar.
  • Sorgular çalıştığında, hangi disk sayfalarının okunacağını, hangilerinin güncelleneceğini bu bileşen bilir.

Örneğin bir SELECT sorgusu çalıştırdığında:

  1. Query Processor sorguyu planlar.
  2. Access Methods, o planı alır ve:
    • “Hangi indeks kullanılacak?”
    • “Hangi sayfalara erişilecek?”
    • “Kaç satır okunacak?” gibi detayları çözümler.
  3. Sayfa bilgilerini Buffer Manager’a iletir (sayfa bellekte mi? değilse diskten getir).
  4. Sonuçları üst katmanlara iletir.

Ana görevleri:

  • Veri satırlarını ve indeksleri bulmak
  • B-tree yapılarında gezinmek
  • Sorguların veriyle nasıl etkileşim kuracağını belirlemek
  • Insert, Update, Delete, Select işlemlerinde sayfa düzeyinde kontrol sağlamak

Kısaca, Access Methods, SQL Server’da veriye erişimin “arka plan operatörü” gibidir. Sorguların doğru veriye, en doğru yoldan ulaşmasını sağlar.


 c. Buffer Manager
Disk üzerindeki verilere hızlı erişim için bellek kullanır.  Resimde de dikkat edilirse veriler plan cache’de yoksa disk üzerinden verileri alır. Veriler cache üzerindeyse direk alır işlemlerine devam etmektedir. Eğer veri tampon bellekte (RAM) yoksa, Buffer Manager, Access Methods aracılığıyla diskteki ilgili sayfayı (page) bulur ve belleğe (buffer pool) yükler. SQL Server’da veri  8 KB’lik sayfalar halinde saklanır. Buffer Manager, veriyi genelde Data Files (MDF/NDF) adı verilen fiziksel veri dosyalarından alır. Eğer yapılan işlem bir güncelleme veya ekleme işlemi ise, bu işlemle ilgili veriler aynı zamanda Transaction Log (LDF) dosyasına kaydedilir. Ancak Buffer Manager genelde okuma işlemleri için veriyi doğrudan veri dosyalarından alır. Güncellenen veriler, önce tampon bellekte işlenir ve daha sonra diske kaydedilir.

Buffer pool sql server’ın belleği nasıl kullandığını kontrol eden üst düzey bir yöneticidir. Data Cache,Plan Cache,Log Cache yapılarını içerir.

Buffer Cache: Sen SELECT * FROM Products dediğinde, bu veri diskte duruyorsa, SQL Server onu RAM’e alır ki erişim hızlı olsun. Buffer Manager devreye girer. Buffer Manager: Bu RAM alanına tampon bellek (buffer cache) denir.“ Bu veri bellekte var mı?” diye kontrol eder. Yoksa, diskten okuyup RAM’e (buffer pool’a) getirir. Getirilen veri bir süre RAM’de kalır (çünkü tekrar kullanılabilir).

Veri ve indeks sayfalarının RAM’de tutulduğu alandır. Diskten okunan veri sayfaları burada saklanır. Sık erişilen sayfalar bellekte tutulur, nadiren erişilenler LRU (Least Recently Used) algoritmasıyla çıkarılır. Buffer Manager RAM’i (belleği) yönetir. Daha doğrusu, SQL Server’ın verileri RAM’e (yani buffer pool) nasıl getirip nasıl yöneteceğini kontrol eden modüldür.


Data Cache : Sık kullanılan veriler burada tutulur. Sadece veri sayfalarını tutan kısımdır. Buffer Manager, diskteki bu veriyi RAM’e taşır. Böylece sonraki erişimler için veri tampon bellekte hazır tutulur. Buffer Pool’un bir parçasıdır. Gerçek kullanıcı verilerinin (tablolar, indeksler vb.) tutulduğu yerdir. Sorgular çalıştığında buradan veri çekilir.


Dirty Pages: Değiştirilen ancak henüz diske yazılmamış sayfaları ifade eder. Eğer veriler üzerinde bir değişiklik yapılırsa, bu değişiklik tampon bellekte saklanır ve bu veriler Dirty Page (Kirli Sayfa) olarak işaretlenir. Bu sayfalar, SQL Server’ın arka planda çalışan Checkpoint işlemi sırasında diske yazılır. Değiştirilmiş ama henüz diske yazılmamış sayfalardır. Buffer Manager, bu sayfaları Checkpoint ya da Lazy Writer yardımıyla diske yazar.

 Plan Cache
Sorgular için oluşturulan sorgu planlarını saklar. Aynı sorgu tekrar çalıştırıldığında performansı artırmak için bu planı kullanır. SQL Server’ın çalıştırılabilir sorgu planlarını sakladığı alandır. Bu da bellek içinde yer alır ama Buffer Manager değil, Memory Manager tarafından daha çok kontrol edilir. Yine de, dolaylı olarak Buffer Manager ile ilişkisi vardır çünkü bellek yönetimi bütüncül yapılır.

Kısacası Buffer Manger fiziksel veriye erişimi hızlandırır. Plan Cache ise sorgu işleme süresini hızlandırır.

Not:  Log Cache SQL Server’ın bellek yönetimi sisteminde kullanılan bir yapı olup, Transaction Log  ile ilgili işlemlerin geçici olarak bellekte tutulduğu alandır. SQL Server, yapılan tüm veri değişikliklerini önce Transaction Log’a yazar. Log Cache, bu süreçte kritik bir rol oynar.  Disk üzerindeki Transaction Log dosyasına (LDF) yazılmadan önce, işlem logları Log Cache üzerinde tutulur. Bu, işlem performansını artırır çünkü belleğe yazma işlemi diske yazmaktan çok daha hızlıdır. Özellikle Durability (Kalıcılık) kuralını garanti etmek için, bir işlem tamamlanmadan önce ilgili log kaydı mutlaka diske yazılır (Log Flush). Ancak, geçici süreliğine bu log kayıtları bellekte (Log Cache’de) saklanır.  Log Cache, birden fazla işlem kaydını toplar ve bunları toplu olarak diske yazar.  Bu, disk I/O (Input/Output) yükünü azaltır ve SQL Server performansını artırır. Bir işlem başladığında, yapılan veri değişiklikleriyle ilgili log kayıtları Log Cache’e eklenir. Herhangi bir veri değişikliği (INSERT, UPDATE, DELETE vb.) Log Cache’de bir kayıt oluşturur. Örneğin, bir satır güncellendiğinde, eski ve yeni veriyle ilgili bilgiler log kaydı olarak saklanır.  Bir işlem COMMIT edildiğinde, Log Cache’deki log kaydı Transaction Log dosyasına (LDF) yazılır (Log Flush işlemi). Eğer işlem başarısız olursa (örneğin, bir hata veya ACID kurallarının ihlali nedeniyle), Log Cache’deki ilgili log kaydı, işlemi geri almak (rollback) için kullanılır. Log cache’in en önemli avantajı her bir işlem için diske yazma yapmak yerine log kayıtlarını toplar ve toplu yazım (batch write) yapar. Sistem çökmesi durumunda, Log Cache ve Transaction Log birlikte çalışarak işlemleri geri alma veya tamamlama sürecini hızlandırır.

Lock Manager: Bütün lock çeşitleri burada yönetilir. 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. Bu iki kavram storage engine içerisinde bulunan yapılardır.


 6. Fiziksel Depolama
 Transaction Log:  İşlemlerin kaydını tutar. Veri kurtarma ve geri alma (rollback) işlemleri için kullanılır.
 Data File: Tablolar, dizinler ve diğer veri yapıları fiziksel olarak burada saklanır.


 SQL Server İşleyişi (Genel Akış)
1. İstemci bağlantısı: SQL Server Network Interface, istemciden sorguyu alır.
2. Protokol katmanı: Sorgu, TDS protokolü aracılığıyla işlenir.
3. Relational Engine:
 Sorgu analiz edilir (CMD Parser).
 Optimizasyon yapılır (Optimizer).
 Sorgu yürütülür (Query Executor).
4. Storage Engine:
 Verilere erişilir ve işlem gerçekleştirilir.
 Buffer Manager, veriyi tampon belleğe yükler ve hızlı işlem yapılmasını sağlar.
5. Sonuç: İstemciye yanıt döner.

SQLOS: SQLOS, SQL Server’a özgü tüm işletim sistemi kaynaklarını yöneten katmandır. 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ı. 


Bu mimari, SQL Server’ın yüksek performans ve veri tutarlılığı sunmasını sağlayan en önemli yapı taşlarını içerir. Bu makalede sql server konusunu detaylı bir şekilde görmüş olduk. Başka bir makalede görüşmek dileğiyle..

“De ki: Hiç bilenlerle bilmeyenler bir olur mu?”Zümer sûresi-9




Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir