dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Kütüphanesi/postgresql/#10
Runbook #10
postgresql
PerformanceSEV3 · PERFORMANS / RİSK15-30 dakika / 15-30 minssuperuser / postgres / rds_superuser

PostgreSQL Checkpoint ve max_wal_size Ayarı

Zorunlu checkpoint ve yazma patlamalarını sürüme uygun istatistiklerle teşhis eder; WAL kapasitesini ve checkpoint hedefini dengeler.

İlişkili Metrik:M10
İlişkili Script:S15
#checkpoint#max_wal_size#wal#pg_stat_checkpointer

Operasyonel Güvenlik ve Risk Uyarısı

Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Belirti / Symptom

- M10 zorunlu checkpoint oranı > %10; logda sık `checkpoints are occurring too frequently` uyarısı veya yazma gecikmesi sıçramaları görülür.

2. Etki / Impact

Checkpoint sırasında yoğun I/O diğer sorguların gecikmesini artırır. `max_wal_size` çok düşükse sık checkpoint, çok yüksekse daha uzun crash recovery ve disk rezervi ihtiyacı doğurabilir.

3. Teşhis / Diagnosis

🟢 Salt Okunur1. Sürümü belirleyin (`SHOW server_version;`). S15: PG 16 ve öncesi `pg_stat_bgwriter`, PG 17+ `pg_stat_checkpointer`:
sql
-- PostgreSQL 16 ve öncesi:
SELECT checkpoints_timed, checkpoints_req,
       checkpoint_write_time, checkpoint_sync_time, stats_reset
FROM pg_stat_bgwriter;
-- PostgreSQL 17+ (ayrı oturumda / kendi sürümünüzde):
SELECT num_timed, num_requested, write_time, sync_time, stats_reset
FROM pg_stat_checkpointer;
🟢 Salt Okunur2. İki ölçüm arasındaki artışı ve `stats_reset` zamanını karşılaştırın; kümülatif sayaçlardan tek anlık yüzde yorumlamayın. İş yükünde bulk load, archive/slot tutulması ve gerçek disk yazma gecikmesini de inceleyin.
🟢 Salt Okunur3. Mevcut sınırları görün:
sql
SELECT name, setting, unit, pending_restart
FROM pg_settings
WHERE name IN ('max_wal_size', 'min_wal_size', 'checkpoint_timeout',
               'checkpoint_completion_target', 'log_checkpoints');

`log_checkpoints` varsayılanı sürüme göre değişebilir; disk alanı artışını önce ölçün.

4. Müdahale / Response

🟡 Geri Alınabilir1. Yeterli boş disk varsa `max_wal_size` değerini kademeli artırın (örnek 4 GB; sizin WAL üretim ve disk bütçenize göre uyarlayın):
sql
ALTER SYSTEM SET max_wal_size = '4GB';
ALTER SYSTEM SET checkpoint_completion_target = 0.9;
SELECT pg_reload_conf();
🟡 Geri Alınabilir2. Gerekirse `log_checkpoints = on` ile checkpoint sıklığı ve sürelerini loglayın. Düşük checkpoint süresi ama yüksek depolama latency varsa altyapı IOPS'unu inceleyin.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ3. **`CHECKPOINT;` komutunu tekrarlayarak sorunu çözmeye çalışmayın**; ek yoğun I/O oluşturur. `max_wal_size` tek başına replika slotu veya başarısız WAL arşivlemesi nedeniyle biriken WAL'ı temizlemez; `pg-wal-disk-filling` runbook'una bakın.

5. Doğrulama / Verification

- En az bir saatlik yükte zorunlu checkpoint artış oranı düşer, yazma gecikmesi iyileşir; WAL diski güvenli boş alan korur.

- `pg_settings` ile yeni ayarların uygulandığını doğrulayın; yalnızca komutun başarılı dönmesine güvenmeyin.

6. Geri Alma / Rollback

- Önceki değerler kaydedilmişse `ALTER SYSTEM SET max_wal_size = '<onceki_deger>';` ve `checkpoint_completion_target` için aynı yöntemle dönün, ardından `SELECT pg_reload_conf();`.

- Disk doluluğunda birikmiş WAL'ı elle silmeyin; yeniden düşük sınıra dönmek anında alan boşaltmaz.

Diğer POSTGRESQL Runbook'ları