DBAtlas · Veritabanı operasyon atlası

pg_stat_io ile I/O'nun kaynağını analiz et (backend tipi, nesne, bağlam)

PostgreSQLEklenti

Komut

SELECT backend_type,
       object,
       context,
       reads,
       pg_size_pretty(reads * op_bytes) AS read_size,
       writes,
       pg_size_pretty(writes * op_bytes) AS write_size,
       extends,
       hits,
       round(100.0 * hits / NULLIF(hits + reads, 0), 1) AS hit_pct,
       evictions,
       reuses,
       fsyncs,
       round(read_time::numeric, 1) AS read_ms,
       round(write_time::numeric, 1) AS write_ms
FROM pg_stat_io
WHERE coalesce(reads, 0) + coalesce(writes, 0) + coalesce(extends, 0) + coalesce(evictions, 0) > 0
ORDER BY coalesce(reads, 0) + coalesce(writes, 0) DESC;

-- Kim yazıyor? İdeal durumda yazıların çoğu checkpointer ve background writer'dandır
SELECT backend_type,
       pg_size_pretty(sum(writes * op_bytes)) AS written,
       round(100.0 * sum(writes) / NULLIF(sum(sum(writes)) OVER (), 0), 1) AS pct_of_writes,
       sum(fsyncs) AS fsyncs
FROM pg_stat_io
WHERE object = 'relation' AND writes > 0
GROUP BY backend_type
ORDER BY sum(writes) DESC;

Ne yapar?

Okuma, yazma, extend, eviction ve fsync sayılarını backend tipi (client backend, autovacuum, checkpointer...), nesne (relation/temp relation) ve bağlam (normal, vacuum, bulkread, bulkwrite) bazında; ayrıca yazıların hangi süreç tipinden geldiğini gösterir.

Ne zaman kullanılır?

I/O darboğazında yükün sorgulardan mı, autovacuum'dan mı yoksa checkpoint'ten mi geldiğini ayırt etmek ve shared_buffers/bgwriter ayarlarını doğrulamak için.

Dikkat

pg_stat_io küme geneldir ve son reset'ten beri kümülatiftir; değişimi görmek için iki ölçüm arasındaki farkı al (sıfırlamak için: SELECT pg_stat_reset_shared('io');). read_time/write_time yalnızca track_io_timing = on iken dolar. reads, OS page cache'ten karşılanan okumaları da içerir. client backend writes veya evictions yüksekse backend'ler buffer boşaltmak için kendileri yazıyordur; shared_buffers, bgwriter_lru_maxpages ve checkpoint ayarlarını incele. context = 'vacuum'/'bulkread' satırları ring buffer kullanımıdır; buradaki reuses normaldir.

DBAtlas'ta aç →

İlgili