Provided by:
manpages-tr_1.0.5.1-1.1_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