理解PGA
PGA(program grlobal area or process global area)指服务进程的私有内存空间,包括服务进程全局变量,数据结构和控制信息,如服务进程SQL查询的游标,PGA包括以下结构:
私有SQL区域:
存储服务进程执行SQL所需要的私有数据和控制结构,包括固定区域和运行区域(runtimearea)。固定区域数据在SQL游标关闭之前一直存在,运行区域在SQL执行时存在(如INSERT、DELETE及UPDATE执行完成后释放运行区域,SELECT语句只有所有查询结果集获取完成或取消才释放运行区域)。对于独立模式链接,私有SQL区域在PGA中分配,而共享模式链接私有SQL区域在SGA中分配。
会话空间:
保存用户logon信息等会话控制信息。对于共享模式,会话信息是共享的。
SQL工作区(SQL workarea):
对于复杂SQL,需要进行多表查询,可能会需要额外区域如:
排序操作
HASH JION
位图链接
创建位图
多表HASH链接
……
在oracle server中PGA的空间是独立于SGA的,PGA中的SQL工作区域对数据库的性能有很大影响,配置合理的PGA对于调整系统性能有很大的帮助。
PGA是独立于SGA的内存空间,主要用来执行SQL、表连接、排序等操作,一般根据系统配置和应用软件的不同,可以把物理内存的15%——30%用于PGA空间。
排序区操作需要分配内存空间,这部分内存空间称为sort_area。在使用pga自动管理的系统中sort_area被自动管理,否则,由sort_areaZ_size参数分配限定每个会话的使用sort_area的最大值。
通过v$sort_segment可以查看临时表空间排序段的使用空间。
SQL> selecttablespace_name, extent_size, total_extents, used_extents, free_extents,max_used_size 2 from v$sort_segment; TABLESPACE_NAME EXTENT_SIZE TOTAL_EXTENTSUSED_EXTENTS FREE_EXTENTS MAX_USED_SIZE ------------------------------------------ ------------- ------------ ------------ ------------- TEMP 128 58 0 58 9
查看某个数据库用户当前使用了多少临时段空间,可以通过查看v$sort_usage和v$session实现:
SQL>select s.username, u.tablespace, u.contents, u.extents, u.blocks 2 from v$session s, v$sort_usage u 3 where s.saddr = u.session_addr; PGA PGA_AGGREGATE_TARGET
PGA PGA_AGGREGATE_TARGET
SQL>show parameters pga NAME TYPE VALUE ----------------------------------------------- ------------------------------ pga_aggregate_target big integer 800M PGA能够使用的最大空间 SQL>show parameters workarea_size NAME TYPE VALUE ----------------------------------------------- ------------------------------ workarea_size_policy string AUTO 分配SQL工作区的规则, AUTO或MANNUAL SQL>show parameters sort_area_size NAME TYPE VALUE ----------------------------------------------- ------------------------------ sort_area_size integer 65536 定义每个会话SQL排序区的最大值 SQL>show parameters hash_area_size NAME TYPE VALUE ----------------------------------------------- ------------------------------ hash_area_size integer 131072 定义每个会话hash连接的内存空间最大值 SQL>show parameters bitmap_merge_area_size NAME TYPE VALUE ----------------------------------------------- ------------------------------ bitmap_merge_area_size integer 1048576 定义每个会话使用位图合并连接时的内存工作区域的最大值 SQL>show parameters create_bitmap_area_size NAME TYPE VALUE ----------------------------------------------- ------------------------------ create_bitmap_area_size integer 8388608 定义每个会话创建位图时可以使用的内存工作区域的最大值
如果workarea_size_policy设置为AUTO就不需要为*_area_size设置值,PGA自动管理为自动为各个工作区分配内存大小。Oracle10g之后,共享模式连接也可以设置workarea_size_policy自动管理。
通过v$sgastat可以得到一些调整PGA_AGGREGATGE_TARGET参数的参考资料
SQL>select * from v$pgastat; NAME VALUE UNIT -------------------------------------------------------------------------- ------------ aggregate PGA targetparameter 838860800 bytes aggregate PGA autotarget 531348480 bytes global memory bound 104857600 bytes total PGA inuse 248585216 bytes total PGA allocated 319751168 bytes maximum PGA allocated 481471488 bytes total freeable PGAmemory 45678592 bytes process count 67 max processes count 96 PGA memory freed back toOS 3.1422E+11 bytes total PGA used for autoworkareas 0 bytes NAME VALUE UNIT -------------------------------------------------------------------------- ------------ maximum PGA used for autoworkareas 56870912 bytes total PGA used for manualworkareas 0 bytes maximum PGA used for manualworkareas 542720 bytes over allocation count 0 bytes processed 3.6840E+11 bytes extra bytes read/written 0 bytes cache hit percentage 100 percent recompute count (total) 2761548 19 rows selected.
AggregatePGA auto target 可调整的pga空间,只有这部分空间可以被oracle自动调整功能使用,并用于各种SQL工作区域,这部分空间应该占PGA_AGGREGATE_TARGET中的最大比重,如果太小,可能会引起性能问题。
TotalPGA used for auto workarea
系统使用的可调整PGA空间,maxmum PGA used for auto workarea显示系统启动后使用可调整PGA的最大值
TotalPGA in used:
目前PGA空间的使用情况,这个值和v$process中的PGA_USED_MEM相同
Cachehit percentage: 这个值在oracle9i后出现,它显示PGA的性能。如果值是100%说明PGA的空间是够用的。
当PGA空间不足时,oracle需要使用外部辅助空间,结合one-pass或multi-pass模式来完成操作,此时系统的性能将受到影响,该值得计算公式为:
PGACACHE HIT RATIO=total byte processed * 100 / (total bytes processed + totalextra bytes read/written)
使用v$sql_workarea_histogram视图可以查看系统中PGA的详细使用情况,该视图中列出了
通过v$sal_workarea_active视图,可以查看当前活跃的PGA工作区
未完待续……