12c 新特性之 Limiting the Size of the Program Global Area

在自动PGA管理模式下,Oracle使用动态参数PGA_ARRGREATE_TARGET来控制PGA中Work Areas大小的分配。不过,PGA内存的分配是可以超过PGA_ARRGREATE_TARGET设置的值的,原因如下:

1.参数PGA_ARRGREATE_TARGET实际上只作为一个目标,而不是实际的限制。
2.参数PGA_ARRGREATE_TARGET仅仅能够限制那些可调的内存(work areas)。

PGA内存分配过多可能导致服务器内存不足进而产生换页操作,如果发生大量换页,系统将变得响应缓慢性能不稳,如果是RAC还可能引起脑裂。从12c开始,如果遇到这种情况,可以考虑使用PGA_AGGREGATE_LIMIT参数来彻底限制PGA内存的过度分配问题。

参数PGA_AGGREGATE_LIMIT允许你对PGA内存的使用指定一个硬性的限制。如果PGA内存的使用超过了参数设置的值,Oracle会根据下面的顺序中止或终结耗费了大部分不可调节PGA内存的进程或会话:

1.耗费了大部分不可调节PGA内存的会话调用将被中止(注意是会话调用被中止,而不是会话或进程)。
2.在上面的情况被处理后,如果PGA内存仍然超过PGA_AGGREGATE_LIMIT值,则耗费大部分PGA内存的进程和会话将被终止(相当于被kill掉)。

Oracle会将并行执行的查询作为一个整体单位进行处理。

默认情况下,PGA_AGGREGATE_LIMIT参数至少被设置为大于2GB,或者PGA_ARRGREATE_TARGET值的2倍,或者PROCESSES参数值的3倍,三者之中取最大值。无论怎样,它都不应该超过物理内存减去SGA内存大小的120%,该参数的默认值会被记录在alert log中。

无论是否使用自动内存管理,你都可以设置PGA_AGGREGATE_LIMIT,该参数是动态参数,修改后即生效,不需要重启数据库。
PGA_AGGREGATE_LIMIT值可以是K,M,G。设置为0则禁止PGA内存分配的硬限制。


Example:
ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=12G;

以下内容来自我的测试环境,pga_aggregate_target设置为500M,根据上面的算法,500M*2=1000M,300*3=900M。 这两个条件均还没有超过2G,所以pga_aggregate_limit默认值为2G。


SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 2G
pga_aggregate_target                 big integer 500M


SQL> show parameter processes
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
processes                            integer     300


现在我将processes参数扩大至1000,可以看到根据算法pga_aggregate_limit被修改成了3GB。
SQL> alter system set processes=1000 scope=spfile;
System altered.


SQL> startup force
ORACLE instance started.


Total System Global Area 2147483648 bytes
Fixed Size                  3712904 bytes
Variable Size            1056966776 bytes
Database Buffers         1073741824 bytes
Redo Buffers               13062144 bytes
Database mounted.
Database opened.
SQL> show parameter processes
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
processes                            integer     1000

SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 3000M
pga_aggregate_target                 big integer 500M


再来看我的另一个测试环境,由于pga_aggregate_target值较大,所以该参数默认被设置成了pga_aggregate_target的2倍大小。
SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 12880M
pga_aggregate_target                 big integer 6440M


SQL> show parameter processes


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
processes                            integer     300




结论就是pga_aggregate_limit参数的默认值取自2G,pga_aggregate_target*2,processes*3这三个值中的最大值。


原文来自
Oracle Database Performance Tuning Guide-->Tuning the Program Global Area-->Limiting the Size of the Program Global Area

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26753337/viewspace-2121957/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26753337/viewspace-2121957/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值