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

[经验分享] ORACLE PGA(程序全局区)

[复制链接]
YunVN网友  发表于 2018-9-9 10:57:18 |阅读模式
  SGA(System Global Area),即系统全局区,管理数据库buffer cache,java,stream的内存区
  PGA (Process Global Area),即程序全局区,主要用于管理进程的内存区
  UGA(User Global Area),即用户全局区,处理用户会话相关信息的内存区
  CGA(Call Global Area),即调用全局区,处理如排序、HASH JOIN、位图合并等工作的内存区
  如果采用专用服务模式(Dedicated Server Connection)那么UGA在PGA中分配,如果采用共享服务模式(Shared Server Connection),那么UGA在SGA区的Large pool中分配。
  UGA组成:
  UGA=User Session+Cursor state+Sort Area Retained
  User Session:用户会话,存放用户权限、角色、性能统计等信息。
  Cursor state(私有SQL区):即一个句柄,或称为指针、引用指向Sql私有区。然后私有Sql区又指向共享Sql区。私有Sql区分两个部分:
  固定部分:绑定信息,数据结构信息,指针。随session的创建而创建,结束而释放。
  动态部分:执行sql的中间结果集,如多表关联、排序。随sql创建而创建,结束而释放。
  专用模式下的PGA组成:
  PGA=UGA+CGA
  PGA的管理模式:

  •   手动管理模式,用户指定排序区和散列区所使用的内存,每个连接使用相同的内存。
  •   自动管理模式,设定PGA的总量,由Oracle根据系统负载自行决定分配。
  PGA内存管理模式由WORKAREA_SIZE_POLICY控制
  设为MANUAL,启动手动内存管理。
  设为AUTO,并且PGA_AGGREGATE_TARGET不为0时,启动自动内存管理。
  手动PGA内存管理受三个参数的影响最大
  SORT_AREA_SIZE 排序区,用于排序时存放排序数据的内存区,属于PGA
  SORT_AREA_RETAINTED_SIZE 排序完成后用于保存排序数据的内存,属于UGA
  HASH_AREA_SIZE 储存散列表的内存
  这三个参数设置的情况如下:
  SORT_AREA_SIZE=SORT_AREA_RETAINTED_SIZE
  则排序在内存中进行,且排序结果均保存在内存中。
  SORT_AREA_SIZE>SORT_AREA_RETAINTED_SIZE
  则在SORT_AREA_SIZE规定的大小中排序,并保留SORT_AREA_RETAINTED_SIZE规定大小的排序数据,超出部分排序数据写到临时表中,排序完成后,把排序数据存放在SORT_AREA_RETAINTED_SIZE,最终反馈给终端。如果SORT_AREA_RETAINTED_SIZE设置为0,则与第一种情况相同。
  当一个多个结果集关联时,会用到HASH_AREA_SIZE,两个集合中较小的一个会散列到内存中作为驱动表,散列区放不下的部分都会通过联结键存储在临时表空间中。HASH_AREA_SIZE过小会影响集合关联时的性能。
  备注:
  1)如需要排序的数据量大于SORT_AREA_SIZE,Oracle进行分批排序,将排序的结果存到临时表空间中,然后对剩余部分进行排序。最后还需要对保存在临时表中的已排序数据进行再排序,因为每次保存到临时表空间中的已排序数据只是部分数据的排序,对于整体来说只是局部排序。
  2)参数的限制仅是对某个操作的限制,一个查询可以有多个操作,例如一个查询有10个排序,如果SORT_AREA_SIZE限制为5M,则10个排序占用50M排序内存。
  设置PGA自动管理
SQL> alter system set WORKAREA_SIZE_POLICY=auto;  
SQL> alter system set PGA_AGGREGATE_TARGET=;
  查看PGA建议视图
SELECT trunc(pga_target_for_estimate / 1024 / 1024) pga_target_for_estimate,  
       to_char(pga_target_factor * 100, '999.9') || '%' pga_target_factor,
  
       trunc(bytes_processed / 1024 / 1024) bytes_processed,
  
       trunc(estd_extra_bytes_rw / 1024 / 1024) estd_extra_bytes_rw,
  
       to_char(estd_pga_cache_hit_percentage, '999') || '%' estd_pga_cache_hit_percentage,
  
       estd_overalloc_count
  
  FROM v$pga_target_advice;
  参考 http://www.iyunv.com/database/201309/242229.html



运维网声明 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.iyunv.com/thread-568695-1-1.html 上篇帖子: oracle分组函数 下篇帖子: Oracle创建用户设置权限
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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