PGA概念

来源:互联网 发布:m905 罗技 mac 编辑:程序博客网 时间:2024/06/07 05:24
1. 什么是PGA? Roger--001<oracledba@live.cn&get;20:36:21 PGA,即Program Global Area 的简称,是一块包含一个服务进程的数据和控制信息的内存区域。 注意,PGA的内存结构是不需要Latch来进行保护的。Oracle 在实例启动时就开始进行分配,一个 Oracle 进程拥有一个 PGA 内存区。一个 PGA 也只能被拥有它的那个服务进程所访问,且只有这个进程中的 Oracle 代码才能访问它,和其他进程的pga区域是相互独立的,互不影响。 PGA不需要latch 保护,是私有的PGA用多少,分配多少2.  PGA的设置技巧在Oracle 10g之前,PGA的大小通过参数pga_aggregate_target 来进行控制,如下:SQL&get; parameter pgaNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------_pga_max_size                        big integer 209715200pga_aggregate_target                 big integer 16777216且pga的大小受限于_pga_max_size参数的控制,不能超过该参数的设置。SQL&get; show parameter _realfree_heap_pagesize_hintNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------_realfree_heap_pagesize_hint         big integer 64K内存页 单个进程 PGA最大4GPGA 分配单位chunk----pga dumpSQL&get; conn /as sysdbaConnected.SQL&get; oradebug setmypidStatement processed.SQL&get; ALTER SESSION SET EVENTS 'immediate trace name heapdump level 1';Session altered.SQL&get; oradebug close_TraceStatement processed.SQL&get; oradebug tracefile_name/home/ora10g/admin/roger/udump/roger_ora_3584.trc对于PGA的dump 不做过多的描述,这个意义不大。  我们知道PGA 其实主要由3部分组成(准确的说是PGA的可变区域部分):1 )私有 SQL 区; 2 )游标和 SQL 区 3 )会话内存从这个我们不难看出,PGA中最重要的地方无非是SQL区域。optimal:  即SQL语句能够完全在所分配的SQL工作区内存完成所有的操作。当然这种情况其性能肯定是最优的。onepass:  SQL语句需要和disk上的temp表空间交互一次才能完成所有的操作。multipass: 通常是由于SQL工作区偏小,从而导致SQL语句需要和disk上的temp 表空间交互多次才能完成所有操作,这种情况下性能无疑是最差的。对于串行操作:假设PGA <=500MB,则_smm_max_size = 20%*PGA如果PGA在500MB和1000MB之间,_smm_max_size = 100MB如果PGA在1001MB和2569MB之间,_smm_max_size = 10%*PGA如果PGA>2560MB,则_smm_max_size = 262,060MB对于并行操作,能够使用的PGA内存按照以下原则分配:50%* PGA/DOP但是注意,当DOP<=5时,_smm_max_size限制生效,并行度超过5的时候,则受另外一个数据库隐含参数_smm_px_max_size的影响

0 0