ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 浅说Oracle PGA空间管理

浅说Oracle PGA空间管理

原创 Linux操作系统 作者:realkid4 时间:2011-10-08 21:31:12 0 删除 编辑

 

Oracle实例是Oracle Server的重要组成部分,理论上包括一块共享内存(Shared Memory)和一系列后台进程(Background Process)。远程Remote客户端通过在服务器端的代理Server Process与Oracle 实例进行通信交互。在每一个Server Process上,都对应一块私有的内存空间,我们称之为Private Global Area(简称为PGA)空间。本篇中,我们就简单介绍一下PGA的组成和管理细节。

 

1、PGA组成和功能

 

PGA是Server Process对应的私有空间,其中保存的都是与会话相关的数据和相关信息。PGA中,主要包括全局变量、数据结构和控制信息。比如我们常说的Session Cursor,就是在执行一个SQL的时候生成在PGA空间中,与SGA中Shared Cursor对应的SQL执行体。

 

在空间使用上,session cursor使用的PGA比较少。很多时候,Oracle的性能好坏是与PGA大小配置密切相关。在运行一些长时间执行、操作结果集合很大的SQL时,Oracle是会将处理的数据集和中间结果集合转移到Server Process的私有空间——PGA中进行处理。在笔者过去的一些文章中,也介绍过Hash、Group by和Sort等操作对PGA的空间使用情况。在Oracle中,对PGA中这样的空间称之为Work Area。

 

 

Work Area的大小设置是和Oracle性能密切相关。在Work Area的具体组成上,有几个比较需要关注的部分:hash_area、sort_area和bitmap_area。

 

 

SQL> show parameter hash_area

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

hash_area_size                       integer     131072

 

SQL> show parameter sort_area

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

sort_area_retained_size              integer     0

sort_area_size                       integer     65536

 

SQL> show parameter bitmap

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

bitmap_merge_area_size               integer     1048576

create_bitmap_area_size              integer     8388608

 

 

其中,hash_area是Oracle对SQL进行连接操作(主要是hash join)时,将进行hash函数计算过的bucket集合进行存储的位置。而sort_area表示SQL中进行order by等聚集操作的结果集合场所。

 

通常情况下,我们都希望SQL执行所需要的中间结果在Work Area的特定区域中可以容纳。因为PGA对应的是内存区域,进行数据处理和保存的速度要远快于磁盘处理速度。当SQL执行所需要的空间小于work area时候,SQL执行的速度就会很快。但是如果SQL需要空间大于Work Area时,Oracle就会使用Temp表空间的空间进行“置换”操作。这个过程要涉及到比较复杂的计算和存储过程,所以一旦出现这样的“multi-pass”过程,SQL执行的效率通常是较低,响应时间也随之增加。

 

 

2、PGA空间管理

 

由于PGA各个组成部分,特别是work_area对SQL执行效率的影响,所以各部分的tunning是早期Oracle DBA一个比较头疼的问题。

 

在Oracle 8i以及以前,DBA需要对系统的PGA进行仔细的调节,评估整个应用系统最佳使用情况。调节的方法主要是对Oracle初始化参数的调节,主要有sore_area_size、hash_area_size、bitmap_merge_area_size和create_bitmap_area_size等。

 

进入Oracle 9i后,一场持续Oracle多个版本的革命开始,Oracle开始提供一种自动调节PGA的功能。DBA只需要指定一个初始化参数pga_aggregate_target,作为从数据库服务器角度希望分配给所有Server Process的PGA总和大小。

 

 

SQL> show parameter pga

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target                 big integer 194M

 

 

一旦设置了pga_aggregate_target参数,就意味着规定Oracle实例在分配给所有Server process PGA空间的时候,总分配量不要超过这个参数值。但是注意,这个参数是一个target,有一些情况下,Oracle分配的Server process PGA总和是会超过这个target值的。但是总的来说,Oracle在调整时会尽量围绕这个规划值进行调整。

 

此外,要开启自动的SQL执行空间管理,还要设置workarea_size_policy初始化参数。

 

 

SQL> show parameter workarea

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

workarea_size_policy                 string      AUTO

 

 

当该参数被设置为auto之后,和pga_aggregate_target结合使用就起到了自动调节PGA的作用。与该auto取值对应的workarea_size_policy取值为manual,也就是过去一直使用的手工调整方法。

 

针对不同的数据库实例情况,主要是应用负载和应用并发Server Process,可以说每个实例调整值都是不同的,都存在各自独特的最优值。从9iR2开始,Oracle同时推出了Advisor组件功能,对一些如buffer_cache、PGA等提出了最优化建议,最为DBA进行实际设置时候的重要参考。

 

 

3、历代Oracle的PGA设置变化

 

从Oracle 9i开始,PGA自动配置调整就成为Oracle PGA设置的一种主要方式。DBA不再过多关注PGA内部各个区划分的大小问题,而是只需要站在Database Server角度,看分配给所有PGA的内存空间大小就可以了。各个分区大小都是通过Oracle自适应的过程进行调节。

 

 

注意,在9iR2中,自动进行PGA空间调节的功能只针对独占连接模式(Dedicated Server Connections),对于共享连接模式(Shared Connections)来说不其效果。

 

到了10g,上面的限制被打破,自动PGA管理调节支持所有种类的连接模式。11g之后,经历两个版本成熟过程的Oracle将自动存储管理(Automatic Memory Management AMM)拓展覆盖了SGA和PGA。也就是说,DBA只要设置一个Memory_Target参数,指定Oracle Database Server一共需要使用多少的内存资源,剩下的分配和调节都是交给Oracle去进行。

 

不过,在11g环境下,官方推介还是对参数pga_aggregate_target设置一个较小的取值,用来保证最小的PGA总分配量。在使用Memory_Target的情况下,Oracle会依据负载和并发Server的情况将空间在PGA和SGA进行分配,很多情况下有可能出现SGA延展过大的情况,所以设置一个较小的pge取值,可以保证系统正常运行。

 

4、结论

 

Oracle PGA是实例的一个重要部分,也是我们进行调优和内部结构研究的重要组成。从Oracle 9i开始推行的AMM,很大程度上减轻了DBA的监控和调整压力,使Oracle数据库开始进入自适应调优时代。

 

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17203031/viewspace-708788/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    8038984