DBAtlas · Атлас эксплуатации баз данных

ORA-04031: Не удаётся выделить N байт разделяемой памяти

Oracle

Что это значит?

Oracle не смог выделить непрерывный участок памяти запрошенного размера в пуле разделяемой памяти (обычно shared pool или large pool). Компонент SGA испытывает нехватку памяти.

Почему возникает?

Фрагментация shared pool из-за множества уникальных SQL-операторов без bind-переменных (полных литералов), недостаточный SHARED_POOL_SIZE, слишком много одновременных подключений, крупные пакеты PL/SQL или неверная настройка размеров ASMM/AMM.

Как исправить

Проверьте, к какому пулу относится сообщение об ошибке (shared pool, large pool и т. д.). Краткосрочно: ALTER SYSTEM FLUSH SHARED_POOL (осторожно: в продакшене это вынуждает повторно разбирать весь SQL, то есть вызывает временный шторм hard parse, и не устраняет фрагментацию навсегда). Постоянное решение: обеспечьте использование bind-переменных (в том числе через CURSOR_SHARING), увеличьте SGA_TARGET / SHARED_POOL_SIZE / LARGE_POOL_SIZE. Закрепите часто используемые пакеты в памяти с помощью DBMS_SHARED_POOL.KEEP. Изучите распределение памяти через V$SGASTAT.

Открыть в DBAtlas →

Ещё по этой СУБД