DBAtlas · Veritabanı operasyon atlası

Partition pruning'in (planlama ve çalışma zamanı) gerçekten çalıştığını doğrula

PostgreSQLPartition

Komut

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ç.

DBAtlas'ta aç →

İlgili