İçeriğe geç
Anasayfa » SQLServer – Execution Plan Nedir?

SQLServer – Execution Plan Nedir?


SQL Server’daki execution planlar ile ilgili derinlemesine detaylara geçmeden önce, query optimizer aracının nasıl çalıştığını temel düzeyde anlamak faydalı olacaktır.

SQL Server, maliyet tabanlı sorgu optimizasyonu (cost-based query optimizer) kullanır. Optimizasyon süreci, kullanılan sütunlara ve olası indekslere ilişkin istatistiklere dayanarak birden fazla planın maliyetini hesaplar. Bu bilgiler doğrultusunda her plan için bir toplam maliyet belirlenir. Karmaşık sorguların binlerce olası yürütme planı olabilir. Ancak, query optimizer tüm planları incelemez; bunun yerine, performans açısından iyi olabilecek planları belirlemek için heuristik(sezgisel) yöntemler kullanır. Son olarak, değerlendirdiği planlar arasından en düşük maliyetli olanı seçer. Akıllardaki o soru 🙂 Peki sezgi işlemini neye göre yapar? Cevap basit İstatistikler.

Query Optimizer maliyet tabanlı olduğu için, karar verme sürecine girdi sağlayan bilgilerin doğru olması önemlidir. SQL Server, sütunlardaki verilerin dağılımını izlemek için istatistikler oluşturur ve bu istatistiklerin güncel tutulması gerekir. Aksi takdirde, optimal olmayan yürütme planları oluşturulabilir. SQL Server, veriler tabloda değiştikçe istatistikleri otomatik olarak günceller. Ancak, hızlı değişen veriler için daha sık güncelleme gerekebilir. Plan oluşturma sürecinde kullanılan diğer faktörler arasında veritabanının uyumluluk seviyesi, istatistiklere dayalı satır tahminleri ve kullanılabilir indeksler bulunur.

Şimdi bir sorgunun SQLServer’da kaç adımda çalıştığını ve nelerin kontrol edildiğini inceleyelim.

1. Sorgunun Ayrıştırılması (Parsing)

Sorgu, SQL Server motoru tarafından öncelikle sözdizimi açısından doğrulanır. Bu adımda, sorgunun dil kurallarına uygun olup olmadığını kontrol eden bir parse tree (ayrıştırma ağacı) oluşturulur. Bu ağaç, sorgudaki tüm elemanları (tablolar, sütunlar, operatörler) ve bunların ilişkilerini temsil eder. Eğer sözdiziminde bir hata varsa, süreç bu aşamada sona erer ve bir hata iletisi döndürülür.

2. Algebrizer Aşaması

Ayrıştırma işlemi tamamlandıktan sonra sorgu, Algebrizer adlı bir bileşene gönderilir. Bu adımda:

  • Tabloların ve sütunların varlığı kontrol edilir. (Örneğin, sorguda bahsedilen sütun veya tablo gerçekten var mı?)
  • Sorguda kullanılan veri türleri analiz edilir ve doğrulanır.
  • Sorgu yapısında ilişkilendirme işlemleri yapılır, böylece daha ileri optimizasyon işlemlerine hazırlık yapılır.
    Sonuç olarak, query processor tree (sorgu işleyici ağacı) adı verilen yapı oluşturulur.

3. Plan Önbelleği Kontrolü

SQL Server, sorgu planlarının oluşturulmasının yüksek CPU maliyeti doğurabileceğini göz önünde bulundurarak, önceden oluşturulan yürütme planlarını saklamak için bir plan önbelleği kullanır.

  • Eğer aynı sorgu daha önce çalıştırılmışsa, hash değeri karşılaştırılarak mevcut yürütme planı bulunabilir.
  • Mevcut bir plan varsa, bu plan doğrudan kullanılır ve yeni bir plan oluşturma gereği ortadan kalkar.

4. Yeni Plan Oluşturulması

Plan cache’de uygun bir execution plan bulunamazsa, query optimizer devreye girer:

  • Optimizer, mevcut istatistiklere ve indeks bilgilerine dayanarak çeşitli yürütme planları üretir.
  • Her bir planın maliyeti hesaplanır (örneğin, okunan veri sayısı, kullanılan bellek miktarı).
  • En düşük maliyetli plan seçilir ve sorgu için yürütme planı olarak belirlenir.

5. Sorgunun Yürütülmesi

Seçilen yürütme planı, SQL Server engine tarafından uygulanır:

  • Bu aşamada, indekslere erişim, veri sıralama, gruplama gibi işlemler gerçekleştirilir.
  • Planın belirttiği sırayla işlemler gerçekleştirilir ve nihayetinde sonuçlar kullanıcıya döndürülür.

Bir yanıt yazın

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