Provided by:
manpages-tr_1.0.5.1-2_all 
ISIM
EXPLAIN - bir cumlenin icra planini gosterir
KULLANIM
EXPLAIN [ ANALYZE ] [ VERBOSE ] c"umle
A,CIKLAMA
Bu komut, belirtilen cumle icin PostgreSQL planlamacisinin urettigi
icra planini gosterir. Icra plani cumle tarafindan tablolara nasil
basvuruldugunu gosterir. Bu islem, duz sirali tarama, indeksli tarama,
v.s. seklinde yapilir. Ayrica, eger cok sayida tabloya basvuruluyorsa,
her tablodan gerekli satirlarin birarada alinmasi icin kullanilacak
katilim algoritmasini da gosterir.
Ciktinin en onemli parcasi, cumlenin icrasinin ne kadar surecegi ile
ilgili planlamacinin tahminde bulunmasiyla saptanan, tahmini cumle icra
maliyetidir (disk sayfasi cinsinden olculur). Aslinda, iki sayi
gosterilir: baslangictan ilk satir dondurulene kadar gecen sure ve tum
satirlar dondurulunceye kadar gececek toplam sure. Cogu sorgu icin,
toplam sure sorun degildir, ama EXISTS'li bir alt sorgunun varligi gibi
durumlarda planlamaci en kucuk toplam sureye degil en kucuk baslangic
zamanina bakacaktir (icraci bir satir dondugunde duracaktir). Ancak,
dondurulecek satir sayisini LIMIT deyimi ile sinirlarsaniz, planlamaci
en ucuz planlama icin bir tahminde bulunabilecektir.
ANALYZE secenegi cumlenin planlamasinin yapilmasindan baska cumlenin
calistirilmasini da saglar. Harcanan toplam sure her planlama dugumu
icin ayri ayri gosterilir (milisaniye cinsinden). Ayrica, donen satir
sayisi da ciktiya eklenir. Bu, planlamacinin tahminlerinin tutarli olup
olmadigini gorme acisindan da yararlidir.
"Onemli:
ANALYZE kullanildiginda cumlenin calistirilacagini unutmayin.
EXPLAIN'de kullanildiginda, bir SELECT cumlesinin dondurecegi
cikti iptal edileceginden, cumlenin bazi yan etkileri varsa,
onlari bilemeyeceksiniz. INSERT, UPDATE, DELETE veya EXECUTE
cumleleri uzerinde EXPLAIN ANALYZE kullanmak ve komutun
etkilerinin verinizi etkilememesini isterseniz, su yaklasimi
kullanabilirsiniz:
BEGIN;
EXPLAIN ANALYZE ...;
ROLLBACK;
PARAMETRELER
ANALYZE
Cumleyi calistirir ve gercek calisma surelerini gosterir.
VERBOSE
Planlama agacinin bir ozetini degil dahili gosteriminin tamamini
gosterir. Aslinda, bu secenek sadece hata ayiklama amaciyla
yararlidir. VERBOSE ciktisi explain_pretty_print yapilandirma
degiskeninin degerine bagli olarak ya cicili bicilidir ya da
degildir.
c"umle Icra planini gormek istediginiz bir SELECT, INSERT, UPDATE,
DELETE, EXECUTE veya DECLARE cumlesi.
EK BILGI
Eniyileyici kullanimi hakkinda
http://www.postgresql.org/docs/8.0/static/performance-tips.html#USING-EXPLAIN
adresinde daha fazla bilgi bulabilirsiniz.
PostgreSQL'in sorgulari eniyilerken kabul edilebilir kararlar
verebilmesi icin, ANALYZE komutunun tablo icindeki verilerin
istatistiksel dagilimini kaydetmis olmasi gerekir. Bu yapilmazsa (ya da
tablo icindeki verilerin istatistiksel dagilimi son ANALYZE cagrisindan
sonra cok fazla degisiklige ugramissa), tahmini maliyetler sorgunun
gercek ozellikleriyle uyumlu olmayacagi gibi planlamacinin urkutucu bir
sorgu planlamasi secimi yapmasina sebep olabilir.
PostgreSQL 7.3 oncesi, sorgu plani bir NOTICE ciktisi bicimindeydi.
Simdi, bir sorgunun sonucu gibi (tek sutunluk bir tablo gosterimi
olarak) ciktilanmaktadir.
"ORNEKLER
integer turunde tek bir sutunu olan 10000 satirlik bir tabloya
uygulanan basit bir sorgunun planlamasini gormek icin:
EXPLAIN SELECT * FROM foo;
QUERY PLAN
---------------------------------------------------------
Seq Scan on foo (cost=0.00..155.00 rows=10000 width=4)
(1 row)
Eger bir indeks varsa ve WHERE ile indekslenen bir sorgu kullanirsak,
EXPLAIN farkli bir plan gosterebilir:
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 deger islevi kullanilan bir sorgunun sorgu plani:
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 hazirlarken bunun icra planini gormek icin, EXPLAIN
EXECUTE kullanimi ornegi:
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)
Suphesiz burada gosterilen degerler islenen tablolarin gercek icerigine
baglidir. Ayrica, bu degerler ve hatta secilen sorgu stratejisi,
planlamacinin surekli gelistirilmesi sebebiyle, PostgreSQL dagitimlari
arasinda bile degisiklik gosterebilir. Buna ek olarak, ANALYZE komutu
veri istatistiklerini tahmin etmek icin rasgele ornekleme yapar; bundan
dolayi, tablo verisinde bir degisiklik olmamis bile olsa, taze bir
ANALYZE cagrisindan sonra maliyet tahminleri degisiklik gosterebilir.
UYUMLULUK
SQL standardinda EXPLAIN diye bir deyim yoktur.
ILGILI BELGELER
ANALYZE [analyze(7)].
,CEVIREN
Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005