oracle系统组成了pga,Oracle体系结构之内存结构(SGA、PGA)

跟其它的全局区不同,Call Global Area是短暂性存在的.它只有在函数调用期间存在,一般是在对实例的最低级别的调用时才需要CGA,比如:分析一个SQL语句,执行一个SQL语句,取出一个SELECT语句的输出

一个单独的CGA在递归调用时是需要的.在SQL语句的分析过程中,对数据字典信息的递归调用是需要的,因为要对SQL语句进行语法分析,还有在语句的优化期间要计算执行计划.执行PL/SQL块时在处理SQL语句的执行时也是需要递归调用的,在DML语句的执行时要处理触发器执行也是需要递归调用的.

不管UGA是放在PGA中还是在SGA中,CGA都是PGA的一个子堆(Subheap).这个事实的一个重要推论是在一个调用的期间会话必须是一个进程.对于在一个MTS的Oracle数据库进程应用开发时关于这一点的理解是很重要的.如果相应的调用较多,就得增加processes的数量以适应调用的增加.

没有CGA中的数据结构,CALLS是没法工作的.而实际上跟一次CALL相关的数据结构一般都是放在UGA中,如SQL AREA,PL/SQL AREA,SORT AREA, hash area, bitmap area它们都必须在UGA中,因为它们要在各CALLS之间要一直存在并且可用.而CGA中所包含的数据结构是要在一次CALL结束后能够释放的.例如CGA包含了关于递归调用的信息,直接I/O BUFFER等还有其它的一些临时性的数据结构.

5. 总结一下

PGA包括:

1)Fixed PGA

2)UGA (dedicated server),当系统是shared server时,UGA位于shared pool或者large pool。

3)CGA

而UGA和CGA都属于Variable PGA(PGA heap)

UGA包括:

1)Fixed UGA

2)private SQL area

3)session memory

4)SQL Work Areas

private SQL area, session memory, SQL work ares都属于variable UGA(UGA heap).

6.private SQL area

可以分为两部分:

1)永久内存区域:存放相同SQL语句多次执行时都需要的一些游标信息,比如绑定变量等。这部分内存只有在游标被关闭时才释放。所以称为:永久内存区域。

2)运行时区域:处理SQL语句时的第一步要创建运行时区域,这里存放了当SQL运行时所使用的信息。对于DML语句,SQL执行完毕就释放该区域;对于select语句,当所有数据行返回给用户时释放。

7.session area

保存该session的一些参数,比如:修改的NLS参数,修改的优化器参数optimizer_mode,alter session命令所启用的跟踪信息,可以使用的roles,所打开的db links,真正使用的package等。

8.SQL work area

SQL工作区是UGA中最重要的部分,占UGA的大部分内存。主要是在排序sort(ordr by, group by),hash-join时使用。SQL工作区的大小对性能的影响很大。

一般大数量的排序,是不太可能完全在SQL work area中完成的,因为没有那么大的内存,所以一般都会使用临时表空间,将排序的中间结果写入到temp表空间中(磁盘排序)。根据SQL work area的大小,使用临时表空间的次数可以是一次,也可能是多次。所以有三种情况:

1)optimal: 排序完全在内存中完成;

2)onepass: 排序完成,需要使用磁盘一次;

3)multipass: 排序的完成,需要使用磁盘多次;

optimal一般是不太现实的,我们一般尽量保证onepass,如果导致了multipass,则性能会下降很多。我们先来看看排序的过程:

排序算法采用的是堆排序;排序方式是分批排序,比如10000条记录排序,把它分成100次,每次对100条记录排序;当100条排序完成之后,写入到temp表空间;再对下100条排序,排序完之后在写入到temp表空间;最后对temp表空间的100个局部排序的队列进行merge操作。从而完成对10000条记录的排序。这样是比较理想的情况,因为只对磁盘读写一次,属于onepass。如果排序涉及到磁盘的多次读写,则属于multipass。一般我们尽量调整sort_area_size的大小,来避免multipass排序。

SQL work area可以分为下面几个部分:

排序区(sort_area_size),hash区(hash_area_size),bitmap区(create_bitmap_area_size,bitmap_merge_area_size)等,他们深刻的影响着排序、hash-join、bitmap等的性能。

9.PGA的自动管理

在Oracle9i之前,我们是通过设置sort_area_size, hash_area_size等参数来管理PGA。

SQL> show parameter area_size;

NAME                                 TYPE        VALUE

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

bitmap_merge_area_size               integer     1048576

create_bitmap_area_size              integer     8388608

hash_area_size                       integer     131072

sort_area_size                       integer     65536

workarea_size_policy                 string      AUTO

SQL> show parameter sort_area;

NAME                                 TYPE        VALUE

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

sort_area_retained_size              integer     0

sort_area_size                       integer     65536

