首页 > 数据库 >Oracle 单进程可用PGA为4G限制导致的ORA-4030报错

Oracle 单进程可用PGA为4G限制导致的ORA-4030报错

时间:2023-04-18 10:03:17浏览次数:62  
标签:映射 PGA 条目 4030 报错 内存 ORA


一、 问题背景

收到开发反馈,系统报表运行过程中报错,一看发现是ORA-4030,内存的问题

Oracle 单进程可用PGA为4G限制导致的ORA-4030报错_内存映射

查看alert日志,发现期间有大量ORA-4030报错,并且主要是pga相关的

Oracle 单进程可用PGA为4G限制导致的ORA-4030报错_数据库_02

打开trace文件,可以看到报错进程使用内存接近4G

Oracle 单进程可用PGA为4G限制导致的ORA-4030报错_数据库_03

但是查看pga参数设置,发现设置的上限是20G,完全没到,并且期间总的PGA使用率也不高 

二、 报错原因

MOS搜索发现 Doc ID 1325100.1 文档,看到现象也是 

You are running a PL/SQL package or procedure and are consistently encountering an ORA-4030 when the process uses 4GB.  The values for the _PGA_MAX_SIZE and PGA_AGGREGATE_TARGET has been set to values even greater than the 4GB, but yet the same errors persist when 4GB is used.

而报错原因是:操作系统有默认单个进程最多只能打开65530个内存映射条目的限制。

cat /proc/sys/vm/max_map_count
65530

数据库有与之对应的隐含参数_realfree_heap_pagesize_hint,默认是65536,意思是realfree当前的分配大小是65536 bytes(64K)。

SELECT x.ksppinm NAME, y.ksppstvl VALUE,x.ksppdesc describ
FROM SYS.x$ksppi x, SYS.x$ksppcv y
WHERE x.indx = y.indx AND x.ksppinm = '_realfree_heap_pagesize_hint';

这个隐含参数表示操作系统上每个内存映射条目大小是64K,而操作系统上又限制每个进程最多能打开65530个内存映射条目,因此,每个进程使用PGA就不能超过4G。

select 65536*65530/1024/1024/1024 GB  from dual;
 
GB
----------
3.99963379

三、 解决方法

从问题的原因就可以猜到起码有两种解决思路:加大单个进程可打开的内存映射条目大小,加大每个内存映射条目大小,注意不要改得太大。前者改操作系统参数,后者改数据库隐含参数。

1. 加大单个进程可打开的内存映射条目大小

vi /etc/sysctl.conf
#修改为262144,单进程可用PGA变为16G
vm.max_map_count=262144

#参数生效
sysctl –p

这样每个内存映射条目大小64K,262144个条目就是16G,应该足够用了。这也是官方文档推荐的改法。

2. 加大每个内存映射条目大小

alter system set "_realfree_heap_pagesize_hint"=262144 scope=spfile;

上面的修改也会对应单进程PGA最大可用内存为16G,但是要重启数据库生效,并且隐含参数通常不建议修改

3. 优化SQL

对于小数据库,优先考虑这种方法,分析为什么要占用那么多PGA,进行优化。

四、 注意事项

根据文档 Doc ID 14119856.8,11.2.0.3及以下版本还有一个bug,会导致即使设置了上面的参数,单进程最大可用PGA也只能到16G,文档给出的 workaround是 Disable real free memory allocator。但是普通业务真的不建议单进程内存上限设这么大。

alter system set "_use_realfree_heap"=FALSE scope=spfile;

参考

PLSQL Procedure Causing ORA-04030: (pga heap,control file i/o buffer) And ORA-04030: (koh-kghu sessi,pmuccst: adt/record) or ORA-04030: (koh-kghucall ,pmucalm coll) Errors (Doc ID 1325100.1)

Bug 14119856 - ORA-4030 occurs at 16gb of PGA even if it could grow much larger (Doc ID 14119856.8)


标签:映射,PGA,条目,4030,报错,内存,ORA
From: https://blog.51cto.com/u_13631369/6202388

