经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
(oralce)pga_aggregate_target与workarea_size_policy相互关系验证
来源:cnblogs  作者:一回生,二回熟~~  时间:2019/4/10 8:49:53  对本文有异议

pga_aggregate_target与workarea_size_policy相互关系验证

 

先放上结论:

1. 当pga_aggregate_target设置为非0, 手工设置(workarea _size_policy设置为manual),这时使用的 manual管理模式,而不是auto管理模式

2. 当内存为自动管理时(2个条件同时满足,pga_aggregate_target设置为非0,workarea _size_policy设置为auto),sort_area_size不生效;当内存为手动管理时(1个条件,workarea _size_policy设置为manual,不管pga_aggregate_target是什么值),sort_area_size生效。

 

问题:

 

今日,从网上看到一篇总结pga方面参数配置的文章,其中提到<2>点,workarea _size_policy设置为manual,pga_aggregate_target设置为非0,会使用自动内存管理。

我对于其中的第二点持怀疑态度,遂做一个测试。

 

单个session的PGA内存使用量限制有比较多的概念,现在统一梳理一下:

1、关于PGA内存是自动管理还是手工管理,以及*_area_size(例如 sort_area_size)参数是否生效

workarea_size_policy:该参数定义数据库PGA内存是否自动管理,同时涉及到SQL运行中各种内存参数设置是否生效;当PGA内存为自动内存管理(workarea_size_policy =auto),有关SQL运行的各种内存参数设置(例如sort_area_size 排序内存大小)均不生效,但至于SQL运行的各种内存参数设置生否真的生效,还与pga_aggregate_target值有关,具体如下:

(1)workarea _size_policy设置为auto,pga_aggregate_target设置为0 ,不会使用自动内存管理,因为当pga_aggregate_target设置为0时,workarea _size_policy自动设置为manual。

(2)workarea _size_policy设置为manual,pga_aggregate_target设置为非0,会使用自动内存管理。因为,如果设置pga_aggregate_targe为非0,workarea _size_policy自动设置为auto,因此,使用自动管理。

-- 经过自己的测试,这个说法是不正确的,当pga_aggregate_target设置为非0, 手工设置(workarea _size_policy设置为manual),这时使用的 manual管理模式,而不是auto管理模式

(3)如果不设置pga_aggregate_targe,那么系统缺省也是使用自动管理,并且设置该参数的值为SGA的20%和10M中较大的值。

总之:当内存为自动管理时(2个条件同时满足,pga_aggregate_target设置为非0,workarea _size_policy设置为auto),sort_area_size不生效;当内存为手动管理时(1个条件,workarea _size_policy设置为manual,不管pga_aggregate_target是什么值),sort_area_size生效。

 

测试:

 

主要通过看v$pgastat 的 如下4个指标来观察到底用了什么方式的pga管理,到底是 manual还是 auto

  1. total PGA used for auto workareas
  2. maximum PGA used for auto workareas
  3. total PGA used for manual workareas
  4. maximum PGA used for manual workareas

 

 

1.首先禁用AMM

  1. memory_max_target big integer 0
  2. memory_target big integer 0

 

2. 系统目前状态, pga_aggregate_target=224M , workarea_size_policy= AUTO

71VDLD]C(O6)RZX6F31I}05

3. 手动设置 workarea_size_policy= manual

注释: 在设置为manual之后,测试了一下重新将 pga_aggregate_target设置为另外一个值,这时并不会将workarea_size_policy自动设置为auto,看来官网上说的是从0设置为其他值时,才会将policy自动改为auto

G~]0QG}~)}$AG]CS)0SP259

4. 重启实例,可以看到这4个相关指标都是0

H[S1UL{SF2$L_6J2F5~848J

5.创建测试表

  1. SQL> create table x as select * from dba_objects;
  2. Table created.
  3. SQL> insert into x select * from x;
  4. 86672 rows created.
  5. SQL> insert into x select * from x;
  6. 173344 rows created.
  7. SQL> commit;
  8. Commit complete.

 

6. 执行一个较大的排序查询,select * from x order by OBJECT_ID,LAST_DDL_TIME;

7.再次观察 v$pgastat , 

可以看出  manual的2个相关指标有变化了,而 auto都是0,这里说明了 真实采用的是 manual方式。

}7N7`Y6L]40P1F_MY4JMD7S

8.改回 auto再试试

PETNM~N1P}7%H$W7_)VW{)2

9.执行sql前

  1. total PGA used for auto workareas 0 bytes
  2. maximum PGA used for auto workareas 0 bytes
  3. total PGA used for manual workareas 67584 bytes
  4. maximum PGA used for manual workareas 274432 bytes

 

 

10.执行sql  select * from x order by OBJECT_ID,LAST_DDL_TIME;

11. 再次观察,发现auto指标变化了, 而 manual毫无变化

  1. total PGA used for auto workareas 0 bytes
  2. maximum PGA used for auto workareas 0 bytes
  3. total PGA used for manual workareas 67584 bytes
  4. maximum PGA used for manual workareas 274432 bytes

 

12, 经过几次反复的验证,证明了 pga是采用auto模式还是manual模式,是由参数  workarea_size_policy控制的,而跟 pga_aggrate_target没关系。

 

结论:

 

  1. 2workarea _size_policy设置为manualpga_aggregate_target设置为非0,会使用自动内存管理。
    因为,如果设置pga_aggregate_targe为非0workarea _size_policy自动设置为auto,因此,使用自动管理。
  2. -- 经过自己的测试,这个说法是不正确的,当pga_aggregate_target设置为非0 手工设置(workarea _size_policy设置为manual),这时使用的 manual管理模式,而不是auto管理模式

 

 

总之:当内存为自动管理时(2个条件同时满足,pga_aggregate_target设置为非0,workarea _size_policy设置为auto),sort_area_size不生效;

         当内存为手动管理时(1个条件,workarea _size_policy设置为manual,不管pga_aggregate_target是什么值),sort_area_size生效。

原文链接:http://www.cnblogs.com/simple-oracle/p/10677231.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号