Ошибка ORA-04030: out of process memory — тюнинг памяти PGA и OS лимитов
- Серверный процесс завершается с ошибкой
ORA-04030: out of process memory when trying to allocate N bytes (pga heap, ...). - В Linux системный вызов
malloc()/mmap()возвращает ENOMEM. - Высокое потребление физической оперативной памяти (PGA) серверными процессами Oracle.
- Процессы СУБД уничтожаются механизмом OS OOM Killer.
1. Поиск сессий с аномальным потреблением PGA
SELECT s.sid, s.serial#, s.username, s.program,
p.spid, p.pga_used_mem/1024/1024 AS pga_used_mb,
p.pga_alloc_mem/1024/1024 AS pga_alloc_mb
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
ORDER BY pga_alloc_mb DESC;2. Проверка и корректировка лимитов PGA в Oracle
-- Увеличение агрегированного пула PGA
ALTER SYSTEM SET pga_aggregate_target = 16G SCOPE=BOTH;
-- Корректировка жесткого лимита (0 = отключение жесткого лимита)
ALTER SYSTEM SET pga_aggregate_limit = 32G SCOPE=BOTH;3. Проверка системных лимитов ОС (ulimit) в Linux
В файле /etc/security/limits.d/99-oracle.conf убедитесь, что параметры стека и памяти не ограничены:
oracle soft memlock unlimited
oracle hard memlock unlimited
oracle soft stack 10240
oracle hard stack 32768
oracle soft data unlimited
oracle hard data unlimited4. Проверка параметра vm.max_map_count
sysctl -w vm.max_map_count=1048576 Частые вопросы (FAQ)
В чем разница между памятью SGA и PGA?
SGA — общая разделяемая память экземпляра СУБД (буферный кэш, shared pool). PGA — приватная память, выделяемая индивидуально под каждый выделенный процесс Oracle для сортировок, хеширования и стека переменных PL/SQL.
Что происходит при превышении PGA_AGGREGATE_LIMIT?
Oracle находит сессию, потребляющую наибольший объем памяти PGA, и принудительно обрывает ее с ошибкой ORA-04036 / ORA-04030, защищая сервер от падения по нехватке RAM.
Могут ли коллекции PL/SQL вызвать ORA-04030?
Да, выборка миллионов строк в ассоциативные массивы или вложенные таблицы PL/SQL (BULK COLLECT без предложения LIMIT) — частая причина исчерпания памяти процесса.
Как размер HugePages в Linux защищает от проблем с памятью?
HugePages фиксируют страницы памяти SGA в RAM и исключают дублирование страниц таблиц трансляции (Page Tables), высвобождая гигабайты памяти для PGA.