dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Library/postgresql/#12
Runbook #12
postgresql
AvailabilitySEV1 · CRITICAL OUTAGE15-30 dakika / 15-30 minssuperuser / postgres / rds_superuser

PostgreSQL Disk Full Emergency

Covers safe capacity recovery for data, WAL and temp disks, warns against deleting database files and verifies recovery.

Related Metrics:M12
Related Scripts:S14S8S13
#disk-full#pg_wal#tablespace#temp-files#incident

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.

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

1. Symptom & Signals

- M12 boş alan < %10 veya loglarda `No space left on device` / `could not write`.

- Yazmalar hata verir; WAL disk doluluğunda PostgreSQL kapanabilir veya yeniden başlatma döngüsüne girebilir.

2. Business & Technical Impact

Veri yazma, WAL ve sorgu geçici dosyaları etkilenir; veri bütünlüğü ve kurtarma zinciri riski vardır. Hangi mount'ın dolduğunu bulmadan dosya silmek olayı büyütür.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. Önce veri dizini, tablespace ve WAL yerini doğrulayın:
sql
SHOW data_directory;
SELECT spcname, pg_tablespace_location(oid) AS location
FROM pg_tablespace WHERE oid >= 16384;
SELECT slot_name, active, restart_lsn FROM pg_replication_slots;
bash
df -h /var/lib/postgresql/data
# Gerçek data_directory ve pg_wal yolunu kendi kurulumunuzdan alın;
# symlink/ayrı disk varsa hedef mount'ı ayrıca kontrol edin.
🟢 Read-Only2. Veritabanı yanıt veriyorsa S14, S8 ile en büyük veritabanı ve tabloları ölçün. `df` ve `du` farkı varsa silinmiş ama açık tutulan dosyalar/ayrılmış alan için işletim sistemi ekibiyle inceleyin.
🟢 Read-Only3. WAL büyüdüyse S13, arşiv hataları için `pg_stat_archiver`, temp dosya baskısı için `pg_stat_database.temp_bytes` trendine bakın. Disk log/backuplarla dolduysa bu dosyaların aktif veritabanı veya yedek zincirinde olmadığını teyit edin.

4. Remediation & Action Plan

🟡 Reversible1. En düşük riskli hamle: **dolu dosya sisteminin kapasitesini artırın** veya PG'nin aktif dizinleri dışında kalan doğrulanmış eski işletim sistemi loglarını kurumun saklama politikasına uygun arşivleyin. Uygulamadaki büyük yazma işini geçici yavaşlatın.
🟡 Reversible2. WAL nedeni slot veya arşivleme ise `pg-wal-disk-filling` runbook'una geçin. Sadece terk edilmiş slotu sahibiyle teyitten sonra silin.
🟡 Reversible3. Geçici dosya baskısıysa PID ve sorgu sahibi doğrulandıktan sonra ağır sorguyu `pg_cancel_backend` ile iptal edin; temp dosyası sorgu temizliğiyle serbest kalabilir. OS'ten çalışan backend'in temp dosyasını elle silmeyin.
🔴 HIGH RISK / IRREVERSIBLE4. **`pg_wal`, `base`, `global`, `pg_tblspc` içinden dosya silmeyin; `pg_resetwal` kullanmayın.** Açık sistemde `VACUUM FULL` veya `REINDEX` ek disk gerektirir ve durumu kötüleştirebilir. Veri silme (`TRUNCATE`, `DROP`) ancak iş sahibi, yedek ve veri saklama onayıyla yapılır.
🟡 Reversible5. Kapasite geri geldiyse PostgreSQL servis/log durumunu kontrol edin; gerekiyorsa yalnızca standart servis prosedürüyle yeniden başlatın, önce WAL ve yedek bütünlüğüne ilişkin uyarıları kaydedin.

5. Verification & Health Checks

- Gerçek dolu mount'ta güvenli boş alan (> %20 hedef) var; M12 normalleşti, uygulama yazma testi başarılı.

- `pg_stat_archiver` yeniden arşivliyor; gerekli replikalar streaming. En az bir saat büyüme eğilimi ölçülüyor.

6. Rollback & Contingency Plan

- Kapasite artırımı çoğu altyapıda geri alınamaz veya risklidir; eski disk sınırına dönerken doluluk payını doğrulayın.

- İptal edilmiş sorgu yeniden denenebilir; silinmiş WAL/veri dosyalarını geri alma garantisi yoktur, bu nedenle elle silme yasaktır.

More POSTGRESQL Runbooks