Partition pruning'in (planlama ve çalışma zamanı) gerçekten çalıştığını doğrula
PostgreSQLPartitionKomut
SHOW enable_partition_pruning;
-- Planlama zamanı pruning: planda yalnızca ilgili partition görünmeli
EXPLAIN (COSTS OFF)
SELECT count(*) FROM satislar WHERE tarih >= DATE '2026-03-01' AND tarih < DATE '2026-04-01';
-- Çalışma zamanı pruning: generic plan / parametreli sorgu, "Subplans Removed: N"
PREPARE q_satis(date) AS SELECT count(*) FROM satislar WHERE tarih = $1;
SET plan_cache_mode = force_generic_plan;
EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF) EXECUTE q_satis('2026-03-15');
RESET plan_cache_mode;
DEALLOCATE q_satis;
-- Pruning'i bozan yazım: anahtar kolona fonksiyon uygulamak tüm partition'ları taratır
EXPLAIN (COSTS OFF)
SELECT count(*) FROM satislar WHERE date_trunc('month', tarih) = DATE '2026-03-01';Ne yapar?
Planlama zamanı pruning'i, generic plan ile çalışma zamanı pruning'ini ('Subplans Removed: N') ve partition anahtarına fonksiyon uygulandığında pruning'in nasıl kaybolduğunu karşılaştırmalı gösterir.
Ne zaman kullanılır?
Partition'lı tabloda sorgular beklenenden yavaşsa, planda tüm partition'lar taranıyorsa veya ORM/prepared statement kullanan uygulamalarda.
Dikkat
Partition anahtarına fonksiyon veya tip dönüşümü uygulamak (date_trunc(tarih), tarih::text) pruning'i devre dışı bırakır; koşulu anahtar üzerinde aralık olarak yaz. Generic planda pruning yürütme başında yapılır ve yalnızca 'Subplans Removed' satırıyla görünür; now() gibi STABLE ifadelerde ANALYZE'sız EXPLAIN'de de görünür. enable_partition_pruning = off ise hiç pruning yapılmaz. Çok sayıda partition'da Planning Time'ı da ölç.
İlgili
- Aylık range partition'lı tablo oluştur (partition'ları döngüyle üret)
- Hazırlanmış tabloyu partition olarak kısa lock ile ekle (ATTACH PARTITION)
- Eski partition'ı canlı trafiği bloklamadan ayır (DETACH CONCURRENTLY)
- Default partition tuzağı: yeni partition 'would be violated by some row' hatası verirse
- pg_partman ile partition oluşturma ve retention'ı otomatikleştir