dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Kütüphanesi/postgresql/#12
Runbook #12
postgresql
AvailabilitySEV1 · KRİTİK KESİNTİ15-30 dakika / 15-30 minssuperuser / postgres / rds_superuser

PostgreSQL Disk Doldu Acil Müdahale

Veri, WAL ve geçici alan doluluğunda güvenli kapasite kazanma adımlarını, dosya silme anti-pattern'lerini ve kurtarma doğrulamasını açıklar.

İlişkili Metrik:M12
İlişkili Script:S14S8S13
#disk-full#pg_wal#tablespace#temp-files#incident

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

- 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. Etki / 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. Teşhis / Diagnosis

🟢 Salt Okunur1. Ö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.
🟢 Salt Okunur2. 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.
🟢 Salt Okunur3. 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. Müdahale / Response

🟡 Geri Alınabilir1. 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.
🟡 Geri Alınabilir2. WAL nedeni slot veya arşivleme ise `pg-wal-disk-filling` runbook'una geçin. Sadece terk edilmiş slotu sahibiyle teyitten sonra silin.
🟡 Geri Alınabilir3. 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.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ4. **`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.
🟡 Geri Alınabilir5. 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. Doğrulama / Verification

- 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. Geri Alma / Rollback

- 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.

Diğer POSTGRESQL Runbook'ları