Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
Katılım
7 Nis 2025
Konular
367
Mesajlar
780
Çözümler
1
Tepkime puanı
121
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
Yazdığınız bir SQL sorgusu doğru sonucu döndürebilir, ancak büyük bir veritabanında bu sorgunun çalışması dakikalar hatta saatler sürebilir. Performans sorunları, kullanıcı deneyimini olumsuz etkiler ve uygulama genelinde darboğazlara yol açabilir. Veritabanı performansını optimize etmenin temel yollarından biri, veritabanı yönetim sisteminin (DBMS) sorgularınızı nasıl çalıştırdığını anlamaktır. Bu da Sorgu Yürütme Planları sayesinde mümkündür.

Sorgu Yürütme Planı Nedir?

Sorgu Yürütme Planı (Execution Plan), DBMS'in belirli bir SQL sorgusunu çalıştırmak için izleyeceği adım adım yolu gösteren bir plandır. Sorgu Optimizleyici (Query Optimizer) adı verilen DBMS'in bir bileşeni, yazdığınız SQL sorgusunu analiz eder ve veritabanının istatistiklerini, indeksleri ve diğer faktörleri kullanarak sorguyu en verimli şekilde çalıştırmanın farklı yollarını değerlendirir. Bu değerlendirme sonucunda en maliyetli (en hızlı) planı seçer ve bu planı size yürütme planı olarak sunar.

Yürütme planı, veriye nasıl erişileceğini (tablo tarama mı, indeks kullanımı mı?), tabloların hangi sırayla birleştirileceğini (JOIN sırası), hangi JOIN algoritmasının kullanılacağını (Nested Loop, Hash Match, Merge Join vb.), verinin nasıl sıralanacağını ve gruplandırılacağını ve sorgunun diğer adımlarını detaylandırır.

Yürütme Planı Nasıl Elde Edilir?

Farklı DBMS'ler yürütme planlarını elde etmek için farklı komutlar veya araçlar sunar:

  • MySQL ve PostgreSQL: Sorgunun başına EXPLAIN anahtar kelimesini ekleyerek planı metin formatında görebilirsiniz. Örneğin:
    Kod:
    EXPLAIN SELECT * FROM Musteriler WHERE Sehir = 'Ankara';
  • Microsoft SQL Server: SQL Server Management Studio (SSMS) gibi araçlarda sorguyu çalıştırırken "Display Actual Execution Plan" seçeneğini kullanabilir veya SET SHOWPLAN_ALL ON; gibi komutları kullanabilirsiniz. Bu, genellikle görsel bir plan sunar ve daha kolay okunabilir.
  • Oracle: EXPLAIN PLAN FOR komutunu kullanarak bir plan oluşturup, daha sonra bu planı sorgulayarak görebilirsiniz.
Bu komutları kullandığınızda, sorgunun kendisi çalıştırılmaz (bazı "gerçek" plan seçenekleri hariç), sadece nasıl çalıştırılacağının planı gösterilir.

Yürütme Planında Nelere Dikkat Edilmeli?

Yürütme planları, özellikle karmaşık sorgular için ilk başta biraz kafa karıştırıcı görünebilir. Ancak bazı anahtar öğeler size performans sorunlarının nerede olduğunu gösterebilir:

  1. Maliyetler (Costs): Planın farklı operatörleri veya adımları için tahmini maliyet yüzdelerini gösterir. Yüksek maliyetli adımlar genellikle performansı etkileyen noktalardır.
  2. Erişim Yöntemleri (Access Methods):
    • Table Scan / Full Scan: DBMS'in bir tabloyu baştan sona okuduğu anlamına gelir. Büyük tablolar için genellikle çok yavaştır. İndeksleme eksikliği veya uygun WHERE koşulunun olmaması durumunda görülür.
    • Index Seek: İndeksi kullanarak belirli satırlara doğrudan erişildiği anlamına gelir. Çok hızlıdır ve genellikle istenen erişim yöntemidir. Uygun indekslerin ve WHERE koşullarının kullanıldığını gösterir.
    • Index Scan: İndeksin tamamının veya bir kısmının sıralı olarak okunduğu anlamına gelir. Table Scan'den daha iyi olsa da, Index Seek kadar hızlı değildir.
  3. JOIN Tipleri: DBMS'in tabloları birleştirmek için hangi algoritmayı seçtiğini gösterir (Nested Loop, Hash Match, Merge Join). Farklı algoritmalar, birleştirilen tabloların boyutuna ve indeks durumuna göre farklı performans özelliklerine sahiptir. Optimizleyici en uygun olanı seçmeye çalışır, ancak bazen indeks eksikliği veya istatistiklerin güncel olmaması yanlış seçime yol açabilir.
  4. Sort Operatörleri: Sorgu sonuçlarının sıralandığı veya GROUP BY için verinin hazırlandığı adımlardır. Büyük veri kümeleri üzerinde sıralama maliyetli olabilir. Uygun indekslerin veya sorgu yeniden yazımının sıralama maliyetini azaltıp azaltmayacağını değerlendirebilirsiniz.
  5. Geçici Tablolar (Temporary Table) / Çalışma Alanı (Worktable): DBMS'in sorguyu çalıştırmak için geçici olarak disk veya bellekte veri depolaması gerekebilir. Bu, sorgunun karmaşık olduğunu ve ek maliyet getirdiğini gösterebilir.
Performans Sorunlarını Belirleme ve Çözme:

  • Yüksek Maliyetli Operatörleri Tespit Edin: Planda en yüksek maliyet yüzdesine sahip adımlara odaklanın.
  • Table Scan Kontrolü: Büyük tablolar üzerinde Table Scan görüyorsanız, ilgili sütunlarda indeks eksikliği olabilir veya WHERE/JOIN koşullarınız indeks kullanımına uygun olmayabilir.
  • İndeks Kullanımını Değerlendirin: Optimizleyicinin beklediğiniz indeksleri kullanıp kullanmadığına bakın. İstatistikler güncel değilse veya indeksler parçalanmışsa (fragmented), indeksler kullanılmayabilir.
  • JOIN Sırası ve Tipi: Optimizleyicinin seçtiği JOIN sırası veya tipi ideal olmayabilir. Nadiren de olsa, JOIN ipuçları (hints) kullanarak optimizleyiciye yönlendirme yapabilirsiniz (ancak bu genellikle önerilmez).
  • Sorguyu Yeniden Yazma: Bazen aynı sonucu veren, ancak optimizleyicinin daha verimli bir plan oluşturmasına olanak tanıyan farklı SQL yazım şekilleri olabilir (örneğin, alt sorgu yerine JOIN kullanmak veya tam tersi).
Sorgu yürütme planlarını yorumlama, biraz deneyim gerektiren bir beceridir. Ancak performans sorunlarıyla karşılaştığınızda, bu planlar size sorunun nerede başladığına dair çok değerli ipuçları sunar.

Bu bölümde sorgu yürütme planlarının ne olduğunu, nasıl elde edileceğini ve temel olarak nasıl yorumlanacağını ele aldık. Performans optimizasyonu geniş bir konudur ve yürütme planları bu konunun sadece bir parçasıdır.

Bir sonraki bölümde, SQL'de satırlar arası hesaplamalar yapmanızı sağlayan ve karmaşık raporlama görevlerini kolaylaştıran Pencere Fonksiyonları (Window Functions) konusuna değinebiliriz.


 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri