如何使用新参数 PGA_AGGREGATE_LIMIT 限制数据库进程可以增长到的最大大小。 在自动化 PGA 内存管理模式下,Oracle 数据库通过动态控制分配到工作区的 PGA 内存量来尝试遵从 PGA_AGGREGATE_TARGET 值。 但是,有时因为以下原因,PGA 内存使用量可能会超过 PGA_AGGREGATE_TARGET 设置: PGA_AGGREGATE_TARGET 设置起到的是目标的作用,而非限制。 PGA_AGGREGATE_TARGET 仅控制可优化部分内存的分配。 使用大量 PGA 可能会导致高交换率。出现这种情况时,系统可能会无法响应,并且不稳定。这种时候需要考虑使用 PGA_AGGREGATE_LIMIT 初始化参数限制整体 PGA 使用量。 12c 引入了新的参数 PGA_AGGREGATE_LIMIT 以允许数据库管理员限制 pga 内存使用总量。 使用 PGA_AGGREGATE_LIMIT初始化参数可以为 PGA 内存使用量指定硬性限制。如果超过了 PGA_AGGREGATE_LIMIT 值, 则 Oracle 数据库按照以下顺序,中断或者终止使用了最多不可优化 PGA 内存的会话或进程: 中止使用最多不可优化 PGA 内存的会话调用。 如果 PGA 内存使用量仍超过 PGA_AGGREGATE_LIMIT,则终止使用了最多不可优化 PGA 内存的会话和进程。 使用最多不可优化内存会话的调用将被中止。并行查询将被视为一个单元。如果 PGA 内存使用总量仍超过限制,则将终止使用最多不可优化内存的会话。 不会对除作业队列进程之外的 SYS 进程和后台进程执行这一部分中所述的任何操作。取而代之的操作是, 如果它们使用了最多不可优化内存,则会定期将其 PGA 使用量的简短摘要写入到跟踪文件中。 显式设置 PGA_AGGREGATE_LIMIT 与将其设置为默认值,在行为上没有差别。 PGA_AGGREGATE_LIMIT 初始化参数动态设置为 PGA 内存的实例范围硬性限制。由于该参数根据内存情况的变化做出响应,您无需显式设置参数值。默认情况下,PGA_AGGREGATE_LIMIT 设置为以下值中的较大者: 2 GB 200% 的 PGA_AGGREGATE_TARGET (PROCESSES 初始化参数设置值)* 3 MB 该参数不会超过物理内存大小减去总 SGA 大小的 120%。 如果指定了值 0,则表示实例所使用的 PGA 内存总量没有限制。 PGA_AGGREGATE_LIMIT 初始化参数可以动态设置;并不需要数据库重新启动。可以设置 PGA_AGGREGATE_LIMIT 的值,不论是否使用了自动内存管理。 后台进程 CKPT 每三秒检查一次内存用量是否超过了 PGA_AGGREGATE_LIMIT 初始化参数的值。如果达到或超过了限制, 则此进程中断使用最多不可优化 PGA 内存的会话调用。如果这些会话仍没有释放足够内存,则终止它们。 请注意,由于 pga 值仅每三秒检查一次,因此 pga 内存有可能超过 PGA_AGGREGATE_LIMIT。此外,如果在此期间该 pga 值减少到限制之下, 则将不会捕获在这三秒间隔内超过限制的情况。如果进程在三秒的间隔内快速分配然后释放内存,则可能会出现这种情况。 如果达到了 PGA_AGGREGATE_LIMIT 值,则将报告如下错误。 ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT Cause: Private memory across the instance exceeded the limit specified in the PGA_AGGREGATE_LIMIT initialization parameter. The largest sessions using Program Global Area (PGA) memory were interrupted to get under the limit. Action: Increase the PGA_AGGREGATE_LIMIT initialization parameter or reduce memory usage. 示例: 此示例将展示使用 pl/sql 填充内存中数组可以超过 pga_aggregate_limit 的值。 首先请查看当前 pga_aggregate_target。由于 pl/sql 内存区不是 pga 目标控制的可优化区域,进程 pga 将超过此值。 -- V$PGASTAT 的 PGA 统计信息: -- 显示自实例启动以来分配的最大 pga 总量 select name, ROUND(value/1024/1024) as Mbytes from v$pgastat where name in ('maximum PGA allocated','aggregate PGA target parameter','aggregate PGA auto target'); NAME Mbytes ---------------------- ------------ aggregate PGA target p 208 arameter aggregate PGA auto tar 138 get maximum PGA allocated 119 请注意 pga_aggregate_limit 显式设置为 512M。 select con_id, name as Parameter, value/1024/1024 as Mbytes from V$SYSTEM_PARAMETER where name in ('pga_aggregate_target','memory_target','memory_max_target','sga_max_size','sga_target','pga_aggregate_limit','processes') order by name; CON_ID PARAMETER Mbytes ------ ------------------------------ ------------ 0 memory_max_target 600 0 memory_target 600 0 pga_aggregate_limit 512 0 pga_aggregate_target 0 0 processes 0 0 sga_max_size 600 0 sga_target 0 运行这个过程的会话收到此错误: ERROR at line 1: ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT 针对 V$PROCESS 的查询显示进程在 ckpt进程捕获到这种情况并中止其对内存的调用之前,在 3 秒时间内增长到 2.5G 大小。 [Insert code here] CON_ID OSpid Orapid Sess id Serial# Status PGA alloc PGA used PGA Max PNAME oracleuser OS user Program ------ -------- ------- ------- ------- -------- ------------ ------------ ------------ ----- ------------ ------------ ------------------------ 4 5349 33 258 41 INACTIVE 3 2 2,536 SYSTEM oracle sqlplus@localhost.locald omain (TNS V1-V3) alert.log 显示以下错误。 Errors in file /u01/app/oracle/diag/rdbms/cdb1/cdb1/trace/cdb1_ora_5349.trc (incident=79479): ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT Incident details in: /u01/app/oracle/diag/rdbms/cdb1/cdb1/incident/incdir_79479/cdb1_ora_5349_i79479.trc Dumping diagnostic data in directory=[cdmp_20130128072143], requested by (instance=1, osid=5349), summary=[incident=79479]. 进程的跟踪文件显示与导致此错误的进程相关的信息。 通过显示的服务名您可以知道是哪个容器发生了错误。 跟踪文件还提供了摘要 heap dump(堆转储)。在本例中,主堆具有 2159MB 的“koh-kghu call”。在该堆中,子堆包括 2154 MB 的“pl/sql vc2”。 可以使用这些内容在 MOS 上搜索有关这些分配的任何已知问题。诸如这样一些与 pl/sql 相关的分配通常是 pl/sql 程序一次性将大量数据加载到内存中造成的。 在这样的情况下,应该变更程序,一次将有限数量的记录加载到内存中。替代方法是允许这样大的分配并增加 pga_aggregate_limit 的值 *** SERVICE NAME:(pdb1.example.com) 2013-01-28 07:44:27.902 <===-----------请注意指示哪个容器出现错误的服务的名称。 *** MODULE NAME:(SQL*Plus) 2013-01-28 07:44:27.902 *** ACTION NAME:() 2013-01-28 07:44:27.902 *** CONTAINER ID:(4) 2013-01-28 07:44:27.902 *** TRACE FILE RECREATED AFTER BEING REMOVED *** Process may have gone over pga_aggregate_limit Just allocated 65536 bytes Dumping short stack in preparation for potential ORA-4036 ----- Abridged Call Stack Trace ----- ksedsts()+313<-ksm_pga_limit_short_stack()+456<-ksm_check_over_limit()+540<-ksmapg()+351<-kghgex()+1426<-kghfnd()+745<-kghalo()+693<-kghgex() +401<-kghalf()+403<-kghualloc()+794<-kohalmc()+295<-kohalc()+110<-plsm0vc_rsz()+197<-pevm_MOVC_i()+1021<-pfrinstr_MOVC()+52 <-pfrrun_no_tool()+60<-pfrrun()+809<-plsql_run()+617<-peicnt()+287<-kkxexe()+789 ----- End of Abridged Call Stack Trace ----- ======================================= PRIVATE MEMORY SUMMARY FOR THIS PROCESS --------------------------------------- ****************************************************** PRIVATE HEAP SUMMARY DUMP 2161 MB total: 2161 MB commented, 261 KB permanent 481 KB free (256 KB in empty extents), 2159 MB, 1 heap: "koh-kghu call " 1 KB free held <=============指示在 pga 中使用内存的命名内存分配 ------------------------------------------------------ Summary of subheaps at depth 1 2155 MB total: 2155 MB commented, 104 KB permanent 295 KB free (20 KB in empty extents), 2154 MB, 138274 chunks: "pl/sql vc2 " <--------------------指示 pga heap(堆)中包含的子堆内存分配 *** 2013-01-28 07:44:28.045 Incident 79480 created, dump file: /u01/app/oracle/diag/rdbms/cdb1/cdb1/incident/incdir_79480/cdb1_ora_5349_i79480.trc ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT *********START PLSQL RUNTIME DUMP************ ***Got internal error Exception caught in pl/sql run-time while running PLSQL*** ***Got ORA-4036 while running PLSQL*** PROCEDURE SYSTEM.FILL_MEMORY: 意外事件文件显示程序堆栈及行号 Dump continued from file: /u01/app/oracle/diag/rdbms/cdb1/cdb1/trace/cdb1_ora_5349.trc ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT ========= Dump for incident 79480 (ORA 4036) ======== *** 2013-01-28 07:44:28.045 dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0) ----- Current SQL Statement for this session (sql_id=gqbtzt92rm1ck) ----- BEGIN fill_memory(2680000); END; ----- PL/SQL Stack ----- ----- PL/SQL Call Stack ----- object line object handle number name 0x77335850 7 procedure SYSTEM.FILL_MEMORY <-------程序的行号 0x77238760 1 anonymous block ----- Call Stack Trace -----
数据库参数 PGA_AGGREGATE_LIMIT 限制进程大小
来源:这里教程网
时间:2026-03-03 14:29:17
作者:
编辑推荐:
- 数据库参数 PGA_AGGREGATE_LIMIT 限制进程大小03-03
- Canonical 开源 MicroK8 | 云原生生态周报 Vol. 2503-03
- HAIP异常,导致RAC节点无法启动的解决方案03-03
- [20191106]隐式转换.txt03-03
- Oracle EBS 数据库密码复杂度设置03-03
- itpub插入超链接测试03-03
- ORACLE优化查询资源消耗的语句03-03
- dbca删除数据库时选项灰色03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- HAIP异常,导致RAC节点无法启动的解决方案
HAIP异常,导致RAC节点无法启动的解决方案
26-03-03 - Oracle EBS 数据库密码复杂度设置
Oracle EBS 数据库密码复杂度设置
26-03-03 - 今天才知道,微信中对方正在输入能永不显示,8年微信白玩了
今天才知道,微信中对方正在输入能永不显示,8年微信白玩了
26-03-03 - 0710_plsql 函数
0710_plsql 函数
26-03-03 - 阿里云入选Gartner 2019 WAF魔力象限,唯一亚太厂商!
阿里云入选Gartner 2019 WAF魔力象限,唯一亚太厂商!
26-03-03 - EBS FORM PLL 开发入门
EBS FORM PLL 开发入门
26-03-03 - 揭秘阿里云WAF背后神秘的AI智能防御体系
揭秘阿里云WAF背后神秘的AI智能防御体系
26-03-03 - 使用 Oracle logminer 挖掘日志恢复误删数据以及查找操作者
使用 Oracle logminer 挖掘日志恢复误删数据以及查找操作者
26-03-03 - OpenSearch最新功能介绍
OpenSearch最新功能介绍
26-03-03 - ORA-08103对象不再存在问题分析
ORA-08103对象不再存在问题分析
26-03-03
