网站首页 > 技术文章 正文
oracle RAC中Oracle 4031报错发生的原因是:大量的hard parse硬解析导致了sag 的shared pool中的free list产生了大量的内存小碎片。当一个需要大内存的sql语句进行hard parse硬解析时,无法从free list中找到可用的内存,即使进行内存的释放,也无法找到符合条件的内存块,就会报ora-04031的报错。
解决方法是:1.清空Sga中的shared pool:
alter system flush shared_pool;
2.sql共享,绑定环境变量。
Sql语句需要统一书写风格,空格、大小写、数值等不一样,回车等,都会影响硬解析。
并且可以使用强制绑定环境变量的方法,提高解析效率。
3.扩大shared pool 的保留区。
分配内存时候,会先从普通共享池的free lists中寻找空间,free lists无可用空间时,就会寻找可释放的内存空间,如果无法找到可释放的内存空间,就会从保留池中分配内存。
select request_misses from v$shared_pool_reserved;
查看保留区的请求空间失败次数,只要有一次,就会发生ora-04031的报错。
可以查看保留区的大小:
show parameter shared_pool_reserved_size;
修改保留区的大小:
alter system set shared_pool_reserved=xxxM scope=both;
4.增大shared pool的大小。
可以查看sga中各个池子的情况:
select component,current_size from v$sga_dynamic_compoments;
select shared_pool_size_for_estimate,shared_pool_size_factor from v$shared_pool_advice;
当shared_pool_size_factor=1的时候,就是设置shared pool 大小的最佳值。
alter system set shared_pool_size = xxxM scope=both;
可以用这个语句去修改shared pool的大小。
5.把内存使用量非常大的对象keep在内存中。
查找可以keep的对象,执行dbms_shared_pool.keep('对象名');
查找对象名:
select owner,name,namespace,type,sharable_mem from v$db_object_cache where sharable_mem>10000 and (type='PACKAGE' or type='PACKAGE BODY' or type='FUNCTION' or type='PROCEDURE') and KEPT='NO';
这样可以把内存占用大的对象keep在内存中。
当ORACLE中有大量的小free chunk时,找不到合适的free chunk时,会去Library cache中找到大的chunk,根据shared pool中的LRU 链表规则,把它的空间释放,重新链到free list用来解析新的硬解析执行计划,如果此时再来一个大的sql,无法找到合适的free chunk,也在library cache中找到可释放的空间,也会报ora-04031的报错。
鼓励的话语:言慢者贵,性柔者富,厚德者旺!
猜你喜欢
- 2024-10-17 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
- 2024-10-17 mybatis中oracle模糊查询like concat报错
- 2024-10-17 如何高效进行Oracle巡检?顺序方法缺一不可
- 2024-10-17 详解4个方法--解决Oracle快照过旧问题
- 2024-10-17 Kettle 连接Oracle rac报ORA-12505错误解决方法
- 2024-10-17 centos7.4安装oracle11GR2报错解决办法
- 2024-10-17 centos安装oracle 11.2.0.1报错的处理方法
- 2024-10-17 详解Oracle数据库如何有效处理失效对象
- 2024-10-17 Oracle常见问题 IMPDP导入时报错:IMP-00034
- 2024-10-17 Java中常见的20个错误及解决方案 java: 错误: 不支持发行版本 6
你 发表评论:
欢迎- 05-11FANUC修改前端目录教程
- 05-11前端分享-Set你不知道的事
- 05-11jq+ajax+bootstrap改了一个动态分页的表格
- 05-11千万级大表分页查询效率剧降,你会怎么办?
- 05-11Elasticsearch深度分页
- 05-11如何写一个简单的分页
- 05-11手速太快引发分页翻车?前端竞态陷阱揭秘
- 05-11「linux」Socket缓存是如何影响TCP性能的?
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)