当前位置:  数据库>oracle

Oracle 12C 新特性:限制PGA使用内存的大小

    来源: 互联网  发布时间:2017-06-26

    本文导语: 我们都知道,在12C之前,对于PGA内存的管理是使用PGA_AGGREGATE_TARGET参数来控制的,但这个参数也只是一个参考值,Oracle实例只是尽量保证总的PGA使用量在这个值范围内,当会话使用的PGA内存超过这个限制时,Oracle也不能做出什么...

我们都知道,在12C之前,对于PGA内存的管理是使用PGA_AGGREGATE_TARGET参数来控制的,但这个参数也只是一个参考值,Oracle实例只是尽量保证总的PGA使用量在这个值范围内,当会话使用的PGA内存超过这个限制时,Oracle也不能做出什么强制措施来限制使用内存的大小。
12.1.0.1版本中引入了新特性:使用PGA_AGGREGATE_LIMIT参数来限制Oracle实例PGA使用内存的上限。后台进程ckpt每三秒检查一次PGA使用的内存总量,如果超过限制就采取终止会话的方式来降低PGA内存的使用量,对于SYS用户进程和后台进程不包括job队列不会被终止掉。有了这个限制,不会造成PGA内存疯涨,导致内存耗尽。
官方文档:http://docs.oracle.com/database/121/TGDBA/tune_pga.htm#TGDBA95344
默认地PGA_AGGREGATE_LIMIT参数为2G或200%的PGA_AGGREGATE_TARGET值或PROCESSES参数值*3M
测试数据库版本12.1.0.2

SQL> select * from v$version;
 
BANNER                                          CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production        0
PL/SQL Release 12.1.0.2.0 - Production                            0
CORE    12.1.0.2.0  Production                                0
TNS for Linux: Version 12.1.0.2.0 - Production                          0
NLSRTL Version 12.1.0.2.0 - Production                            0

查看PGA_AGGREGATE_LIMIT参数值大小为2G
SQL> show parameter pga
 
NAME                    TYPE  VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit          big integer 2G
pga_aggregate_target            big integer 250M

创建测试用户

SQL> alter session set container=pdb_orcl;
 
Session altered.
 
SQL> create user zx identified by zx;
 
User created.
 
SQL> grant dba to zx;
 
Grant succeeded.
 
SQL> conn zx/zx@pdb_orcl
Connected.

创建一个包用于演示占用PGA
SQL> create or replace package demo_pkg
  2  as
  3          type array is table of char(2000) index by binary_integer;
  4          g_data array;
  5  end;
  6  /
 
Package created.

查看当前会话sid和使用PGA内存情况
SQL> select userenv('sid') from dual;
 
USERENV('SID')
--------------
            22
--当前会话sid为22
SQL> select a.name, to_char(b.value, '999,999,999') bytes,
  2        to_char(round(b.value/1024/1024,1), '99,999.9' ) mbytes
  3    from v$statname a, v$mystat b
  4  where a.statistic# = b.statistic#
  5    and a.name like '%ga memory%';
 
NAME                                                            BYTES        MBYTES
---------------------------------------------------------------- ------------ ---------
session uga memory                                                  2,301,312      2.2
session uga memory max                                              2,424,824      2.3
session pga memory                                                  3,715,176      3.5
session pga memory max                                              3,715,176      3.5
--当前会话使用PGA内存为3.5MB

执行前面创建的包,查看PGA内存使用情况
--循环执行200000次查看PGA内存使用情况
SQL> begin
  2          for i in 1 .. 200000
  3          loop
  4                  demo_pkg.g_data(i) := 'x';
  5          end loop;
  6  end;
  7  /
 
PL/SQL procedure successfully completed.
 
SQL> select a.name, to_char(b.value, '999,999,999') bytes,
  2        to_char(round(b.value/1024/1024,1), '99,999.9' ) mbytes
  3    from v$statname a, v$mystat b
  4  where a.statistic# = b.statistic#
  5    and a.name like '%ga memory%';
 
NAME                                                            BYTES        MBYTES
---------------------------------------------------------------- ------------ ---------
session uga memory                                                470,213,072    448.4
session uga memory max                                            470,213,072    448.4
session pga memory                                                471,773,288    449.9
session pga memory max                                            471,773,288    449.9
--共使用449MB内存,可以算出循环执行200000*5次占用的PGA就会超过设置的2G
SQL> begin
  2          for i in 1 .. 1000000
  3          loop
  4                  demo_pkg.g_data(i) := 'x';
  5          end loop;
  6  end;
  7  /
begin
*
ERROR at line 1:
ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
--报错ORA-4036超过了PGA_AGGREGATE_LIMIT设置的2G

调整PGA_AGGREGATE_LIMIT为4G后再次执行报错的过程,就没有问题了
SQL> conn / as sysdba
Connected.
SQL> alter system set PGA_AGGREGATE_LIMIT=4G;
 
System altered.
 
SQL> conn zx/zx@pdb_orcl
Connected.
SQL> begin
  2          for i in 1 .. 1000000
  3          loop
  4                  demo_pkg.g_data(i) := 'x';
  5          end loop;
  6  end;
  7  /
 
PL/SQL procedure successfully completed.
 
SQL> show parameter pga
 
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 4G
pga_aggregate_target                big integer 250M

取消PGA限制,设置pga_aggregate_limit=0即可。
alter system set PGA_AGGREGATE_LIMIT=0;


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 监听内存泄露问题
  • fedora10安装oracle11g提示物理内存不足怎么办?
  • 通过进程id号知道一个Oracle会话所占用的内存
  • ■帮一个朋友维护网站,oracle运行半小时就自动锁死,用top发现是其狂吃内存,直到吃完为止。怎么办啊
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • 我准备装linux 7.3,大家能给点意见吗,我1GB的内存,那么交换区设多大? oracle9i能在7.3上通过吗?
  • Oracle安装过程中物理内存检查及临时temp空间不足问题解决
  • 读一个10M的txt文件到Oracle数据库中,用C实现,请问有什么好的方法吗?即不怎么占内存,又不怎么占Cpu!
  • 甲骨文宣布推出Oracle内存数据库11g
  • Oracle内存数据库11g和高速缓存11g上市
  • Oracle Siebel Option Pack for IE ActiveX控件内存初始化漏洞
  • Oracle专用服务器的内存结构分布原则
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3