Yavaş PostgreSQL sorguları uygulamanızın darboğazı olabilir. EXPLAIN ANALYZE ile sorgu planlarını okumayı öğrenerek saniyeler süren sorguları milisaniyelere indirebilirsiniz.
EXPLAIN ANALYZE Temelleri
-- Sorgu planını ve gerçek çalışma süresini göster EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT u.name, COUNT(p.id) as post_count FROM users u LEFT JOIN posts p ON p.user_id = u.id WHERE u.created_at > '2025-01-01' GROUP BY u.id, u.name ORDER BY post_count DESC LIMIT 10;
Çıktıyı Okuma
- Seq Scan: Tüm tabloyu tarıyor — index ekleyin
- Index Scan: Index kullanıyor — iyi
- Hash Join vs Nested Loop: Büyük tablolarda Hash Join daha hızlı
- actual rows vs estimated rows: Büyük fark varsa ANALYZE çalıştırın
Index Stratejileri
-- Partial index: sadece aktif kullanıcılar için CREATE INDEX idx_users_active ON users(email) WHERE is_active = true; -- Composite index: sık birlikte kullanılan kolonlar CREATE INDEX idx_posts_user_date ON posts(user_id, created_at DESC); -- Expression index: fonksiyon sonuçları için CREATE INDEX idx_users_lower_email ON users(LOWER(email));
pg_stat_statements ile Yavaş Sorguları Bulma
-- En yavaş 10 sorguyu listele SELECT query, calls, mean_exec_time, total_exec_time FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;
Sonuç
EXPLAIN ANALYZE, PostgreSQL optimizasyonunun temel aracı. Düzenli olarak yavaş sorgu loglarını inceleyin, gereksiz Seq Scan'leri index'e dönüştürün ve istatistikleri güncel tutun.