[English]
作者:
fuyuncat
来源:
www.HelloDBA.com
1.1.3.3. Buffer Cache的重要视图
关于Buffer Cache,oracle提供一些重要视图,用于查询关于Buffer Cache的重要信息,为调整Buffer Cache、提高性能提供参考。下面一一介绍它们
· v$db_cache_advice
上面我们提到了Oracle的建议器,其中有一个针对Buffer Cache的建议器。在我们设置了参数db_cache_advice为TRUE后,经过一段时间的系统运行,Oracle收集到相关统计数据,并根据一定的数学模型,预测出DB_CACHE_SIZE在不同大小情况的性能数据。我们就可以由视图V$DB_CACHE_ADVICE查出这些数据,并根据这些数据调整DB_CACHE_SZIE,使系统性能最优。
下面是关于这个视图的结构描述:
字段
数据类型
描述
ID
NUMBER
缓冲池标识号(从1到8,1-6对应于DB_nK_CACHE_SIZE,DB_CACHE_SIZE与系统标准块尺寸的序号相关,如DB_BLOCK_SIZE为8K,则DB_CACHE_SIZE的标识号为3(2,4,8…)。7是DB_KEEP_CACHE_SIZE,8是DB_RECYCLE_CACHE_SIZE)
NAME
VARCHAR2(20)
缓冲池名称
BLOCK_SIZE
NUMBER
缓冲池块尺寸(字节为单位)
ADVICE_STATUS
VARCHAR2(3)
建议器状态:ON表示建议器在运行;OFF表示建议器已经关闭。当建议器关闭了,视图中的数据是上一次打开所统计得出的。
SIZE_FOR_ESTIMATE
NUMBER
预测性能数据的Cache大小(M为单位)
SIZE_FACTOR
NUMBER
预测的Cache大小因子(即与当前大小的比例)
BUFFERS_FOR_ESTIMATE
NUMBER
预测性能数据的Cache大小(缓冲块数)
ESTD_PHYSICAL_READ_FACTOR
NUMBER
这一缓冲大小时,物理读因子,它是如果缓冲大小为SIZE_FOR_ESTIMATE时,建议器预测物理读数与当前实际物理读数的比率值。如果当前物理读数为0,这个值为空。
ESTD_PHYSICAL_READS
NUMBER
如果缓冲大小为SIZE_FOR_ESTIMATE时,建议器预测物理读数。
下面是从这个视图中查询出来的数据:
SQL> select size_for_estimate, estd_physical_read_factor, estd_physical_reads
2 from v$db_cache_advice
3 where name = 'DEFAULT';
SIZE_FOR_ESTIMATE ESTD_PHYSICAL_READ_FACTOR ESTD_PHYSICAL_READS
----------------- ------------------------- -------------------
16 2.0176 6514226
32 1.7403 5619048
48 1.5232 4917909
64 1.3528 4367839
80 1.2698 4099816
96 1.1933 3852847
112 1.1443 3694709
128 1.1007 3553685
144 1.0694 3452805
160 1.0416 3362964
176 1.0175 3285085
192 1 3228693
208 0.9802 3164754
224 0.9632 3109920
240 0.9395 3033427
256 0.8383 2706631
272 0.7363 2377209
288 0.682 2202116
304 0.6714 2167888
320 0.6516 2103876
20 rows selected
当前我们的DB_CACHE_SIZE为192M,可以看到,它的物理读因子为1,物理读数为3228693。那么如何根据这些数据调整DB_CACHE_SIZE呢?给出一个方法,找到变化率较平缓的点作为采用值。因为建议器做预测是,DB_CACHE_SIZE的预测值的增长步长是相同的,是16M。我们按照这一步长增加DB_CACHE_SIZE,如果每次增加物理读降低都很明显,就可以继续增加,直到物理读降低不明显,说明继续增加DB_CACHE_SIZE没有太大作用。当然,性能和可用资源是天平的两端,你需要根据自己系统的实际情况调整。
上面的例子中,我们可以考虑将DB_CACHE_SIZE调整到288M。因为在288M之前,物理读因子变化都比较大,而从288M到304M以后,这个因子变化趋缓。用一个二维图可以更容易看出这个变化来:
![]()
这一视图作为调整DB_CACHE_SIZE以提高性能有很大参考价值。但衡量Buffer Cache是否合适的重要指标还是我们前面提到的缓存命中率(Buffer Hit),而影响缓存命中率往往还有其他因素,如性能极差的SQL语句。
· V$BUFFER_POOL
这一视图显示了当前实例中所有缓冲池的信息。它的结构如下:
字段
数据类型
描述
ID
NUMBER
缓冲池ID,和上面视图描述相同。
NAME
VARCHAR2(20)
缓冲池名称
BLOCK_SIZE
NUMBER
缓冲池块尺寸(字节为单位)
RESIZE_STATE
VARCHAR2(10)
缓冲池当前状态。
STATIC:没有被正在调整大小
ALLOCATING:正在分配内存给缓冲池(不能被用户取消)
ACTIVATING:正在创建新的缓存块(不能被用户取消)
SHRINKING:正在删除缓存块(能被用户取消)
CURRENT_SIZE
NUMBER
缓冲池大小(M为单位)
BUFFERS
NUMBER
当前缓存块数
TARGET_SIZE
NUMBER
如果正在调整缓冲池大小(即状态不为STATIC),这记录了调整后的大小(M为单位)。如果状态为STATIC,这个值和当前大小值相同。
TARGET_BUFFERS
NUMBER
如果正在调整缓冲池大小(即状态不为STATIC),这记录了调整后的缓存块数。否则,这个值和当前缓存块数相同。
PREV_SIZE
NUMBER
前一次调整的缓冲池大小。如果从来没有调整过,则为0。
PREV_BUFFERS
NUMBER
前一次调整的缓存块数。如果从来没有调整过,则为0。
LO_BNUM
NUMBER
9i后已经废弃字段
HI_BNUM
NUMBER
9i后已经废弃字段
LO_SETID
NUMBER
9i后已经废弃字段
HI_SETID
NUMBER
9i后已经废弃字段
SET_COUNT
NUMBER
9i后已经废弃字段
· v$buffer_pool_statistics
V$BUFFER_POOL_STATISTICS视图记录了所有缓冲池的统计数据。它的结构如下:
字段
数据类型
描述
ID
NUMBER
缓冲池ID,和上面视图描述相同。
NAME
VARCHAR2(20)
缓冲池名称
SET_MSIZE
NUMBER
缓冲池中缓存块的最大数
CNUM_REPL
NUMBER
在置换列表中的缓存块数
CNUM_WRITE
NUMBER
在写列表中的缓存块数
CNUM_SET
NUMBER
当前的缓存块数
BUF_GOT
NUMBER
读取过的缓存块数