相关文章

  • 应用连MySQL 报错ERROR 1129 Host is blocked because of many connection errors
    开发反馈应用连MySQL报错 createconnectionSQLException,url:连接串,errorCode1129。搜索1129报错,报错内容为:Hostisblockedbecauseofmanyconnectionerrors一、报错原因同一个ip在短时间内产生太多中断的数据库连接(超过mysql数据库max_connection_errors设置),导......
  • 虚拟机ubuntu22.4报错ok_update_request:I/oerror, dev fdo, sector 0 op OX0:(READ)tl
    ok_update_request:I/oerror,devfdo,sector0opOX0:(READ)tlags0x0phys_segprioclass0BufferI/oerrorondevfdo,logicalblock0,asyncpageread如下图 不管你用的HYPER-V创建虚拟机,还是VMVBOX等。只要找到这里: 把DVD/CD或者软驱修改为物理驱动器,即可。 ......
  • centos登陆报错:System is booting up. Unprivileged users are not permitted to log
    问题:开机后ssh到服务器出现此报错,大概意思是系统正在启动中非授权用户不允许登录,解决:不需要处理,等会儿系统彻底起来后重新登陆就没有了,对应文件在/run/nologin ......
  • wangeditor5 vue2 安装后运行报错 Error in ./node_modules/@wangeditor/editor/d
    问题解决方法:原因就是引入的链接不对,使用cnpm、npm、pnpm、yarn安装插件的时候,路径都是不一样的,所以要对应着改路径就可以了链接:https://github.com/wangeditor-team/wangEditor/issues/4041......
  • 【FPGA】vivado使用时的问题汇总
    今天在使用vivado的时候,出现了之前的错误,但是我忘记了解决方案,只能再去网上找方法。所以我建了个这个问题汇总博客,以后再碰到问题可以先来这里翻一翻。1、MIGIP核在重新打开工程的时候会丢失一些文件,导致无法仿真,需要重新生成一遍IP核才能够正常使用。同样的,在OpenIPExample......
  • vSphere Web Client 添加主机进VSAN集群时报错“SAN 主机移至目标群集: vSAN 群集的 U
    案例描述vSphereWebClient添加主机进VSAN集群时,报“无法将vSAN主机移至目标群集:vSAN群集的UUID不匹配(主机:5223a6c9-cf94-f978-1abb-9906506626be,目标:523ae663-623b-e2fc-39e3-43b15c5ca801)。”错误。原因分析是因为该esxi主机已经加入过其它集群,和现在新加......
  • idea启动项目一直卡在build,编译报错outOfMemoryError:GC overhead
    今天启动项目突然不行了,一直卡在build,后来百度了下,说改编译方式,改成runmavengol,启动项目可以了但发现进行单元测试时还是不行,看到有报错outOfMemoryError:GCoverhead,原来是编译内存不够了解决方法:file->settings->Build->Compiler,按图改一下内容,OK了 ......
  • Splunk DB Connect 连接MySQL报错CLIENT_PLUGIN_AUTH is required
    01、问题描述使用SplunkDBConnect连接MySQL数据库读库时,报错CLIENT_PLUGIN_AUTHisrequired,如下图:02、原因分析根据报错信息,查阅相关资料,了解到报错原因:目标数据库为MySQL5.7,使用的mysql-connector-java-8.0.28.jar,mysql的jar包版本过高。JDBC数据库驱动程序:mysql-connector-......
  • 【FPGA 仿真和调试脚本】常用系统任务
    一、显示任务$display和$write系统显示任务$display和$write在仿真测试中是最为常用的信息显示方式。$display和$write任务最主要的区别在于,$display在一次输出后会自动换行,而$write则不会,他们的其他用法格式基本类似。【语法结构】【任务名】(“【可选字符串】+【格式】”,【信......
  • js报错:devtools failed to load source map : could no load content for
    报错:DevToolsfailedtoloadsourcemap:Couldnotloadcontentforhttp://localhost:8000/css/bootstrap.min.css.map:HTTPerror:statuscode404,net::ERR_HTTP_RESPONSE_CODE_FAILURE 解决方法:F12-点击设置齿轮-取消勾选EnableJavaScriptsourcemaps和EnableCSS......