设为首页 收藏本站
查看: 1172|回复: 0

[经验分享] Oracle PGA自动管理在OLAP系统中的应用

[复制链接]

尚未签到

发表于 2016-8-7 06:31:26 | 显示全部楼层 |阅读模式
说明:
OLTP:联机事务处理系统,也就是我们常用的业务系统;
OLAP:联机分析处理系统,主要功能是数据查询、分析、统计、挖掘等等

Oracle从9i开始增加了PGA自动管理的功能,可以说是打开了ORACLE内存自动管理的新篇章。PGA自动管理把以前的sort_area_size,hash_area_size比较难配置的问题全解决了。一般建议OLTP系统PGA的大小为系统内存的20%左右,如一个系统2G的内存,那么通常数据库的PGA设置在400M左右。
ORACLE缺省每个session可使用的内存并不是全部PGA大小,实际上比这个小得多,普通会话可使用只有PGA的5%,并且不能超过100M,也就是说如果PGA设成400M,那一个会话可使用的排序加HASH的内存最大为400*0.05=20M。
有些OLAP或者是OLTP、OLAP混合数据库这个配置不一定能满足实际需求,因为OLAP系统一般session比较少,但一个查询要求的HASH及SORT的空间非常大,如果采用标准的5%的话,那么会有许多查询SORT及HASH内存不够,导至过多的磁盘排序或多回HASH连接的问题,这将严重影响系统性能。对于这个问题可以用四种方法处理。
1、增加PGA大小
ORACLE数据库的内存可以说主要由SGA+PGA两块组成。对于OLAP系统数据块缓冲命中率一般不会大于80%,即使增加BUFFER_SIZE作用也不明显,因为物量数据量明显大于内存。OLAP系统的共享池也不需要太大,虽然OLAP的一条SQL会比较复杂,但OLAP的SQL数量一般比OLTP系统少得多,并且SQL解析的时间不是性能的主要瓶颈。综上所述可以将减小的SGA大小用于PGA中
PGA的增大在OLAP系统中性能提升会比较明显一些,特别是发现磁盘排序及HASH多次读写的情况下。
2.对特殊会话采用手动PGA管理
这个方法就是将某个会话的PGA改为手动管理,再设置会话的sort_area_size和hash_area_size,然后再执行SQL,如下所示:
alter session set workarea_size_policy=MANUAL;
--50M
alter session set sort_area_size=52428800;
--200M
alter session set hash_area_size=209715200;
--执行处理
处理完后,根据需要将会话改为自动PGA管理
alter session set workarea_size_policy=AUTO;

这种方法一般用于OLAP系统的ETL中,ETL一般SORT及HASH比较多,并且ETL的时候一般只有一两个会话,所以手动管理不会对其它会话产生影响。

3.对查询或表设置并行处理
上面提到普通会话可使用只有PGA的5%,但是并行事务会话可使用的内存是PGA的30%,所以如果在表上设置并行度或在查询中设置并行提示可以一次使用比较多的PGA内存,如PGA=800M,那么就可以使用400*0.3=120M。
4.调整ORACLE内部隐藏参数
如果系统的并行性能不好或者调节了并行度会有其它影响的情况下,我们可以调整ORACLE内部隐藏参数来达到效果。前面提到的5%和30%两个数字其它是ORACLE的一个缺省值,我们可以通过调整ORACLE内部隐藏参数来改变这个缺省值。
这个两个隐藏参数分别为:
"_smm_max_size":PGA的默认每个用户使用的内存大小,单位为K
"_smm_px_max_size":PGA的默认并行用户使用的内存大小,单位为K

如下所示,设置"_smm_max_size"=100M,"_smm_px_max_size"=200M

alter system set "_smm_max_size"=102400 scope=both;
alter system set "_smm_px_max_size"=204800 scope=both;

注:
1.Oracle隐藏参数一般以下划线开头,所以修改时需要加上引号
2.如果调整过参数pga_aggregate_target后以上两个隐藏参数会重置为默认值
_smm_max_size=pga_aggregate_target*0.05
_smm__px_max_size=pga_aggregate_target*0.3

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-254000-1-1.html 上篇帖子: Oracle PL/SQL如何动态调用存储过程 下篇帖子: Oracle 数据库中查询当前有哪些用户连接。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表