内容阅读
在知识库中专注阅读,并随时返回相关工具与课程
ORA-04031严重内存
无法分配共享内存
Unable to allocate shared memory
错误描述
共享池(或其他 SGA 组件)无法为请求的操作分配连续的内存块。
可能原因
- 共享池碎片化
- 共享池对于当前工作负载来说过小
- 未使用绑定变量导致过多的硬解析
- 大型 PL/SQL 包固定在内存中
解决方案
- 1增加 SHARED_POOL_SIZE:ALTER SYSTEM SET shared_pool_size=2G SCOPE=BOTH;
- 2在 SQL 中使用绑定变量代替字面值
- 3刷新共享池(应急):ALTER SYSTEM FLUSH SHARED_POOL;
- 4启用 ASMM 或 AMM 进行自动内存管理
- 5使用 CURSOR_SHARING=FORCE 作为临时解决方案
诊断命令
SELECT pool, name, bytes/1024/1024 mb FROM v$sgastat WHERE pool = 'shared pool' ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;SHOW PARAMETER shared_pool_size;SELECT namespace, gethitratio FROM v$librarycache;#memory#shared-pool#sga#fragmentation#parsing