A_TARGET_ADVICE
V_$PX_BUFFER_ADVICE
V_$PGA_TARGET_ADVICE_HISTOGRAM
V_$PGA_TARGET_ADVICE
V_$MTTR_TARGET_ADVICE
V_$MEMORY_TARGET_ADVICE
V_$JAVA_POOL_ADVICE
V_$DB_CACHE_ADVICE
SAM_SPARSITY_ADVICE
GV_$STREAMS_POOL_ADVICE
GV_$SHARED_POOL_ADVICE
GV_$SGA_TARGET_ADVICE
GV_$PX_BUFFER_ADVICE
GV_$PGA_TARGET_ADVICE
GV_$PGATARGET_ADVICE_HISTOGRAM
GV_$MTTR_TARGET_ADVICE
GV_$MEMORY_TARGET_ADVICE
GV_$JAVA_POOL_ADVICE
GV_$DB_CACHE_ADVICE
DBA_HIST_STREAMS_POOL_ADVICE
DBA_HIST_SHARED_POOL_ADVICE
DBA_HIST_SGA_TARGET_ADVICE
DBA_HIST_PGA_TARGET_ADVICE
DBA_HIST_MTTR_TARGET_ADVICE
DBA_HIST_MEMORY_TARGET_ADVICE
DBA_HIST_JAVA_POOL_ADVICE
DBA_HIST_DB_CACHE_ADVICE
38 rows selected.
11:08:24 sys@felix SQL>
其中和SGA相关的是V$DB_CACHE_ADVICE和V$SHARED_POOL_ADVICE,这些新功能通过在数据库运行时持续不断的收集信息,从而对内存的设置?供建议。
缓冲区高速缓存建议(buffer cacheadvisory) 受初始化参数DB_CACHE_ADVICE控制。该参数为动态参数,可用的值有三个OFF、ON 和READY。
DB_CACHE_ADVICE 不同参数值的含义分别如下:
OFF-关闭建议并且不为建议分配内存
ON-开启建议并且CPU 和内存开销都会发生
READY-关闭建议但是仍保留为建议分配的内存
在某些版本中,如果在参数为OFF 状态时尝试将其设置为ON 可能会出现ORA-4031错误,无法从共享池中分配内存;如果参数处于READY 状态则可以将其设置为ON 而不会发生错误,这是因为需要的内存已经分配。
11:08:24 sys@felix SQL>show parameterdb_cache_ad
NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
db_cache_advice string ON
11:13:35 sys@felix SQL>
我们看一下一个数据库中,Oracle收集的buffer cache建议信息:
11:13:35 sys@felix SQL>select id,
11:17:28 2 name,
11:17:28 3 block_size,
11:17:28 4 size_for_estimate sfe,
11:17:28 5 size_factor sf,
11:17:28 6 estd_physical_read_factor eprf,
11:17:28 7 estd_physical_reads epr
11:17:28 8 from v$db_cache_advice;
ID NAME BLOCK_SIZE SFE SF EPRF EPR
------------ ---------- ---------- ---------- ---------- ----------
3DEFAULT 8192 4 .0588 1.4798 20700
3DEFAULT 8192 8 .1176 1.3237 18517
3DEFAULT 8192 12 .1765 1.2074 16890
3DEFAULT 8192 16 .2353 1.1395 15940
3 DEFAULT 8192 20 .2941 1.1236 15717
3DEFAULT 8192 24 .3529 1.1033 15434
3DEFAULT 8192 28 .4118 1.0896 15242
3DEFAULT 8192 32 .4706 1.0838 15161
3DEFAULT 8192 36 .5294 1.0759 15050
3DEFAULT 8192 40 .5882 1.0715 14990
3DEFAULT 8192 44 .6471 1.0643 14889
3DEFAULT 8192 48 .7059 1.0614 14848
3DEFAULT 8192 52 .7647 1.0542 14747
3DEFAULT 8192 56 .8235 1.0441 14606
3DEFAULT 8192 60 .8824 1.0412 14565
3 DEFAULT 8192 64 .9412 1.0094 14120
3 DEFAULT 8192 68 1 1 13989
3DEFAULT 8192 72 1.0588 .9964 13938
3DEFAULT 8192 76 1.1176 .9942 13908
3DEFAULT 8192 80 1.1765 .9877 13817
20 rows selected.
11:17:28 sys@felix SQL>?
我们可以看到,伴随db_cache_size的增大,估计的物理读(estd_physical_reads)在逐渐减少,我们的选择就在于在db_cache_size的设置和physical_reads之间寻找一个边际效益最高点,使用可以接受的内存设置,获得尽量低的物理读。
而对于Shred Pool 的建议则受到另外一个初始化参数的影响,这个参数是: STATISTICS_LEVEL。STATISTICS_LEVEL控制数据库收集的统计信息的级别,该参数有三个选项:
(1)BASIC-收集基本的统计信息
(2)TYPICAL-收集大部分的统计信息,这是系统的缺省设置,为了从Oracle不断增加的新特性中受益,始终应该将该参数设置为典型.
(3)ALL-收集全部的统计信息.
可以通过v$statistics_level视图来查看该参数的影响范围,在Oracle11g中该视图中的条目已经增加到24个:
11:35:29 sys@felix SQL>col STATISTICS_NAME fora30;
11:35:52 sys@felix SQL>select STATISTICS_NAME,
11:36:00 2 SESSION_STATUS,
11:36:00 3 SYSTEM_STATUS,
11:36:00 4 ACTIVATION_LEVEL,
11:36:00 5 SESSION_SETTABLE
11:36:00 6 from v$statistics_level;
STATISTICS_NAME SESSION_STATUS SYSTEM_STATUS ACTIVATION_LEV SESSIO
------------------------------ -------------------------------