• oracle之pga的作用及管理


    PGA可以工作在专用服务器和共享服务器模式下,两种模式下的PGA工作机制有所不同:

    专用服务器(Dedicated):一个客户端连接对应一个服务器进程,适合批处理和大任务应用。

    共享服务器(shared):多个客户端连接对应一个服务器进程,服务器端存在一个调度进程来管理。它适用于高并发事务量小的业务应用。

    系统全局区(system global Area)是所有用户进程共享的一块内存区域,程序全局区(Program Global Area)也可称作用户进程全局区,他的内存在进程私有区而不是共享区。虽然PGA是一个全局区,可以把代码、全局变量和数据结构都存放在其中,但区域内的资源并不像SGA一样被所有的用户进程所共享,而是每个oracle服务器进程都只拥有属于自己的那份PGA资源,一个服务进程只能访问属于它自己的那部分PGA资源区,各个服务进程的PGA区的综合纪委实例的PGA的大小。通常PGA区由私有SQL区和回话区组成。

    1、私有SQL区(private area)

    私有SQL区用于存储变量及sql语句运行时的内存结构信息,当每个用户链接到实例时,都会在实例中创建一个会话,这些会话可能会在SGA区中创建一个共享SQL区,但是在PGA中可能会创建多个私有的SQL区,把一个私有的SQL区与对应的共享SQL区合并在一起,就可以获得一条SQL语句的完整缓存数据。

    另外,每个会话的私有SQL区可以再分为静态区和动态区两部分。静态区的信息在回话过程中保持不变,只有当会话结束时,静态区才会被释放掉;而动态区的信息在整个会话过程中是不断变化的,一旦SQL语句指定完毕,及时会话还没结束,动态区也被释放掉。

    2、会话区(session memory)

    为保存会话中的变量以及其他与会话相关的信息,而分配的内存区。保存的信息包括登录信息及其他与会话相关的信息。在共享模式下,session memory是共享的。

    3、SQL工作区(SQL work area)

    对于复杂的查询,PGA的很大一部分将被那些内存需求很大的操作分配给SQL工作区,主要操作包括:

    3.1、基于操作符的排序:group by 、order by、rollup和窗口函数,该区域的参数是SORT_AREA_SIZE

    3.2、HASH哈希连接,参数是HASH_AREA_SIZE

    3.3、位图合并,参数是BITMAP_MERGE_AREA_SIZE

    3.4、位图创建,参数是CREATE_BITMAP_AREA_SIZE

    例如一个排序操作使用sql工作区将一部分数据行在内存中排序;而一个HASH join 操作则使用工作来建立HASH表。如果这两种操作所处理的数据量比较大,那么就会将输入的数据分成一些更小的数据片,使一些数据片能够在内存中处理,而其他的就在临时表空间的磁盘上稍后处理。尽管工作区太小是,BITMAP操作不会将数据放到磁盘上处理,但是他们的复杂性和工作区大小成反比,工作区越大,这些操作越快。

    假设test表有一万行数据:select * from test ;和select * from test order by id desc;

    第一条语句,server process会把BLOCK一个一个调到BUFFER CACHE中,然后从BUFFER中取出一行返回一行给用户,PGA这时没有排序

    第二条语句,server process把block加载到BUFFER中会返回给pga的work area,在PGA中进行排序,然后才能返回给用户。如果这时候SORT_AREA_SIZE不够大,pga会自动分配空间来加载,但是也不是不限量的,如果内存不够时,这时候就需要把一部分数据写到临时表空间,进行磁盘排序,关于这个磁盘排序的方法我也没搞明白是怎么具体的方式来排序的,如何才能更高效的用内存及磁盘来排序,有待考究。但是要记住利用磁盘来排序时发生了物理IO这种效率就很差了。

    关于PGA的管理方式:自动管理及手动管理

    从9i开始PGA就开始就支持自动管理了

    show parameter area  ;

    对应的参数workarea_size_policy的value 为auto即为自动管理,oracle默认自动管理,

    SQL> show parameter area
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    bitmap_merge_area_size               integer     1048576
    create_bitmap_area_size              integer     8388608
    hash_area_size                       integer     131072
    sort_area_retained_size              integer     0
    sort_area_size                       integer     65536
    workarea_size_policy                 string      AUTO               ----pga自动管理
    

    查看对应work area的参数。

    关于设置PGA的大小,建议先按服务器内的总内存   *80%*20%来运行一段时间,

    Select pga_target_for_estimate/1024/1024 ||'M' "Estimate PGA Target"
           ,estd_pga_cache_hit_percentage "Cache Hit(%)"
           ,estd_extra_bytes_rw/1024/1024 ||'M' "Extra Read/Write"
           ,estd_overalloc_count "Over alloc count"
    From v$pga_target_advice;
    

    再结合数据库统计信息来设置PGA大小。

    一般我们安装数据库如windows下创建DBCA时,可以进行选择

     

    如上图所示即为分配内存空间PGA+SGA总大小为物理内存的80%,而pga和sga的大小自动分配,也可根据实际情况手动分配。 

    部分参考内容https://blog.csdn.net/xinzhan0/article/details/54290392?spm=1001.2014.3001.5502

  • 相关阅读:
    新的知识点
    知识点
    9.14知识点
    列表内容
    css的背景和边框
    css的text和font
    css
    js 第一天
    浏览器的差距
    布局
  • 原文地址:https://www.cnblogs.com/magic-dw/p/15477982.html
Copyright © 2020-2023  润新知