PostgreSQL WAL Directory Filling Up
Separates WAL growth due to slots, archiving, replicas and write volume and gives safe recovery steps without deleting WAL files manually.
Operational Safety & Risk Notice
This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.
1. Symptom & Signals
- M4 bir slotta tutulan WAL miktarını yüksek gösterir veya WAL dosya sisteminde boş alan hızla azalır.
- Log'da `No space left on device` ya da `archive command failed` görülebilir.
2. Business & Technical Impact
WAL diski dolduğunda yazma ve checkpoint etkilenir; veri tabanı kesintisi riski vardır. Arşiv kaybı PITR'yi, slot silme replika/CDC sürekliliğini tehlikeye atar.
3. Diagnosis & Root-Cause Analysis
SHOW data_directory;
SHOW archive_mode;
SHOW archive_command;df -h /var/lib/postgresql/data/pg_walSELECT slot_name, slot_type, active, restart_lsn,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_replication_slots ORDER BY pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) DESC NULLS LAST;SELECT archived_count, failed_count, last_failed_wal, last_failed_time,
last_archived_time FROM pg_stat_archiver;
SELECT application_name, state, replay_lsn FROM pg_stat_replication;`failed_count` kümülatiftir; iki örnek arasındaki farkı alın. `archive_command` başarısızsa WAL temizlenmesi durabilir; `pg_stat_archiver` metriklerine tek başına değil loglara da bakın.
4. Remediation & Action Plan
SELECT pg_drop_replication_slot('terk_edilmis_slot');Aktif slot silinemez; işlem CDC tüketicisini veya standby'ı yeniden kurmaya zorlayabilir.
5. Verification & Health Checks
- Disk boş alanı yeniden güvenli seviyeye dönüyor; `failed_count` artışı durdu; gerekli slotlar ve replikalar çalışıyor.
- Yeni WAL arşivleniyor; geri yükleme/PITR zinciri doğrulanıyor.
6. Rollback & Contingency Plan
- Silinen slot geri alınamaz; tüketicinin konumuna göre yeniden oluşturulması veya tekrar senkronizasyon gerekir.
- Arşiv komutu ve slot boyutu ayarları önceki değerine döndürülebilir, ancak atlanmış arşiv kopyaları geriye dönük üretilemez.