Bellek baskısı / OOM
Sunucu belleği tükeniyor, swap'a düşülüyor ya da OOM-killer devrede. Önce belleği kimin tükettiğini belirle: ayrılmış bellek (buffer pool/SGA), oturum belleği (work_mem/PGA), OS geneli, yoksa Redis'e özel bir durum mu?
Belleği kim tüketiyor?
Bellek baskısının kaynağını katmana göre ayır. Ayrılmış (sabit) bellek mi büyük, oturum başına bellek mi patlıyor, DB dışı bir süreç mi yiyor, yoksa Redis'in kendine özgü bellek yönetimi mi devrede?
SELECT component, ROUND(current_size/1024/1024) AS mb FROM v$memory_dynamic_components WHERE current_size>0 ORDER BY current_size DESC;- Ayrılmış bellek (buffer pool / SGA) baskın
- Oturum belleği (work_mem / PGA) patlıyor
- DB dışı bir süreç / OS geneli
- Redis'e özel (maxmemory / eviction / fragmentation)
Ayarlanmış bellek toplamı fiziksel RAM'i aşıyor mu?
Sabit ayrılmış bellek büyükse iki olasılık var: ya ayar toplamı (buffer pool + oturum + OS) fiziksel RAM'i aşıyor (over-commit), ya da boyut makul ama cache hit yine de düşük. Ayarları topla ve RAM ile karşılaştır.
SHOW PARAMETER sga_target; SHOW PARAMETER pga_aggregate_target;
SELECT ROUND(value/1024/1024/1024,1) AS host_ram_gb FROM v$osstat WHERE stat_name='PHYSICAL_MEMORY_BYTES';- Evet, toplam ayar RAM'i aşıyor (over-commit)
- Hayır, boyut makul ama cache hit düşük
Kök neden: Bellek over-commit
buffer pool/SGA + oturum belleği + OS ihtiyacı toplamı fiziksel RAM'i aşıyor. Sistem swap'a düşüyor ya da OOM-killer süreci öldürüyor.
Kök neden: Yetersiz önbellek (düşük cache hit)
Ayrılmış bellek RAM'i aşmıyor ama iş kümesine göre küçük; buffer cache hit oranı düşük ve DB sürekli diskten okuyor.
Kök neden: Oturum belleği patlaması
work_mem/PGA gibi oturum başına bellek, yüksek eşzamanlılıkla çarpılınca RAM'i tüketiyor. Her sort/hash operasyonu bu belleği ayrı ayrı ayırabilir.
Kök neden: Redis bellek yönetimi
Redis'te bellek used_memory maxmemory'ye dayanmış, eviction devrede ya da fragmentation yüksek (used_memory_rss >> used_memory). Politika ve fragmentasyon çözülmeli.
Kök neden: DB dışı bellek tüketimi
Belleği veritabanı değil OS geneli ya da komşu bir süreç tüketiyor: başka bir uygulama, dosya sistemi önbelleği baskısı veya bellek sızdıran bir yardımcı süreç.