CB DIGITAL
Tüm Makalelere Dön
Veritabanı & SQL
19 Mart 2026

PostgreSQL EXPLAIN ANALYZE ile Yavaş Sorgu Tespiti ve İndeksleme Nasıl Yapılır?

Cengiz Bozdemir
Cengiz BozdemirKurumsal Yazılım Mimarı
PostgreSQL EXPLAIN ANALYZE ile Yavaş Sorgu Tespiti ve İndeksleme Nasıl Yapılır?

📌 Rehber Özeti & Hedef Çıktı

Milyonlarca satırlık tablolarda saniyeler süren yavaş SQL sorgularını EXPLAIN ANALYZE ile analiz ederek B-Tree veya GIN indeksleri ile milisaniyelere düşürme rehberi.

1. Giriş ve Karşılaşılan Temel Zorluklar

Veritabanı sunucusunun yüksek CPU ve bellek tüketmesinin temel sebebi genellikle eksik veya yanlış indekslenmiş sorgulardır. 'Sequential Scan' (tüm tabloyu baştan sona tarama) felakettir.

Modern kurumsal yazılım mimarisinde bu adımı doğru tasarlamak; hem uygulamanın bakım maliyetini (maintainability) düşürür hem de gelecekteki ölçekleme (scaling) süreçlerinde refactor ihtiyacını en aza indirir. Bu rehberde, sektörde kabul görmüş standartlar ışığında adım adım uygulamayı ele alıyoruz.

2. Ortam Hazırlığı ve Gerekli Bağımlılıklar

Geliştirmeye başlamadan önce sistem ortamınızın ve ilgili paketlerin hazır olduğundan emin olmalısınız. Terminalinizde aşağıdaki komutları çalıştırarak ilgili yapılandırmayı tamamlayın:

  • Adım: pgAdmin, DBeaver veya psql terminaline bağlanın.
  • Adım: İncelenecek sorgunun başına 'EXPLAIN (ANALYZE, BUFFERS)' ifadesini ekleyin.

3. Uygulama Mimarisi ve Kod Örneği

Aşağıdaki kod bloğunda, temiz kod (Clean Code) prensiplerine ve SOLID standartlarına uygun olarak tasarlanmış örnek implementasyonu inceleyebilirsiniz:

-- 1. Yavaş sorgunun analiz edilmesi
EXPLAIN (ANALYZE, BUFFERS)
SELECT id, user_id, total_amount, status, created_at
FROM orders
WHERE status = 'completed'
  AND created_at >= '2026-01-01'
ORDER BY created_at DESC
LIMIT 50;

-- 2. Bileşik (Composite) İndeksin Oluşturulması
CREATE INDEX CONCURRENTLY idx_orders_status_created_at
ON orders (status, created_at DESC)
INCLUDE (total_amount);

4. Kod Analizi ve Çalışma Mantığı

EXPLAIN çıktısında 'Seq Scan' görülüyorsa veritabanı tüm diski tarıyor demektir. 'Index Scan' veya 'Index Only Scan' ise doğrudan B-Tree yapraklarına erişildiğini gösterir. CONCURRENTLY bayrağı canlı tabloda yazma işlemlerini kilitlemeden indeks oluşturur.

Yukarıdaki implementasyonda dikkat edilmesi gereken en kritik husus, işlemlerin bağımsız (decoupled) ve test edilebilir şekilde katmanlara ayrılmış olmasıdır. Bu yaklaşım, birim testlerin (Unit Tests) ve entegrasyon testlerinin hızlıca yazılabilmesine olanak tanır.

5. Performans ve Güvenlik İpuçları

Canlı üretim (production) ortamında sistemin kararlı çalışması için aşağıdaki pratikleri mutlaka dikkate almalısınız:

  • WHERE koşulunda eşitlik (=) aranan alanları bileşik indeksin başına, aralık (>=, <=) arananları sonuna koyun.
  • Yalnızca belirli durumlar için 'Partial Index' (örn: WHERE is_active = true) kullanarak disk tasarrufu sağlayın.
  • İndekslerin kullanılabilmesi için kolon üzerinde fonksiyon (örn: LOWER(email)) çalıştırmaktan kaçının veya fonksiyonel indeks kurun.

6. En Sık Yapılan Hatalar ve Hata Ayıklama (Troubleshooting)

Her kolona rastgele indeks eklemek SELECT sorgularını hızlandırsa da INSERT ve UPDATE işlemlerini dramatik biçimde yavaşlatır.

Eğer beklenmedik bir hata ile karşılaşırsanız; öncelikle log dosyalarını incelemeli, ortam değişkenlerinin (.env) doğru tanımlandığını doğrulamalı ve önbellek (cache) mekanizmalarını temizleyerek sistemi yeniden başlatmalısınız.

7. Sonuç ve Mimari Değerlendirme

Veritabanı optimizasyonu, donanım yükseltmeden (scaling up) önce kurumsal sistemlerin ilk başvurması gereken en karlı performans yatırımıdır.

Cengiz Bozdemir olarak 18 yılı aşkın kurumsal yazılım mimarlığı deneyimimle tavsiyem; sistem tasarımında her zaman sürdürülebilirlik, güvenlik ve yüksek eşzamanlılık (high concurrency) hedeflerini ön planda tutmanızdır. Kurumsal projelerinizde özel mimari danışmanlık veya uçtan uca yazılım geliştirme desteği için bizimle iletişime geçebilirsiniz.

#postgresql#explain analyze#sql#indexing#database performance#query optimization
Cengiz Bozdemir

Cengiz Bozdemir

Kurumsal Yazılım Mimarı & Full-Stack Geliştirici

İşletmeniz veya girişiminiz için yüksek performanslı sistemler, özel yazılımlar ve yapay zeka otomasyonları inşa ediyorum.

KURUMSAL YAZILIM MİMARİSİ18+ YILLIK TECRÜBEPHP 8.3 & LARAVELFLUTTER & MOBİL ÇÖZÜMLERNEXT.JS & REACT UYGULAMALARIYAPAY ZEKA & OTOMASYONE-TİCARET & PAZARYERİ ENTEGRASYONUCENGİZ BOZDEMİRCBDIGITALKURUMSAL YAZILIM MİMARİSİ18+ YILLIK TECRÜBEPHP 8.3 & LARAVELFLUTTER & MOBİL ÇÖZÜMLERNEXT.JS & REACT UYGULAMALARIYAPAY ZEKA & OTOMASYONE-TİCARET & PAZARYERİ ENTEGRASYONUCENGİZ BOZDEMİRCBDIGITALKURUMSAL YAZILIM MİMARİSİ18+ YILLIK TECRÜBEPHP 8.3 & LARAVELFLUTTER & MOBİL ÇÖZÜMLERNEXT.JS & REACT UYGULAMALARIYAPAY ZEKA & OTOMASYONE-TİCARET & PAZARYERİ ENTEGRASYONUCENGİZ BOZDEMİRCBDIGITALKURUMSAL YAZILIM MİMARİSİ18+ YILLIK TECRÜBEPHP 8.3 & LARAVELFLUTTER & MOBİL ÇÖZÜMLERNEXT.JS & REACT UYGULAMALARIYAPAY ZEKA & OTOMASYONE-TİCARET & PAZARYERİ ENTEGRASYONUCENGİZ BOZDEMİRCBDIGITAL
© 2026 CB DIGITAL Tüm hakları saklıdır.