DBAtlas · Veritabanı operasyon atlası

Bellek baskısı / OOM

Belirti

OOM killer süreci öldürüyor, 'out of memory', düşük cache hit, aşırı swap, Redis 'OOM command not allowed'.

1. Belleği kim tüketiyor

DB'nin ayrılmış belleği (buffer pool/SGA) mı, oturum başı bellek (PGA/sort/work_mem) mi, yoksa OS geneli mi? OS'te free/vmstat, DB içinde bellek view'larına bak.

Oracle

SELECT component, current_size/1048576 mb FROM v$memory_dynamic_components WHERE current_size>0;

PostgreSQL

SHOW shared_buffers; SHOW work_mem; -- work_mem * bağlantı * sort sayısı toplamı patlayabilir

MySQL

SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; SHOW STATUS LIKE 'Innodb_buffer_pool%';

Redis

INFO memory  # used_memory, maxmemory, mem_fragmentation_ratio

2. Ayar mı yük mü ayır et

Bellek ayarları toplamı fiziksel RAM'i aşıyor mu (over-commit)? shared_buffers + (work_mem * eşzamanlılık) hesabını yap. Yoksa anlık bir yük mü (dev bir sort/hash, çok bağlantı)?

3. Redis'e özel: eviction ve fragmentation

used_memory maxmemory'ye dayandıysa maxmemory-policy'yi kontrol et (noeviction ise yazma reddedilir). mem_fragmentation_ratio yüksekse MEMORY PURGE / activedefrag. Büyük anahtarları --bigkeys ile bul.

Redis

CONFIG GET maxmemory-policy
MEMORY DOCTOR
redis-cli --bigkeys

4. Acil rahatlat

Bellek yiyen kaçak sorguyu/oturumu kill et, work_mem gibi oturum belleğini geçici düşür, gereksiz bağlantıları kes. Swap'a düşmüşse öncelik swap'tan çıkmak.

5. Doğru boyutlandır

Araçlar > Bellek/Buffer Pool hesaplayıcısı ile RAM'i doğru dağıt. Genel kural: adanmış sunucuda buffer pool/SGA ~%70-80 RAM; oturum belleğini eşzamanlılıkla çarparak topla ve RAM'i aşma. Gerekirse RAM ekle.

DBAtlas'ta aç →