oracle数据库用久了,就会出现
ORA-04031
这种错误。我该如何优化这些参数值(tmpfs>MEMORY_TARGET >sga+pga)才能避免此问题出现呀。每次手动清理下共享池,然后重启数据库,过段时间还是会出现此错误,麻烦给出详细点的解决方案

ORA-04031 没有一劳永逸的解决之道。
在各个版本中,还可能因为 BUG 而出现。
如果排除BUG因素,可以考虑根据 Shared Pool Advisor 的建议,增大 Shared Pool 的设置,这样可以避免大多数非 BUG 因素导致的问题。
设置 Shared Pool 的大小,不要用自动内存的调整特性。


目前我查看shared_pool的大小,是自动分配的。我服务器16G内存,那Share_pools该设置多大呢?其次,tmpfs,MEMORY_TARGET ,sga,pga 分别设置多大比较好?


【原因】
1、手动内存管理share pool 设置太小
2、share pool 碎片太多,申请大块内存时无法分配连续空间
未使用绑定变量
使用绑定变量,但child cursor不能共享,生成太多child cursor
session_cached_cursor很大 + cursor_space_for_time=true
3、组成share pool的各个subpool使用不均衡(每个subpool都有独立free list + shared pool latch单独管理)
4、bug(内存泄漏)
5、物理内存不足(使用过多swap)
【解决思路】
1、临时处理(不适用于shared pool 较大而且比较繁忙的系统)
alter system flush share_pool;
2、调整内存管理参数(需要重启实例)


不启动shared_pool的自动内存调整,建议设置为一个固定的值


