Disk / tablespace doldu
'unable to extend', 'disk full', 'could not extend', 'log full' aldın. Panik yapma: önce NEYİN dolduğunu bul, güvenli alan kazan, sonra kalıcı çöz.
Ne doldu?
Yanlış yeri temizlemek işe yaramaz. Önce doluluğu ölç: data file mı, transaction log mu, arşiv/redo mu, temp mi, yoksa OS diski mi?
SELECT d.tablespace_name, ROUND((1-(d.alloc-NVL(f.free,0))/d.maxb)*100,1) AS pct_free
FROM (SELECT tablespace_name, SUM(bytes) alloc, SUM(GREATEST(bytes,maxbytes)) maxb FROM dba_data_files GROUP BY tablespace_name) d LEFT JOIN (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) f ON f.tablespace_name = d.tablespace_name ORDER BY pct_free;- Data file / tablespace dolu
- Transaction log / arşiv-redo dolu
- Temp / undo dolu
- OS diski dolu (DB değil)
En büyük tüketici ne?
Çoğu zaman tek bir kaçak tablo/segment suçludur. En büyükleri bul.
SELECT segment_name, segment_type, ROUND(bytes/1048576,1) AS mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;- Beklenmedik büyük/kaçak tablo var
- Normal büyüme, yer gerçekten bitti
- Çok fazla dead tuple / bloat var
Log neden büyüyor?
Log/arşiv, en eski aktif işlem/yedek bitene kadar temizlenemez. Neden birikmiş?
SELECT name, log_reuse_wait_desc FROM sys.databases WHERE name=DB_NAME(); -- neden truncate edilemiyor?- MSSQL: log yedeği alınmıyor (LOG_BACKUP)
- PG: ilerlemeyen replication slot WAL biriktiriyor
- Oracle: arşiv log alanı (FRA) dolu
- Uzun açık transaction log'u tutuyor
Kök neden: Kaçak tablo/segment
Tek bir nesne beklenmedik şekilde büyümüş (kontrolsüz insert, temizlenmeyen kuyruk/log tablosu).
Kök neden: Gerçek kapasite ihtiyacı
Normal büyüme; alan eklemek gerekiyor.
Kök neden: Bloat (dead tuple)
Silinen/güncellenen satırların yeri geri kazanılmamış.
Kök neden: Temp / undo dolu
Büyük sort/hash veya uzun açık transaction geçici alanı doldurdu.
Kök neden: OS diski dolu
Sorun DB değil işletim sistemi diskinde. Loglar, core dump, eski yedekler, trace dosyaları yer kaplıyor olabilir.
Kök neden: Log yedeği alınmıyor (SQL Server)
FULL recovery modelinde log yedeği alınmazsa log sonsuz büyür.
Kök neden: Terk edilmiş replication slot (PG)
İlerlemeyen (inactive) bir slot, WAL'ın temizlenmesini engeller ve pg_wal'i şişirir.
Kök neden: Arşiv log alanı (FRA) dolu (Oracle)
Arşiv loglar birikmiş ve FRA dolmuş; arşivleyici duruncaya kadar DB yazmayı durdurabilir.
Kök neden: Uzun açık transaction
En eski aktif transaction, log/undo'nun geri kazanılmasını engelliyor.