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

İSİM

       EXPLAIN - bir cümlenin icra planını gösterir

KULLANIM

       EXPLAIN [ ANALYZE ] [ VERBOSE ] cmle

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.

       cmle  İ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