转自:http://www.hellodba.com/reader.php?ID=102&lang=CN
1.1.3.3.Buffer Cache的重要视图
·v$db_cache_advice
字段 | 数据类型 | 描述 |
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
·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
字段 | 数据类型 | 描述 |
ID | NUMBER | 缓冲池ID,和上面视图描述相同。 |
NAME | VARCHAR2(20) | 缓冲池名称 |
SET_MSIZE | NUMBER | 缓冲池中缓存块的最大数 |
CNUM_REPL | NUMBER | 在置换列表中的缓存块数 |
CNUM_WRITE | NUMBER | 在写列表中的缓存块数 |
CNUM_SET | NUMBER | 当前的缓存块数 |
BUF_GOT | NUMBER | 读取过的缓存块数 |
SUM_WRITE | NUMBER | 被写过的缓存块数 |
SUM_SCAN | NUMBER | 被扫描过的缓存块数 |
FREE_BUFFER_WAIT | NUMBER | 等待空闲块统计数 |
WRITE_COMPLETE_WAIT | NUMBER | 等待完成写统计数 |
BUFFER_BUSY_WAIT | NUMBER | 忙(正在被使用)等待统计数 |
FREE_BUFFER_INSPECTED | NUMBER | 确认了的空闲缓存块数(即可用的) |
DIRTY_BUFFERS_INSPECTED | NUMBER | 确认了的脏缓存块数 |
DB_BLOCK_CHANGE | NUMBER | 被修改过的数据块数 |
DB_BLOCK_GETS | NUMBER | 读取过的数据块数 |
CONSISTENT_GETS | NUMBER | 一致性读统计数 |
PHYSICAL_READS | NUMBER | 物理读统计数 |
PHYSICAL_WRITES | NUMBER | 物理写统计数 |
- SQL>
select 1-(physical_reads)/(consistent_gets+db_block_gets) -
2 from v$buffer_pool_statistics; -
- 1-(PHYSICAL_READS)/(CONSISTENT
- ------------------------------
-
0.967658520581074 -
- SQL>
·v$bh
- SQL>
column c0 heading 'Owner' format a15 - SQL>
column c1 heading 'Object|Name' format a30 - SQL>
column c2 heading 'Number|of|Buffers' format 999,999 - SQL>
column c3 heading 'Percentage|ofData|Buffer' format 999,999,999 - SQL>
select -
2 owner c0, -
3 object_name c1, -
4 count(1) c2, -
5 (count(1)/(select count(*) from v$bh)) *100 c3 -
6 from -
7 dba_objects o, -
8 v$bh bh -
9 where -
10 o.object_id = bh.objd -
11 and -
12 o.owner not in ('SYS','SYSTEM') -
13 group by -
14 owner, -
15 object_name -
16 order by -
17 count(1) desc -
18 ; -
- C0
C1 C2 C3 - ---------------
------------------------------ ---------- ---------- - PLSQLDEV
STANDARD_CITY 17290 72.5860621 - DBOWNER
MSG_LOG 2 0.00839630 - DBOWNER
COUNTRY_PK 1 0.00419815 - DBOWNER
PARAMETER 1 0.00419815 - DBOWNER
PARAMETER_PK 1 0.00419815 - DBOWNER
MSG_LOG_IDX1 1 0.00419815 -
- 6
rows selected -
- SQL>
字段 | 数据类型 | 说明 |
FILE# | NUMBER | 缓存块对应的数据块所在的数据文件号。可以通过视图DBA_DATA_FILES或V$DBFILES查询 |
BLOCK# | NUMBER | 缓存块对应的数据块编号 |
CLASS# | NUMBER | 分类编号 |
STATUS | VARCHAR2(1) | 缓存块的状态 FREE:空闲,没有被使用 XCUR:排斥(正在被使用) SCUR:可被共享 CR:一致性读 READ:正在从磁盘读入 MREC:处于从存储介质恢复状态 IREC:处于实例恢复状态 |
XNC | NUMBER | 缓存块上由于和其他实例争用导致的PCM(Parallel Cache Management并行缓存管理)x to null锁的数量。这一字段已经被废弃。 |
LOCK_ELEMENT_ADDR | RAW(4 | 8) | 缓存块上PCM锁的地址。如果多个缓存块的PCM锁地址相同,说明他们被同一锁锁住。 |
LOCK_ELEMENT_NAME | NUMBER | 缓存块上PCM锁的地址。如果多个缓存块的PCM锁地址相同,说明他们被同一锁锁住。 |
LOCK_ELEMENT_CLASS | NUMBER | 缓存块上PCM锁的地址。如果多个缓存块的PCM锁地址相同,说明他们被同一锁锁住。 |
FORCED_READS | NUMBER | 由于其他实例的PCM锁锁住了该缓存块,导致当前实例尝试重新请求读该缓冲块的次数。 |
FORCED_WRITES | NUMBER | 由于其他实例的PCM锁锁住了该缓存块,导致当前实例尝试重新请求写该缓冲块的次数。 |
DIRTY | VARCHAR2(1) | 脏标志:Y – |
TEMP | VARCHAR2(1) | 是否为临时块:Y – |
PING | VARCHAR2(1) | 是否被ping住:Y – |
STALE | VARCHAR2(1) | 是否是陈旧块:Y – |
DIRECT | VARCHAR2(1) | 是否为直接读写块:Y – |
NEW | VARCHAR2(1) | 字段被废弃,始终为N |
OBJD | NUMBER | 数据块所属对象的对象标号,可以查询dba_objects |
TS# | NUMBER | 数据块所在的表空间号,可以查询v$tablespaces |
1.1.4.共享池(Shared pool)
Shared Pool的大小由参数SHARED_POOL_SIZE决定。在32位系统中,这个参数的默认值是8M,而64位系统中的默认值位64M。最大为4G。
1.1.4.1.库缓存(Library Cache)
任何用户都可以访问共享SQL区(可以通过v$sqlarea访问,随后会介绍这个重要视图)。因此库缓存存在于SGA的共享池中。
·共享SQL区和私有SQL区
一个共享SQL区中保存了一条语句的解析树和查询计划。在多用户系统中,Oracle通过为SQL语句使用同一共享SQL区多次运行来节省内存。
·PL/SQL程序单元