Sorgu yürütme planı: veritabanı sorguyu nasıl çalıştırır?
Execution plan, veritabanının bir sorguyu hangi adımlarla çalıştıracağını gösterir. EXPLAIN ANALYZE ile taramalar, birleştirmeler ve maliyet nasıl okunur?
Sorgu yürütme planı nedir?
Sorgu yürütme planı (execution plan), bir SQL sorgusu çalıştırılmadan önce veritabanının sorguyu hangi adımlarla ve hangi sırayla yürüteceğini gösteren ağaç yapısındaki çıktıdır. SQL "ne istediğinizi" söyler; plan ise veritabanının bunu "nasıl getireceğini" gösterir. Hangi tabloların nasıl taranacağı, hangi indeksin kullanılacağı, tabloların hangi yöntemle birleştirileceği ve sonucun nasıl sıralanacağı bu plandadır.
Sorgu optimizasyonu, yavaş bir sorguda bu planı okuyup darboğazı bulma ve düzeltme işidir. Planı okuyabilmek, tahmin yürütmek yerine kanıtla çalışmayı sağlar.
Plan nasıl oluşur ve nasıl görülür?
Veritabanındaki sorgu planlayıcısı (query planner), aynı sonucu verecek birden fazla çalıştırma yolunu değerlendirir. Tablo istatistiklerine bakarak her yolun tahmini maliyetini hesaplar ve en düşük maliyetliyi seçer. Maliyet, birimsiz bir tahmindir; ayrı sorgular arasında doğrudan zamanla eşleştirilmez.
PostgreSQL'de planı EXPLAIN komutu gösterir; EXPLAIN ANALYZE ise sorguyu gerçekten çalıştırıp tahminle gerçek değerleri yan yana verir. Bu yüzden veriyi değiştiren bir sorguda EXPLAIN ANALYZE dikkatle kullanılır. MySQL ve SQL Server da benzer araçlar sunar; SQL Server'da plan genellikle grafik olarak izlenir.
Örnek bir komut:
EXPLAIN ANALYZE SELECT * FROM siparisler WHERE durum = 'beklemede';
Plan çıktısında hangi işlemler görülür?
Plan, alt adımların birleştiği bir ağaçtır ve genelde en içteki adımdan dışa doğru okunur. Sık karşılaşılan düğümler:
- Seq Scan: tablonun tamamı baştan sona taranır. Küçük tablolarda ya da çok sayıda satır döndüren sorgularda normaldir; büyük tabloda seçici bir filtreyle birlikte görülüyorsa indeks eksik olabilir.
- Index Scan: indeks üzerinden ilgili satırlara gidilir. Seçici filtrelerde genellikle daha hızlıdır.
- Bitmap Scan: indeksten gelen satır konumları toplanıp tablodan toplu okunur; orta seçicilikte kullanılır.
- Nested Loop, Hash Join, Merge Join: tabloları birleştirme yöntemleridir. Nested Loop küçük girişlerde iyi çalışır; Hash Join büyük ve sıralanmamış veride, Merge Join önceden sıralı veride avantajlıdır.
- Sort ve Aggregate: sıralama ve gruplama adımlarıdır; bellek yetmezse diske taşabilir.
Planı okurken nelere bakılır?
Yavaşlığın kaynağını bulmak için şu noktalara bakılır:
- Tahmini satır sayısı ile gerçek satır sayısı arasında büyük fark. Bu, istatistiklerin eskidiğine veya planlayıcının veriyi yanlış tahmin ettiğine işaret eder; yanlış tahmin yanlış yöntem seçimine yol açar.
- Gerçek süresinin büyük kısmını harcayan düğüm. Tüm sorguyu değil, en pahalı adımı iyileştirmek yeterli olur.
- Büyük bir tabloda filtre sonrası az satır döndüren Seq Scan.
- Çok sayıda kez tekrarlanan iç döngü; döngü sayısı yüksekse küçük bir gecikme bile toplamda büyür.
- Planlama süresi ve yürütme süresi ayrımı; ilki kısa sorgularda göz ardı edilmemelidir.
Örneğin siparişler tablosunda durum alanına göre arama yavaşsa ve plan büyük bir Seq Scan gösteriyorsa, durum sütununa indeks eklemek ve planı yeniden almak mantıklı ilk adımdır.
Sık yapılan hatalar
En yaygın hata, plan okumadan indeks eklemektir. Her indeks yazma işlemlerini yavaşlatır ve yer kaplar; bazen planlayıcı indeksi kullanmayı seçmez. Küçük veriyle yapılan testte planın iyi görünmesi de yanıltıcıdır, çünkü plan veri büyüklüğüne göre değişir. Üretim benzeri veriyle denemek gerekir.
Bir başka tuzak, sorguyu bir kez ölçüp karar vermektir. Önbellek etkisi ilk çalıştırmayı yavaş, sonrakileri hızlı gösterebilir. Ayrıca plan, veritabanı sürümü, istatistikler ve parametre değerleriyle zaman içinde değişebilir; kritik sorgular için yeni sürümden sonra plan gerilemesi izlenir.
Yürütme planı ile diğer kavramların farkı
Yürütme planı ile indeks aynı şey değildir: indeks bir veri yapısıdır, plan ise o indeksin kullanılıp kullanılmayacağını gösteren karar çıktısıdır. Yavaş sorgu günlüğü hangi sorgunun yavaş olduğunu söyler; plan ise neden yavaş olduğunu açıklar. Veri ambarlarında bu fikir sorgu profili (query profile) adıyla karşılaşılır ve sorguyu çalıştırmanın maliyetiyle doğrudan ilişkilidir.
Mindset programlarında nerede çalışılır?
SQL Performans Ayarı ve Sorgu Optimizasyonu programı performans ölçümü ve yavaş sorgu tespiti, sorgu planı analizi, indeks stratejisi, birleştirme ve toplama optimizasyonu ile regresyon koruması konularını işler. Rapor ve uygulama sorgularının yavaşladığı veritabanı yöneticisi, geliştirici ve veri analisti ekiplerine uygundur.
Veri Ambarı Maliyet ve Sorgu Optimizasyonu programı aynı yaklaşımı bulut veri ambarlarına taşır ve pahalı sorguların tespitine odaklanır.
İlgili Mindset programı
SQL Performans Ayarı ve Sorgu Optimizasyonu
Sık sorulan sorular
EXPLAIN ile EXPLAIN ANALYZE arasındaki fark nedir?
EXPLAIN yalnızca planlayıcının tahmini planını gösterir ve sorguyu çalıştırmaz. EXPLAIN ANALYZE ise sorguyu gerçekten çalıştırır ve her adımın gerçek süresini ile gerçek satır sayısını tahminlerle yan yana verir. Gerçek davranışı görmek için ikincisi gerekir, ancak veriyi değiştiren sorgularda dikkatli kullanılmalıdır.
Plan Seq Scan gösteriyorsa mutlaka indeks eksik midir?
Hayır. Küçük tablolarda ya da sorgu tablonun büyük bir kısmını döndürüyorsa tam tarama indeksten daha hızlı olabilir. Seq Scan yalnızca büyük bir tabloda az sayıda satır aranırken görülüyorsa şüphe doğurur. Karar vermeden önce tahmini ve gerçek satır sayısı karşılaştırılır.
Maliyet değeri saniye cinsinden süre midir?
Hayır. Planlayıcının maliyeti birimsiz, göreli bir tahmindir ve doğrudan süreye çevrilmez. Aynı sorgunun farklı plan seçeneklerini karşılaştırmak için kullanılır. Gerçek süreyi görmek için EXPLAIN ANALYZE çıktısındaki gerçek zaman bilgisine bakılır.
Plan neden bazen aynı sorguda değişir?
Planlayıcı tablo istatistiklerine, veri miktarına ve sorgu parametrelerine göre karar verir. Tabloya çok sayıda satır eklendiğinde ya da istatistikler güncellendiğinde farklı bir yol daha ucuz görünebilir. Bu yüzden önemli sorgular için planın düzenli olarak izlenmesi gerekir.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Mühendisliği ve MLOps