PGA我们称它是进程全局区,由于进程与进程间相对独立,所以也叫私有全局区。
PGA的分配情况和专有模式(dedicated)与共享模式(shared)有关系
一.
专有模式 内存情况
专有模式 内存情况
左边是栈空间(Stack Space),存储的是局部参数和变量等连续的空间。
栈是该进程下跑的所有程序的参数,还有局部变量。
栈是该进程下跑的所有程序的参数,还有局部变量。
图中右边不太完整
UGA区
工作区(PGA),
排序区(PGA/CGA) ,
MERGE BITMAP AREA(PGA),
排序区是PGA的部分,也是CGA的部分,是运行排序时需要的内存,排序完成后马上释放。
UGA区
工作区(PGA),
排序区(PGA/CGA) ,
MERGE BITMAP AREA(PGA),
排序区是PGA的部分,也是CGA的部分,是运行排序时需要的内存,排序完成后马上释放。
UGA在专有模式,它属于PGA
UGA在共享模式,它属于SGA
UGA包含:
私有SQL,私有PLSQL区
打开的游标和DB LIKE
排序保留区
排序保留区是UGA部分,用户会话FETCH返回排序信息
CURSOR信息存放的是SQL和PLSQL 解析区的句柄,
就是私有SQL区,它会有指针指向共享SQL区,
不同的会话下执行相同的SQL有不同的私有SQL区指向同一个共享SQL区
UGA在共享模式,它属于SGA
UGA包含:
私有SQL,私有PLSQL区
打开的游标和DB LIKE
排序保留区
排序保留区是UGA部分,用户会话FETCH返回排序信息
CURSOR信息存放的是SQL和PLSQL 解析区的句柄,
就是私有SQL区,它会有指针指向共享SQL区,
不同的会话下执行相同的SQL有不同的私有SQL区指向同一个共享SQL区
CGA
CGA称为调用全局区,它的生命周期很短,调用完就结束,是运行时状态。
CGA称为调用全局区,它的生命周期很短,调用完就结束,是运行时状态。
永远在PGA里,不管是否是共享服务器模式
二.
共享管理模式内存情况
共享模式UGA在SGA里,由LARGE POOL分配,large pool无法分配则从shared_pool中分配
PGA工作区的管理(主要是排序)
排序区:sort_area_size
排序保留区:SORT_AREA_RETAINED_SIZE
排序区:sort_area_size
排序保留区:SORT_AREA_RETAINED_SIZE
上图的SQL语句做了ORDER BY 产生了排序
SORT_AREA_SIZE 的大小由蓝色部分和黄色部分和组成。
注意黄色部分和蓝色部分是完全不同的阶段需要的排序,它们的性质和执行顺序也不一致。
SORT_AREA_SIZE 在 PGA里
SORT_AREA_RETAINED_SIZE在 UGA里
UGA在专有模式下 是属于PGA的,共享模式下属于SGA的LARGE_pool
SORT_AREA_SIZE 在 PGA里
SORT_AREA_RETAINED_SIZE在 UGA里
UGA在专有模式下 是属于PGA的,共享模式下属于SGA的LARGE_pool
默认排序区使用规则
当排序小于SORT_AREA_RETANIED_SIZE时全部在UGA里,直接反馈给SELECT的用户。
当排序大于SORT_AREA_ RETANIED _SIZE,小于SORT_AREA_SIZE时,部分在UGA,部分在PGA。
当UGA部分反馈给用户完后,接着把后续的排序写到保留区,并反馈给SELECT 用户。
当排序大于SORT_AREA_SIZE时,需要用到临时表空间,再通过临时表空间循环写入SORT_AREA_RETANIED_SIZE,并反馈给SELECT用户。
在PGA自动管理时,排序区不由这两个参数决定,在手工管理,或者共享服务模式下,由这两个参数决定
这两个参数sort_area_size和sort_area_retained_size 都是在人工管理PGA时 才用得上
这两个参数sort_area_size和sort_area_retained_size 都是在人工管理PGA时 才用得上
PGA管理
9I才开始使用PGA自动管理
怎么来设置PGA 自动管理还是人工管理?
workarea_size_policy可以设置为 AUTO或MANUAL
SQL> show parameter workarea
怎么来设置PGA 自动管理还是人工管理?
workarea_size_policy可以设置为 AUTO或MANUAL
SQL> show parameter workarea
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy string AUTO
SQL>
------------------------------------ ----------- ------------------------------
workarea_size_policy string AUTO
SQL>
至于自动管理的大小是参数pga_aggregate_target 是自动管理的时候才用的 是总的PGA的大小
新的进程产生后 就会从这个区域中去分配
SQL> show parameter pga
新的进程产生后 就会从这个区域中去分配
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 90M
SQL>
ORACLE 10G之前,pga_aggregate_target只在专有服务模式下生效,共享服务模式下,没法使用pga_aggregate_target
所以在10G之前,共享服务模式下,必须设置SORT_AREA_RETAINED_SIZE和SORT_AREA_SIZE两个参数
也就是说共享模式下只能手动管理这两个排序区
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 90M
SQL>
ORACLE 10G之前,pga_aggregate_target只在专有服务模式下生效,共享服务模式下,没法使用pga_aggregate_target
所以在10G之前,共享服务模式下,必须设置SORT_AREA_RETAINED_SIZE和SORT_AREA_SIZE两个参数
也就是说共享模式下只能手动管理这两个排序区
SORT_AREA_RETAINED_SIZE可以和SORT_AREA_SIZE 一样大,以保证所有的排序在UGA里
SORT_AREA_RETAINED_SIZE=0时SORT_AREA_RETAINED_SIZE等于SORT_AREA_SIZE。
SQL> show parameter sort_area
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sort_area_retained_size integer 0
sort_area_size integer 65536
SQL>
实际此时sort_area_retained_size就是65536
SORT_AREA_RETAINED_SIZE=0时SORT_AREA_RETAINED_SIZE等于SORT_AREA_SIZE。
SQL> show parameter sort_area
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sort_area_retained_size integer 0
sort_area_size integer 65536
SQL>
实际此时sort_area_retained_size就是65536
手工管理
手工设置工作区
bitmap_merge_area_size
create_bitmap_area_size
sort_area_size
hash_area_size
bitmap_merge_area_size
在进行位图索引扫描时,需要将扫描到的位图索引排序后与位图合并(Merge)用于排序和合并。
参数BITMAP_MERGE_AREA_SIZE指定了这块区域的大小。默认值是1M。
create_bitmap_area_size
这个参数指定可在创建位图索引时的内存空间占用大小。它的默认大小是8M。
HASH_AREA_SIZE
设置了在做Hash Join时,hash内存表可占用的内存空间。
sort_area_size
上面已经介绍过
手工设置工作区
bitmap_merge_area_size
create_bitmap_area_size
sort_area_size
hash_area_size
bitmap_merge_area_size
在进行位图索引扫描时,需要将扫描到的位图索引排序后与位图合并(Merge)用于排序和合并。
参数BITMAP_MERGE_AREA_SIZE指定了这块区域的大小。默认值是1M。
create_bitmap_area_size
这个参数指定可在创建位图索引时的内存空间占用大小。它的默认大小是8M。
HASH_AREA_SIZE
设置了在做Hash Join时,hash内存表可占用的内存空间。
sort_area_size
上面已经介绍过
手工管理还得满足下面两条件:
pga_aggregate_target=0
workarea_size_policy=Manual
手工管理PGA的缺点:DBA很难准确评估工作区,会使用更多的PGA,例如月结时大量排序SQL.平时很少排序 我们很难掌控
pga_aggregate_target=0
workarea_size_policy=Manual
手工管理PGA的缺点:DBA很难准确评估工作区,会使用更多的PGA,例如月结时大量排序SQL.平时很少排序 我们很难掌控
v$pgastat
显示了详细的PGA的统计信息,该视图可以显示从instance启动以来的PGA的详细使用信息,包括PGA大小是否足够
SQL> select * from v$pgastat;
NAME VALUE UNIT
-------------------------------------------------- ---------- ------------
aggregate PGA target parameter 94371840 bytes
aggregate PGA auto target 69636096 bytes
global memory bound 18874368 bytes
total PGA inuse 16991232 bytes
total PGA allocated 42124288 bytes
maximum PGA allocated 70835200 bytes
total freeable PGA memory 7733248 bytes
process count 19
max processes count 22
PGA memory freed back to OS 42205184 bytes
total PGA used for auto workareas 0 bytes
maximum PGA used for auto workareas 112640 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 0 bytes
over allocation count 0
bytes processed 197159936 bytes
extra bytes read/written 0 bytes
cache hit percentage 100 percent
recompute count (total) 2456
-------------------------------------------------- ---------- ------------
aggregate PGA target parameter 94371840 bytes
aggregate PGA auto target 69636096 bytes
global memory bound 18874368 bytes
total PGA inuse 16991232 bytes
total PGA allocated 42124288 bytes
maximum PGA allocated 70835200 bytes
total freeable PGA memory 7733248 bytes
process count 19
max processes count 22
PGA memory freed back to OS 42205184 bytes
total PGA used for auto workareas 0 bytes
maximum PGA used for auto workareas 112640 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 0 bytes
over allocation count 0
bytes processed 197159936 bytes
extra bytes read/written 0 bytes
cache hit percentage 100 percent
recompute count (total) 2456
19 rows selected.
Elapsed: 00:00:00.00
SQL>
v$pga_target_advice
是PGA的一个预测统计信息,ORACLE会模拟不同PGA大小情况下的性能数据,为DBA调整PGA大小做一顶的参考
SQL> select PGA_TARGET_FOR_ESTIMATE,PGA_TARGET_FACTOR,BYTES_PROCESSED,ESTD_PGA_CACHE_HIT_PERCENTAGE from v$pga_target_advice;
SQL>
v$pga_target_advice
是PGA的一个预测统计信息,ORACLE会模拟不同PGA大小情况下的性能数据,为DBA调整PGA大小做一顶的参考
SQL> select PGA_TARGET_FOR_ESTIMATE,PGA_TARGET_FACTOR,BYTES_PROCESSED,ESTD_PGA_CACHE_HIT_PERCENTAGE from v$pga_target_advice;
PGA_TARGET_FOR_ESTIMATE PGA_TARGET_FACTOR BYTES_PROCESSED ESTD_PGA_CACHE_HIT_PERCENTAGE
----------------------- ----------------- --------------- -----------------------------
11796480 .125 195421184 100
23592960 .25 195421184 100
47185920 .5 195421184 100
70778880 .75 195421184 100
94371840 1 195421184 100
113246208 1.2 195421184 100
132119552 1.4 195421184 100
150994944 1.6 195421184 100
169869312 1.8 195421184 100
188743680 2 195421184 100
283115520 3 195421184 100
377487360 4 195421184 100
566231040 6 195421184 100
754974720 8 195421184 100
----------------------- ----------------- --------------- -----------------------------
11796480 .125 195421184 100
23592960 .25 195421184 100
47185920 .5 195421184 100
70778880 .75 195421184 100
94371840 1 195421184 100
113246208 1.2 195421184 100
132119552 1.4 195421184 100
150994944 1.6 195421184 100
169869312 1.8 195421184 100
188743680 2 195421184 100
283115520 3 195421184 100
377487360 4 195421184 100
566231040 6 195421184 100
754974720 8 195421184 100
14 rows selected.
Elapsed: 00:00:00.01
SQL>
SQL>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24756465/viewspace-717615/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24756465/viewspace-717615/