Oracle 解决4031错误

devtools/2024/10/19 6:25:46/

一、问题描述

什么是4031错误和4031错误产生的原因:
简单一个句话概括:

  • 由于服务器一直在执行大量的硬解析,导致Oracle 的shared pool Free空间碎片过多,大的chunk不足, 当又一条复杂的sql语句要硬解析时, 缺少1个足够大的Free chunk, 通常就会报4031错误.

二、解决方法

临时解决推荐方法1,其他一般推荐方法4和5,大佬推荐方法2和3解决。

方法1.清空Shared pool缓存.

此方法治标不治本,以后还会报4031,可以再次清理shared pool解决
执行

alter system flush shared_pool;

在这里插入图片描述

方法2.共享SQL

这一块需要自己理解,我是根据学习了相老师讲解的方法,可以搜索一下共享sql减少硬解析的方法;

方法3. 将复杂sql语句及执行计划强制保留在缓存

dbms.shared_pool.keep('object_name')

此话怎么理解? 其实导致4031错误的原因是shared_pool空间没有足够大的chunk提供给新的复杂sql语句进行硬解析, 其实也不是单纯地因为free 空间碎片太多, 其实当free空空间没有足够大的chunk时, oracle 会释放 Library cache中長时间不使用的chunk.

举个例子, 1个数据库实例中, free空间中chunk数量很少了,而且没有足够大的chunk, 这时有1个中等规模的sql要硬解析,就会从library cache中找那些不长用的chunk释放出来, 如果释放里面若干个小规模的chunk, 是无问题的.

但是如果其中library cache 有个很大的chunk存放着1个很复杂的sql语句, 但是长时间没有被使用了, 有可能这个chunk被释放出来被使用, 而且被拆解了… 其中一部分别使用, 另1部分被放入free空间中.

而之后偏偏那个很复杂的sql语句又执行了,需要硬解析, 而那个足够大的chunk已被分解… 则有可能报4031错误.

所以方法3就是指定一些sql语句的缓存长期保留, 不让他们被释放, 避免这种情况的发生.

方法4 增加shared pool空间.

一般当服务器增加内存的时候, 就可以给shared pool增加空间:

一般来讲Oracle 10g以后 SGA里面各大池空间都是动态分配的, 一般增加SGA大小即可.
在这里插入图片描述
这个大小不要小于你查询到的大小

alter system set sga_target = 5000M;                  --注意不能超过sga_max_size
alter system set sga_max_size = 5000M;              --该这个必须重启数据库, 目的 是限制sga_target, 以免sga_target不小心设置过大,倒置服务器内存耗尽挂掉

也可以单独设置shared pool的大小:
查询shared pool的大小
在这里插入图片描述
注意这个设置的大小不要小于查询到的大小

alter system set shared_pool_size  = 2G;      

注意默认情况下 用show parameter 来查查看 sga_target 和 shared_pool的话, value 都是0的, 并不是说它们的当前值就真的是0了,只是0是代表交由Oracle自己管理的意思.

可以用这个语句可以查看当前的各大池占用大小:

select component, current_size from v$sga_dynamic_components;

在这里插入图片描述

方法5: 保留区

oracle 为了避免4031错误, 其实还可以在shared pool划出1个保留的free 空间, 平时不会使用, 专门应对突然出现的复杂sql语句硬解析,相当与应急用的空间啦. 这个方法相当有效, 可以避免大部分的4031错误, 不过缺点就是平时减少了shared pool的可用空间, 减低了数据库缓存性能啦~

我们可以用下面这条语句来查看 在保留区请求失败的次数:

select request_misses from v$shared_pool_reserved;

我自己测试的,所以是0,如果这个数字不为0,就会出现4031错误
在这里插入图片描述

注意这个次数一旦 大于1, 就证明发生过4031错误! 因为既然去保留区申请空间了, 证明是1个复杂的sql语句, 还申请失败的话,就会报4031错误啦~ 所以这个次数最好就是0啦.
如果不为0我们就要扩大保留区:
查看保留区大小:
在这里插入图片描述
设置保留区大小都一样啦:
这个数字我随便写的,这个数字要大于你原来的保留区的大小

