Provided by: manpages-tr_1.0.5.1-2_all 

İSİM
EXPLAIN - bir cümlenin icra planını gösterir
KULLANIM
EXPLAIN [ ANALYZE ] [ VERBOSE ] cümle
AÇIKLAMA
Bu komut, belirtilen cümle için PostgreSQL planlamacısının ürettiği icra planını gösterir. İcra planı
cümle tarafından tablolara nasıl başvurulduğunu gösterir. Bu işlem, düz sıralı tarama, indeksli tarama,
v.s. şeklinde yapılır. Ayrıca, eğer çok sayıda tabloya başvuruluyorsa, her tablodan gerekli satırların
birarada alınması için kullanılacak katılım algoritmasını da gösterir.
Çıktının en önemli parçası, cümlenin icrasının ne kadar süreceği ile ilgili planlamacının tahminde
bulunmasıyla saptanan, tahmini cümle icra maliyetidir (disk sayfası cinsinden ölçülür). Aslında, iki sayı
gösterilir: başlangıçtan ilk satır döndürülene kadar geçen süre ve tüm satırlar döndürülünceye kadar
geçecek toplam süre. Çoğu sorgu için, toplam süre sorun değildir, ama EXISTS'li bir alt sorgunun varlığı
gibi durumlarda planlamacı en küçük toplam süreye değil en küçük başlangıç zamanına bakacaktır (icracı
bir satır döndüğünde duracaktır). Ancak, döndürülecek satır sayısını LIMIT deyimi ile sınırlarsanız,
planlamacı en ucuz planlama için bir tahminde bulunabilecektir.
ANALYZE seçeneği cümlenin planlamasının yapılmasından başka cümlenin çalıştırılmasını da sağlar. Harcanan
toplam süre her planlama düğümü için ayrı ayrı gösterilir (milisaniye cinsinden). Ayrıca, dönen satır
sayısı da çıktıya eklenir. Bu, planlamacının tahminlerinin tutarlı olup olmadığını görme açısından da
yararlıdır.
Önemli:
ANALYZE kullanıldığında cümlenin çalıştırılacağını unutmayın. EXPLAIN'de kullanıldığında, bir
SELECT cümlesinin döndüreceği çıktı iptal edileceğinden, cümlenin bazı yan etkileri varsa, onları
bilemeyeceksiniz. INSERT, UPDATE, DELETE veya EXECUTE cümleleri üzerinde EXPLAIN ANALYZE
kullanmak ve komutun etkilerinin verinizi etkilememesini isterseniz, şu yaklaşımı
kullanabilirsiniz:
BEGIN;
EXPLAIN ANALYZE ...;
ROLLBACK;
PARAMETRELER
ANALYZE
Cümleyi çalıştırır ve gerçek çalışma sürelerini gösterir.
VERBOSE
Planlama ağacının bir özetini değil dahili gösteriminin tamamını gösterir. Aslında, bu seçenek
sadece hata ayıklama amacıyla yararlıdır. VERBOSE çıktısı explain_pretty_print yapılandırma
değişkeninin değerine bağlı olarak ya cicili bicilidir ya da değildir.
cümle İcra planını görmek istediğiniz bir SELECT, INSERT, UPDATE, DELETE, EXECUTE veya DECLARE cümlesi.
EK BİLGİ
Eniyileyici kullanımı hakkında
http://www.postgresql.org/docs/8.0/static/performance-tips.html#USING-EXPLAIN adresinde daha fazla bilgi
bulabilirsiniz.
PostgreSQL'in sorguları eniyilerken kabul edilebilir kararlar verebilmesi için, ANALYZE komutunun tablo
içindeki verilerin istatistiksel dağılımını kaydetmiş olması gerekir. Bu yapılmazsa (ya da tablo içindeki
verilerin istatistiksel dağılımı son ANALYZE çağrısından sonra çok fazla değişikliğe uğramışsa), tahmini
maliyetler sorgunun gerçek özellikleriyle uyumlu olmayacağı gibi planlamacının ürkütücü bir sorgu
planlaması seçimi yapmasına sebep olabilir.
PostgreSQL 7.3 öncesi, sorgu planı bir NOTICE çıktısı biçimindeydi. Şimdi, bir sorgunun sonucu gibi (tek
sütunluk bir tablo gösterimi olarak) çıktılanmaktadır.
ÖRNEKLER
integer türünde tek bir sütunu olan 10000 satırlık bir tabloya uygulanan basit bir sorgunun planlamasını
görmek için:
EXPLAIN SELECT * FROM foo;
QUERY PLAN
---------------------------------------------------------
Seq Scan on foo (cost=0.00..155.00 rows=10000 width=4)
(1 row)
Eğer bir indeks varsa ve WHERE ile indekslenen bir sorgu kullanırsak, EXPLAIN farklı bir plan
gösterebilir:
EXPLAIN SELECT * FROM foo WHERE i = 4;
QUERY PLAN
--------------------------------------------------------------
Index Scan using fi on foo (cost=0.00..5.98 rows=1 width=4)
Index Cond: (i = 4)
(2 rows)
Bir ortak değer işlevi kullanılan bir sorgunun sorgu planı:
EXPLAIN SELECT sum(i) FROM foo WHERE i < 10;
QUERY PLAN
---------------------------------------------------------------------
Aggregate (cost=23.93..23.93 rows=1 width=4)
-> Index Scan using fi on foo (cost=0.00..23.92 rows=6 width=4)
Index Cond: (i < 10)
(3 rows)
Bir taslak sorgu hazırlarken bunun icra planını görmek için, EXPLAIN EXECUTE kullanımı örneği:
PREPARE query(int, int) AS SELECT sum(bar) FROM test
WHERE id > $1 AND id < $2
GROUP BY foo;
EXPLAIN ANALYZE EXECUTE query(100, 200);
QUERY PLAN
----------------------------------------------------------
HashAggregate (cost=39.53..39.53 rows=1 width=8)
(actual time=0.661..0.672 rows=7 loops=1)
-> Index Scan using test_pkey on test
(cost=0.00..32.97 rows=1311 width=8)
(actual time=0.050..0.395 rows=99 loops=1)
Index Cond: ((id > $1) AND (id < $2))
Total runtime: 0.851 ms
(4 rows)
Şüphesiz burada gösterilen değerler işlenen tabloların gerçek içeriğine bağlıdır. Ayrıca, bu değerler ve
hatta seçilen sorgu stratejisi, planlamacının sürekli geliştirilmesi sebebiyle, PostgreSQL dağıtımları
arasında bile değişiklik gösterebilir. Buna ek olarak, ANALYZE komutu veri istatistiklerini tahmin etmek
için rasgele örnekleme yapar; bundan dolayı, tablo verisinde bir değişiklik olmamış bile olsa, taze bir
ANALYZE çağrısından sonra maliyet tahminleri değişiklik gösterebilir.
UYUMLULUK
SQL standardında EXPLAIN diye bir deyim yoktur.
İLGİLİ BELGELER
ANALYZE [analyze(7)].
ÇEVİREN
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005
PostgreSQL EXPLAIN(7)