PostgreSQL'de Endeks Yapımındaki Gelişimi İzleme


36

PostgreSQL'de indeks oluşturma sürecini izlemek için bir yol var mı. Büyük bir masa üzerinde bir dizin oluşturuyorum ve bunun ne kadar hızlı gerçekleştiğini görmek istiyorum.

Bunu izlemenin bir yolu var mı?


psql kullanıyorsanız \ zamanlamayı denemelisiniz
sftsz

Yanıtlar:


21

Göre Postgres Wiki Endeksi Bakım sayfasında, ile tüm endeksler mevcut durumunu öğrenebilirsiniz:

SELECT
  t.tablename,
  indexname,
  c.reltuples AS num_rows,
  pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
  pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
  CASE WHEN indisunique THEN 'Y'
    ELSE 'N'
  END AS UNIQUE,
  idx_scan AS number_of_scans,
  idx_tup_read AS tuples_read,
  idx_tup_fetch AS tuples_fetched
FROM pg_tables t
  LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
  LEFT OUTER JOIN
    ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
      JOIN pg_class c ON c.oid = x.indrelid
      JOIN pg_class ipg ON ipg.oid = x.indexrelid
      JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
    AS foo
  ON t.tablename = foo.ctablename
WHERE t.schemaname='public'
ORDER BY 1,2;

Sütun num_rows, dizininizde kaç satırın bulunduğunu ve dizin oluşturulurken index_sizebüyüyeceğini gösterir.


8
Bunun , onu oluşturan işlem gerçekleştirilinceye kadar katalogda görünmeyebilecek yeni bir dizin için çalışmayabileceğini düşünüyorum.
mustaccio

@ mustaccio haklısın. uzun zaman alan bir dizin oluşturuyorum ve yukarıdaki komut yalnızca önceden oluşturulmuş dizinleri gösterir; 'CREATE INDEX' in hala devam etmekte olduğu endeksleri göstermeyecektir.
orange80

1
REINDEX TABLO bu sorguyu engeller. En azından, 9.6'da çalıştırdığımda yaptı.
RonJohn

10

Bu nedenle, bunu yapmanın iyi bir yolu yoktur , ancak gerçekten bilmeniz gerekiyorsa ... önce veri boyutuna * satır + ek yüke dayanarak dizinin alması gereken alanı hesaplayın. Daha sonra $ PGDATA içine yazılan dosyaları bulmak için pfiles veya pgtruss gibi bir şey kullanabilirsiniz; Dizinleriniz 1 GB’in üzerindeyse, nnnnn.n gibi ilk dosya dizisinin tutarlı olduğu nnnnn.n gibi bir dizi dosya ve her nb dosyası için son n artış olacaktır. Ne kadar dosya oluşturulduğunu öğrendikten sonra, büyümeyi izleyebilir ve bitirme işlemine ne kadar yakın olduğunuzu anlayabilirsiniz. Kaba tahmin, ama belki yardımcı olur.


4

Hayır, CONCURRENT modunda oluştursanız bile yok. Geçmişte veritabanı dizinindeki dosyanın boyutuna dikkat etsem de, bu ne kadar büyük olacağını tahmin edebileceğinizden bu gerçekten işe yaramaz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.