DBAtlas · 数据库运维图谱

ORA-04031: Unable to allocate N bytes of shared memory(无法分配 N 字节共享内存)

Oracle

含义

Oracle 无法在共享内存池(通常是 shared pool 或 large pool)中分配所请求大小的连续内存。某个 SGA 组件处于内存压力之下。

原因

大量未使用绑定变量(充满字面量)的唯一 SQL 语句导致 shared pool 碎片化、SHARED_POOL_SIZE 不足、并发连接过多、PL/SQL 包过大,或 ASMM/AMM 容量规划不正确。

解决方法

确认错误消息指的是哪个池(shared pool、large pool 等)。短期:ALTER SYSTEM FLUSH SHARED_POOL(注意:在生产环境中这会迫使所有 SQL 重新解析,即造成短暂的硬解析风暴,且不能永久解决碎片化)。永久解决:强制使用绑定变量(包括 CURSOR_SHARING),增大 SGA_TARGET / SHARED_POOL_SIZE / LARGE_POOL_SIZE。用 DBMS_SHARED_POOL.KEEP 将常用的包钉在内存中。通过 V$SGASTAT 查看内存分布。

在 DBAtlas 中打开 →

同一数据库的其他条目