DBAtlas · Atlas de operações de banco de dados

ORA-04031: Unable to allocate N bytes of shared memory

Oracle

O que significa?

O Oracle não conseguiu alocar memória contígua do tamanho solicitado em um pool de memória compartilhada (geralmente o shared pool ou o large pool). Um componente da SGA está sob pressão de memória.

Por que acontece?

Fragmentação do shared pool devido a muitas instruções SQL únicas sem bind variables (cheias de literais), SHARED_POOL_SIZE insuficiente, conexões concorrentes demais, pacotes PL/SQL grandes, ou dimensionamento incorreto de ASMM/AMM.

Como resolver

Verifique a qual pool a mensagem de erro se refere (shared pool, large pool etc.). Curto prazo: ALTER SYSTEM FLUSH SHARED_POOL (cuidado: em produção isso força o re-parse de todo o SQL, ou seja, uma tempestade temporária de hard parse, e não corrige a fragmentação de forma permanente). Correção permanente: imponha o uso de bind variables (incluindo CURSOR_SHARING), aumente SGA_TARGET / SHARED_POOL_SIZE / LARGE_POOL_SIZE. Fixe na memória os pacotes usados com frequência com DBMS_SHARED_POOL.KEEP. Examine a distribuição de memória com V$SGASTAT.

Abrir no DBAtlas →

Mais entradas deste banco