Oracle SGA和PGA简介

简介:
SGA(System Global Area):由所有服务进程和后台进程共享;
PGA(Program Global Area):由每个服务进程、后台进程专有;每个进程都有一个PGA

SGA
包含实例的数据和控制信息,包含如下内存结构:
1)Database buffer cache:缓存了从磁盘上检索的数据块。
2)Redo log buffer:缓存了写到磁盘之前的重做信息。
3)Shared pool:缓存了各用户间可共享的各种结构。
4)Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
5)Java pool:保存java虚拟机中特定会话的数据与java代码。
6)Streams pool:由Oracle streams使用。
7)Keep buffer cache:保存buffer cache中存储的数据,使其尽时间可能长。
8)Recycle buffer cache:保存buffer cache中即将过期的数据。
9)nK block size buffer:为与数据库默认数据块大小不同的数据块提供缓存。用来支持表空间传输

PGA
每个服务进程私有的内存区域,包含如下结构:
1)Private SQL area:包含绑定信息、运行时的内存结构。每个发出sql语句的会话,都有一个private SQL area(私有SQL区)
2)Session memory:为保存会话中的变量以及其他与会话相关的信息,而分配的内存区

关于pga和sga的分配,有个经验值:
在OLTP系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。 
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20% 

在DSS系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50% 

凡事没绝对,需要根据自己的服务器和应用情况做判断,
这里有几个视图可以作为参考:
针对SGA的:v$sgainfo,v$sga_target_advice
    其中第一个是sga目前的一些状态信息,第二个是oracle提供的优化的一个视图建议
针对PGA的:V$PGASTAT,v$pga_target_advice
    其中第一个是pga目前的一些状态信息,第二个是oracle提供的优化的一个视图建议

视图解释,SGA

select name,bytes/1024/1024 as "Size(M)"  from v$sgainfo;
 Fixed SGA Size                   2.25660858
Redo Buffers                     42.5429688
Buffer Cache Size                     14208
Shared Pool Size                       3392
Large Pool Size                         512
Java Pool Size                           64
Streams Pool Size                       128
Shared IO Pool Size                       0
Granule Size                             64
Maximum SGA Size                 18349.7031
Startup overhead in Shared Pool  556.230263 -- 给session、process分配的
Free SGA Memory Available                 0 -- 没有可剩余的空间,代表不够用

SQL>  SELECT a.sga_size,-- sga期望大小
  2            a.sga_size_factor, -- 期望sga大小与实际sga大小的百分比
  3            a.estd_db_time, -- sga设置为期望的大小后,其dbtime消耗期望的变化
  4            a.estd_db_time_factor,-- 修改sga为期望大小后,dbtime消耗的变化与修改前的变化百分比
  5            a.estd_physical_reads -- 修改前后物理读的差值
  6       FROM v$sga_target_advice a;

  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
      6912            .375      6626336              1.3401          3489939352
      9216              .5      6042867              1.2221          3270250481
     11520            .625      5808490              1.1747          3206534942
     13824             .75      5524666              1.1173          3107646120
     16128            .875      5251721              1.0621          3012505270
     18432               1      4944658                   1          2883056053
     20736           1.125      4595565               .9294          2785032147
     23040            1.25      4478871               .9058          2652699874
     25344           1.375      4470465               .9041          2652699874

PGA:

SELECT name ,value/1024/1024 "MB"  FROM V$PGASTAT; 

NAME                                                                     MB
---------------------------------------------------------------- ----------
aggregate PGA target parameter                                         9192  -- pga_aggregate_target
aggregate PGA auto target                                        6823.20938	 -- 剩余的能被工作区使用的内存
global memory bound                                              819.199219  -- 单个SQL最大能用到的内存
total PGA inuse                                                  644.192383  -- 正被耗用的pga(包括workare pl/sql等所有占用的pga)
total PGA allocated                                              896.580078  -- 当前实例已分配的PGA内存总量
maximum PGA allocated                                            8837.66406  -- pga曾经扩张到的最大值
total freeable PGA memory                                          179.4375  -- 可释放的pga
process count                                                    .000473976  -- 当前process 单位不对
max processes count                                              .000980377  -- 最大时候的process
PGA memory freed back to OS                                      1201833.44
total PGA used for auto workareas                                37.5908203  -- 当前auto模式下占用的workara size 大小
maximum PGA used for auto workareas                              6617.17871  -- auto模式下占用的workara size最大 大小
total PGA used for manual workareas                                       0
maximum PGA used for manual workareas                            1.03515625
over allocation count                                                     0  -- 使用量超过pga大小的次数
bytes processed                                                  3531168.47  -- pga使用的字节
extra bytes read/written                                         25581.0293  -- 向临时段写的字节
cache hit percentage                                             .000094681
recompute count (total)                                          1.28579521



SQL> SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb, 
  2     ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc, 
  3     ESTD_OVERALLOC_COUNT -- 关注对象
  4     FROM v$pga_target_advice;

 TARGET_MB CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
---------- -------------- --------------------
      2441             98                    0
      4882             99                    0
      9763             99                    0
     14645             99                    0
发布了522 篇原创文章 · 获赞 87 · 访问量 75万+

猜你喜欢

转载自blog.csdn.net/jc_benben/article/details/104695010
今日推荐