DBAtlas · Veritabanı operasyon atlası

Checkpoint davranışını değerlendir (PG17+ pg_stat_checkpointer, PG16 ve öncesi pg_stat_bgwriter)

PostgreSQLParametre

Komut

-- PG17+
SELECT num_timed,
       num_requested,
       round(100.0 * num_requested / NULLIF(num_timed + num_requested, 0), 1) AS req_pct,
       restartpoints_timed,
       restartpoints_req,
       round((write_time / 1000)::numeric / NULLIF(num_timed + num_requested, 0), 1) AS avg_write_s,
       round((sync_time / 1000)::numeric / NULLIF(num_timed + num_requested, 0), 1) AS avg_sync_s,
       pg_size_pretty(buffers_written * current_setting('block_size')::bigint) AS written_by_checkpoint,
       stats_reset
FROM pg_stat_checkpointer;

-- PG16 ve öncesi
SELECT checkpoints_timed,
       checkpoints_req,
       round(100.0 * checkpoints_req / NULLIF(checkpoints_timed + checkpoints_req, 0), 1) AS req_pct,
       round((checkpoint_write_time / 1000)::numeric / NULLIF(checkpoints_timed + checkpoints_req, 0), 1) AS avg_write_s,
       round((checkpoint_sync_time / 1000)::numeric / NULLIF(checkpoints_timed + checkpoints_req, 0), 1) AS avg_sync_s,
       pg_size_pretty(buffers_checkpoint * current_setting('block_size')::bigint) AS written_by_checkpoint,
       pg_size_pretty(buffers_clean * current_setting('block_size')::bigint) AS written_by_bgwriter,
       pg_size_pretty(buffers_backend * current_setting('block_size')::bigint) AS written_by_backends,
       maxwritten_clean,
       stats_reset
FROM pg_stat_bgwriter;

-- İlgili ayarlar
SELECT name, current_setting(name) AS value
FROM pg_settings
WHERE name IN ('checkpoint_timeout', 'max_wal_size', 'min_wal_size',
               'checkpoint_completion_target', 'log_checkpoints')
ORDER BY name;

Ne yapar?

Zamanlanmış ve WAL hacmi nedeniyle zorla tetiklenen checkpoint oranını, checkpoint başına ortalama yazma/sync süresini ve yazılan buffer hacmini (PG16 ve öncesinde bgwriter ve backend yazılarıyla birlikte) gösterir.

Ne zaman kullanılır?

Yazma yoğun dönemlerde I/O dalgalanması, yüksek WAL üretimi veya loglarda 'checkpoints are occurring too frequently' uyarısı görüldüğünde.

Dikkat

req_pct yüksekse (genellikle %10-20 üzeri) checkpoint'ler max_wal_size dolduğu için zorla tetikleniyordur; max_wal_size'ı artır ve log_checkpoints = on ile 'checkpoint starting: wal' satırlarını izle. checkpoint_timeout'u uzatmak I/O'yu yayar ama crash recovery süresini uzatır. PG16 ve öncesinde written_by_backends yüksekse backend'ler kirli sayfaları kendileri yazmak zorunda kalıyordur (shared_buffers/bgwriter yetersiz); PG17'de bu bilgi pg_stat_io'dadır. Ortalamalar, yapılacak iş olmadığı için atlanan zamanlanmış checkpoint'leri de paydaya kattığından kabaca yorumlanmalıdır. Sayaçlar stats_reset'ten bu yana kümülatiftir.

DBAtlas'ta aç →

İlgili