而从Oracle9i开始,Oracle引入了PGA的自动管理。不需要我们单独地设置大小了。

设置参数workarea_size_policy参数,可以在PGA自动(auto默认是auto)和PGA手动管理(manual)之间进行选择。

然后通过初始化参数pga_aggregate_size来设置PGA的内存总和(相当于SGA的sga_max_size)。注意在Oracle9i时,PGA自动管理只对dedicate server有效,对shared server无效,但是在Oracle10g时,PGA自动管理都有效。

10.PGA大小设置:

对于OLTP系统,典型的PGA内存为:

PGA_AGGREGATE_SIZE = (total_memory * 80%) * 20%

对于OLAP系统,由于会运行一些很大的查询:

PGA_AGGREATE_SIZE = (total_memoery * 80%) * 50%

80%是指,将机器总内存的80%分给Oracle使用。然后在将80%中的20%给PGA。

我们也可以使用PGA相关的一些视图来调整pga_aggregate_size的大小:

v$pgastat, v$pga_target_advice, v$pga_target_advice_histogram

使用v$pgastat查看当前PGA的统计信息(类似于v$sgastat和SGA):

SQL> select * from v$pgastat;

NAME                                          VALUE UNIT

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

aggregate PGA target parameter             71303168 bytes

aggregate PGA auto target                  27297792 bytes

global memory bound                        14260224 bytes

total PGA inuse                            40966144 bytes

total PGA allocated                        88008704 bytes

maximum PGA allocated                     125034496 bytes

total freeable PGA memory                   4259840 bytes

process count                                    23

max processes count                              40

PGA memory freed back to OS               492634112 bytes

total PGA used for auto workareas                 0 bytes

maximum PGA used for auto workareas         6105088 bytes

total PGA used for manual workareas               0 bytes

maximum PGA used for manual workareas             0 bytes

over allocation count                            0

bytes processed                          6275959808 bytes

extra bytes read/written                          0 bytes

cache hit percentage                            100 percent

recompute count (total)                       33814

19 rows selected.

maximum PGA allocated:PGA曾今达到的最大值

over allocation count: Over allocating PGA memory can happen if the value ofPGA_AGGREGATE_TARGET is too small. When this happens, the Oracle Database cannot honor the value of PGA_AGGREGATE_TARGET and extra PGA memory needs to be allocated. If over allocation occurs, thenincrease the value of PGA_AGGREGATE_TARGET using the information provided by the V$PGA_TARGET_ADVICE view.

extra bytes read/written: Number of bytes processed during extra passes of the input data, cumulated since instance startup. When a work area cannot run optimal, one or more of these extra passes is performed. (即磁盘排序的读写磁盘的字节数)

使用v$pga_target_advice来估测PGA的大小,即PGA的建议值(类似于v$sga_target_advice和SGA):V$PGA_TARGET_ADVICE predicts how the cache hit percentage and over allocation count statistics displayed by the V$PGASTAT performance view would be impacted if the value of the PGA_AGGREGATE_TARGET parameter is changed. The prediction is performed for various values of the PGA_AGGREGATE_TARGETparameter, selected around its current value. The advice statistic is generated by simulating the past workload run by the instance.

SQL> select round(pga_target_for_estimate/(1024*1024)) target_size_M,

2  estd_pga_cache_hit_percentage est_cache_hit_percentage,

3  round(estd_extra_bytes_rw/(1024*1024)) est_extra_read_write_M,

4  estd_overalloc_count est_over_alloc fromv$pga_target_advice;

TARGET_SIZE_M EST_CACHE_HIT_PERCENTAGE EST_EXTRA_READ_WRITE_M EST_OVER_ALLOC

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

17                       97                    186             31

34                       97                    186             31

51                      100                      0              2

68                      100                      0              0

82                      100                      0              0

95                      100                      0              0

109                      100                      0              0

122                      100                      0              0

136                      100                      0              0

204                      100                      0              0

272                      100                      0              0

408                      100                      0              0

544                      100                      0              0

13 rows selected.

使用v$pga_target_advice_histogram来估测PGA的大小(类似于v$sga_target_advice和SGA):

V$PGA_TARGET_ADVICE_HISTOGRAM predicts how statistics displayed by the V$SQL_WORKAREA_HISTOGRAM dynamic view would be impacted if the value of thePGA_AGGREGATE_TARGET parameter is changed. This prediction is performed for various values of the PGA_AGGREGATE_TARGET parameter, selected around its current value. The advice statistic is generated by simulating the past workload run by the instance.

该视图可以通过对不同工作区大小的采样评估提供统计信息共分析使用SQL在工作区中以3种方式执行:

Optimal(优化方式):指所有处理可以在内存中完成;Onepass:大部分操作可以在内存中完成,但是需要使用到磁盘排序;Multipass:大量操作需要产生磁盘交互,性能极差。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值