DBAtlas · Veritabanı operasyon atlası

Disk / tablespace doldu

Belirti

'unable to extend', 'disk full', 'log file full' hataları; yazma işlemleri duruyor.

1. Panik yapma, önce neyin dolduğunu bul

Data file mı, transaction log mu, arşiv/redo alanı mı, temp mi, yoksa OS diski mi? Yanlış yeri temizlemek işe yaramaz. OS'te df -h ile diski, DB içinde alan view'larını kontrol et.

2. Doluluğu ölç

Hangi tablespace/dosya/dizin dolu, yüzde kaç?

Oracle

SELECT d.tablespace_name, ROUND((1-(d.alloc-NVL(f.free,0))/d.maxb)*100,1) 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;

PostgreSQL

SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database ORDER BY 2 DESC; -- disk için OS df

MySQL

SELECT table_schema, ROUND(SUM(data_length+index_length)/1048576,1) mb FROM information_schema.tables GROUP BY table_schema ORDER BY mb DESC;

SQL Server

SELECT name, size/128.0 size_mb, size/128.0 - CAST(FILEPROPERTY(name,'SpaceUsed') AS int)/128.0 free_mb FROM sys.database_files;

Redis

INFO memory  # used_memory vs maxmemory

3. En büyük tüketicileri bul

En büyük tabloları/segmentleri, en büyük log/arşiv dosyalarını, gereksiz eski yedekleri tespit et. Çoğu zaman tek bir kaçak tablo veya birikmiş arşiv log suçludur.

Oracle

SELECT segment_name, bytes/1048576 mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;

PostgreSQL

SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10;

SQL Server

SELECT TOP 10 OBJECT_NAME(object_id), SUM(reserved_page_count)*8/1024 mb FROM sys.dm_db_partition_stats GROUP BY object_id ORDER BY mb DESC;

4. Güvenli alan kazan (hızlı)

Log/arşiv için: yedeğini alıp eski arşiv logları/backup'ları temizle (Oracle: RMAN delete archivelog; MSSQL: log yedeği alıp log'u küçült). Redis'te maxmemory-policy ve eviction. ASLA canlı data file'ı elle silme; ASLA yedeksiz arşiv log silme.

5. Kapasiteyi kalıcı büyüt

Data file'a alan ekle veya autoextend aç (Oracle: ALTER DATABASE DATAFILE ... AUTOEXTEND ON MAXSIZE), diski büyüt, tablespace ekle. Kök nedeni çöz: log döngüsü, arşiv temizleme job'u, retention politikası.

6. Tekrarı önle

Disk doluluk alarmı kur (%80/%90 eşik), arşiv/log temizleme otomasyonu, retention politikasını netleştir. Bu playbook'u bir daha açmak zorunda kalma.

DBAtlas'ta aç →