我是靠谱客的博主 霸气大地,最近开发中收集的这篇文章主要介绍PGA管理和调整,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        在Oracle 9i以后
1.PGA 手动管理模式
1.1 设置方法
alter system set workarea_size_policy=manual scope=both; alter system set sort_area_size=2m scope=both; alter system set hash_area_size=2m scope=both; alter system set bitmap_merge_area_size scope=both;
1.2 pga手动管理模式的缺点
临时表空间申请一块2m的空间,与原来的pga2m空间一起使用, 就够2m了。  但是我们知道pga空间实际上就是内存空间, 而临时表空间对应1个或多个dbf,是1个物理磁盘空间。

所以9i 以后,绝大部分情况下,强烈建议使用pga自动管理模式。

2.PGA 自动管理模式
2.1 设置方法
 alter system set workarea_size_policy=auto scope=both;
//默认就是auto
alter system set pga_aggregate_target=512m scope=both;
//将公共SGA大小上限设为512M


                  2.2 应该设为多大才合适
在OLTP系统中, 典型PGA内存设置应该是内存的较小部分(例如15%), 剩下的80%交给SGA
                 
                  2.3 pga_aggregate_target 其实并不是1个硬性指标, 而只是1个临界值。
怎么说呢, 举个例子:
2.4 每个session最大能分配多少sga空间
上面都提过了,实际上1个server process不能独占公共PGA中的所有空间, Oracle中存在1个_pga_max_size, 指定1个session 最多能获得多少pga空间。


 
                     如上图, 这个值是200M, 也就是说任意1个process pga上限是200M啦

              2.5 查看当前session占用Pga情况
其实我们也可以根据数据库大概的session数量来决定公共PGA的大小.


                   只有3个session啦.   其中PGA_MAX_MEM意思是这个session占用过PGA的最大值.    2.6 利用$pga_advice_target 来决定公共PGA大小   
执行如下如句:

         

其中Cache_HIT_PREC 就是内存命中率,  EDTD_OVERALLOC_COUNT就是硬盘IO次数, 上图中设为108MB就足够了.
                       2.7 数据库当前内存排序和磁盘排序的次数                       执行如下如句:
select * from V$SYSSTATwhere name like '%sort%';
执行结果:
                       


可以见到磁盘排序次数为0, 当然我用的只是符合很小的学习数据库啦.                          
     但是在11g中, 使用的是AMM(Auto Memory Management)管理模式,pga的管理更加方便了, pga_aggregate_target 默认是0, 也就是说支持自动管理,会动态地增加和减少,但是大小不会超过memory_max_target 这个值.

转载于:https://www.cnblogs.com/nvd11/archive/2013/04/02/2996775.html

最后

以上就是霸气大地为你收集整理的PGA管理和调整的全部内容,希望文章能够帮你解决PGA管理和调整所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论