Oracle学习笔记--系列一(13)

(13)如何解决ORA-04031错误

在这里插入图片描述

视频链接:
https://www.bilibili.com/video/BV1Zt411w7eQ?p=15&spm_id_from=pageDriver

1、解析命中率

select sum(pinhits)/sum(pins)*100 from v$librarycache;
select sum(gets) , sum(getmisses), 100*sum(gets-getmisses)/sum(gets) from v$rowcache where gets>0;

2、解决4031错误的方法
1)治标不治本

 alter system flush shared_pool ;

2)共享SQL,如果开发人员做不到共享sql,可以修改参数cursor_sharing

alter system set cursor_sharing='force';

修改参数后,可解决未使用绑定变量的情况,但是书写不规范的问题无法解决。

3、
1)执行@?/rdbms/admin/dbmspool.sql,产生DBMS_SHARED_POOL包
2)查看占用内存比较大的对象

select * 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’:

3)执行dbms_shared_poo1.keep('对象名’);
使大对象keep在内存中,不会被置换出来。

4、保留区
在shared pool中单独划出一部分空间reserved(保留区),这部分空间用来缓存大对象,当大小超过阈值时,会到保留区找空间,而不是free里找。
所以如果将保留区设置足够大的话,可以减少很多4031错误。

--查询在保留区中查询请求失败的次数,值最好为0 
select REQUEST_MISSES from v$shared_pool_reserved;
show parameter shared
alter system set  shared_pool_reserved_size=....

5、增加shared pool空间

select COMPONENT,CURRENT_SIZE from v$SGA_DYNAMIC_COMPONENTS;
show parameter sga_target
show parameter sga_max_size
alter system set shared_pool_size=150M scope=both;

sga_max_size是用来约束sga_target的,是静态参数,修改后需要重启数据库。
一般情况下sga_max_size=sga_target

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
发现改成4M,并没有生效。

修改的值必须大于自动分配的空间的大小,否则oracle不认。


上一篇:Oracle学习笔记–系列一(12)
下一篇:Oracle学习笔记–系列一(14)

おすすめ

転載: blog.csdn.net/Ruishine/article/details/120777331