alter system set shared_pool_reserved_size = 500m;

注意不要设置过大啦, 你懂的.

扩展

shared pool最佳设置大小

select 'shared pool' component,   shared_pool_size_for_estimate estd_sp_size,estd_lc_time_saved_factor parse_time_factor,case when current_parse_time_elapsed_s + adjustment_s < 0then 0else      current_parse_time_elapsed_s + adjustment_send  response_timefrom ( select a.shared_pool_size_for_estimate,a.estd_lc_time_saved_factor,a.estd_lc_time_saved,e.value/100 current_parse_time_elapsed_s,c.estd_lc_time_saved - a.estd_lc_time_saved adjustment_sfrom   v$shared_pool_advice a,(select * from v$sysstat where name ='parse time elapsed') e,(select estd_lc_time_savedfrom   v$shared_pool_advicewhere shared_pool_size_factor = 1) c);

在这里插入图片描述
一般来讲, 当PARSE_TIME_FACTOR 为 1设置的大小最合理,我们可以设置2512M。


http://www.ppmy.cn/devtools/57850.html

相关文章

LeetCode 3101.交替子数组计数:等差数列求和(较详题解)

【LetMeFly】3101.交替子数组计数&#xff1a;等差数列求和&#xff08;较详题解&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-alternating-subarrays/ 给你一个二进制数组 nums 。 如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况&a…

嵌入式c语言——类型修饰符

register&#xff0c;将变量保存在寄存器中&#xff0c;使得访问速度增加 const是常量&#xff0c;static是静态量&#xff0c;volatile是

文化财经macd顶底背离幅图指标公式源码

DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA),COLORSTICK; JC:CROSS(DIFF,DEA); SC:CROSSDOWN(DIFF,DEA); N1:BARSLAST(JC)1; N2:BARSLAST(SC)1; HH:VALUEWHEN(CROSSDOWN(DIFF,DEA),HHV(H,N1));//上次MACD红柱期间合约最大值 HH2:VALUEWHE…

香橙派AIpro测评:yolo8+usb鱼眼摄像头的Camera图像获取及识别

一、前言 近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比&#xff0c;同时还可以兼容ubuntu、安卓等多种操作系统&#xff0c;今天博主便要在一块832g的香橙派AI香橙派AIpro进行YoloV8s算法的部署并使用一个外接的鱼眼USB摄像头…

Java信号量semaphore的原理与使用方法

Semaphore的基本概念 在Java中&#xff0c;Semaphore是位于java.util.concurrent包下的一个类。它的核心就是维护了一个许可集。简单来说&#xff0c;就是有一定数量的许可&#xff0c;线程需要先获取到许可&#xff0c;才能执行&#xff0c;执行完毕后再释放许可。 那么&…

深度解析:机器学习与深度学习的关系与区别

一、前言 在人工智能领域&#xff0c;机器学习与深度学习常常被提及并广泛应用。虽然它们在本质上都是通过数据训练模型以进行预测或分类&#xff0c;但两者之间存在着显著的区别和联系。本文将深入解析机器学习与深度学习的关系与区别&#xff0c;帮助读者更好地理解和应用这…

概率统计(二)

二维离散型 联合分布律 样本总数为16是因为&#xff0c;两封信分别可以放在4个信箱 边缘分布律 条件分布律 独立性 选填才能用秒杀 联合概率乘积不等于边缘概率的乘积则不独立 二维连续型 区间用一重积分面积用二重积分 离散型随机变量

【postgresql】索引

见的索引类型&#xff1a; B-tree 索引&#xff1a;这是最常用的索引类型&#xff0c;适用于大多数查询。B-tree索引可以高效地处理范围查询。 Hash 索引&#xff1a;适用于等值查询&#xff0c;但不支持范围查询。 GiST 索引&#xff1a;通用搜索树&#xff08;GiST&#xf…