Disk I/O, temp dosya ve WAL üreten sorguları bul (pg_stat_statements)
PostgreSQLPerformansKomut
SELECT queryid,
calls,
shared_blks_hit,
shared_blks_read,
round(100.0 * shared_blks_hit / NULLIF(shared_blks_hit + shared_blks_read, 0), 1) AS hit_pct,
pg_size_pretty(temp_blks_written * current_setting('block_size')::bigint) AS temp_written,
pg_size_pretty(wal_bytes) AS wal,
left(regexp_replace(query, '\s+', ' ', 'g'), 120) AS query
FROM pg_stat_statements
ORDER BY shared_blks_read + temp_blks_read + temp_blks_written DESC
LIMIT 20;Ne yapar?
Shared buffer'a sığmayıp en çok blok okuyan, temp dosyaya en çok yazan (work_mem'e sığmayan sort/hash) ve en çok WAL üreten sorguları cache hit oranıyla birlikte gösterir.
Ne zaman kullanılır?
Disk okuma gecikmesi, temp dosya alarmı (log_temp_files) veya WAL hacminde ani artış olduğunda sorumlu sorguyu bulmak için.
Dikkat
shared_blks_read, OS page cache'ten karşılanan okumaları da içerir; gerçek disk süresi için track_io_timing = on gerekir (yükünü önce pg_test_timing ile ölç). temp_written yüksekse çözüm genellikle rol/oturum bazında work_mem artırmak ya da sorguyu/index'i düzeltmektir; global work_mem artışı bellek riskini büyütür.
İlgili
- En pahalı sorguları bul (pg_stat_statements: toplam ve ortalama süre)
- pg_stat_statements istatistiklerini sıfırla (tümü veya tek sorgu)
- auto_explain ile yavaş sorguların execution plan'ını logla
- EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL) ile planı derinlemesine oku
- Plan regresyonunu queryid ile yakala (pg_stat_statements snapshot karşılaştırması)
- Paralel sorgu kapasitesini ve anlık worker kullanımını denetle