Provided by: manpages-tr_1.0.5.1-2_all bug

İ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