DBAtlas · Atlas d'exploitation des bases de données

Pression mémoire / OOM

La mémoire du serveur s'épuise, le système swappe ou l'OOM killer est actif. Déterminez d'abord qui consomme la mémoire : mémoire allouée (buffer pool/SGA), mémoire de session (work_mem/PGA), l'OS dans son ensemble, ou une situation propre à Redis ?

Qui consomme la mémoire ?

Séparez l'origine de la pression mémoire par couche. La mémoire allouée (fixe) est-elle trop grande, la mémoire par session explose-t-elle, un processus hors base la dévore-t-il, ou la gestion mémoire propre à Redis est-elle en jeu ?

SELECT component, ROUND(current_size/1024/1024) AS mb FROM v$memory_dynamic_components WHERE current_size>0 ORDER BY current_size DESC;
  • La mémoire allouée (buffer pool / SGA) domine
  • La mémoire de session (work_mem / PGA) explose
  • Un processus hors base / l'OS dans son ensemble
  • Propre à Redis (maxmemory / éviction / fragmentation)

La mémoire totale configurée dépasse-t-elle la RAM physique ?

Si la mémoire allouée fixe est importante, il y a deux possibilités : soit le total configuré (buffer pool + sessions + OS) dépasse la RAM physique (sur-allocation), soit la taille est raisonnable mais le taux de succès du cache reste faible. Additionnez les paramètres et comparez-les à la RAM.

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';
  • Oui, le total configuré dépasse la RAM (sur-allocation)
  • Non, la taille est raisonnable mais le taux de succès du cache est faible

Cause racine : sur-allocation de la mémoire

La somme buffer pool/SGA + mémoire de session + besoins de l'OS dépasse la RAM physique. Le système swappe, ou l'OOM killer tue le processus.

Cause racine : cache insuffisant (faible taux de succès du cache)

La mémoire allouée ne dépasse pas la RAM mais est petite par rapport au working set ; le hit ratio du buffer cache est faible et la base lit constamment sur disque.

Cause racine : explosion de la mémoire de session

La mémoire par session comme work_mem/PGA, multipliée par une forte concurrence, épuise la RAM. Chaque opération de sort/hash peut allouer cette mémoire séparément.

Cause racine : gestion de la mémoire Redis

Dans Redis, used_memory a atteint maxmemory, l'éviction est active ou la fragmentation est élevée (used_memory_rss >> used_memory). La politique et la fragmentation doivent être traitées.

Cause racine : consommation mémoire hors base de données

La mémoire n'est pas consommée par la base de données mais par l'OS dans son ensemble ou un processus voisin : une autre application, la pression du cache du système de fichiers ou un processus auxiliaire qui fuit.

Ouvrir dans DBAtlas →