关于dirty buffer

发表于:2007-07-02来源:作者:点击数: 标签:
其实大家对v$bh这个视图可能一直重视不够. 我们来看一下这个视图主要字段说明: STATUS VARCHAR2(1) Status of the buffer: FREE - not currently in use XCUR - exclusive SCUR - shared current CR - consistent read READ - being read from disk MREC - i

其实大家对v$bh这个视图可能一直重视不够.

我们来看一下这个视图主要字段说明:


STATUS

VARCHAR2(1)

Status of the buffer:
FREE - not currently in use XCUR - exclusive SCUR - shared current CR - consistent read READ - being read from disk MREC - in media recovery mode IREC - in instance recovery mode ?


DIRTY

VARCHAR2(1)

Y - block modified

TEMP

VARCHAR2(1)

Y - temporary block

PING

VARCHAR2(1)

Y - block pinged

STALE

VARCHAR2(1)

Y - block is stale

DIRECT

VARCHAR2(1)

Y - direct block


?

我们注意到v$dirty代表的就是block modified

?

如果我们进一步向下追溯:

SQL> select VIEW_DEFINITION from v$fixed_view_definition where VIEW_NAME = @#GV$BH@#;

VIEW_DEFINITION
--------------------------------------------------------------------------------
select bh.inst_id, file#, dbablk, class, decode(state,0,@#free@#,1,@#xcur@#,2,@#scur@#
,3,@#cr@#, 4,@#read@#,5,@#mrec@#,6,@#irec@#,7,@#write@#,8,@#pi@#), x_to_null, forced_reads,
forced_writes, bh.le_addr, name,le_class, decode(bitand(flag,1), 0, @#N@#, @#Y@#), d
ecode(bitand(flag,16), 0, @#N@#, @#Y@#), decode(bitand(flag,1536), 0, @#N@#, @#Y@#), dec
ode(bitand(flag,16384), 0, @#N@#, @#Y@#), decode(bitand(flag,65536), 0, @#N@#, @#Y@#), @#
N@#, obj, ts# from x$bh bh, x$le le where bh.le_addr = le.le_addr (+)


我们可以看到v$bh的底层表示x$bh

其中v$bh中的dirty/temp/ping/stale/direct五个字段来源于x$bh中的flag字段

格式化一下输出:

SELECT bh.inst_id, file#, dbablk, CLASS,
?????? DECODE (state,
?????????????? 0, @#free@#,
?????????????? 1, @#xcur@#,
?????????????? 2, @#scur@#,
?????????????? 3, @#cr@#,
?????????????? 4, @#read@#,
?????????????? 5, @#mrec@#,
?????????????? 6, @#irec@#,
?????????????? 7, @#write@#,
?????????????? 8, @#pi@#
????????????? ),
?????? x_to_null, forced_reads, forced_writes, bh.le_addr, NAME, le_class,
?????? DECODE (BITAND (flag, 1), 0, @#N@#, @#Y@#),
?????? DECODE (BITAND (flag, 16), 0, @#N@#, @#Y@#),
?????? DECODE (BITAND (flag, 1536), 0, @#N@#, @#Y@#),
?????? DECODE (BITAND (flag, 16384), 0, @#N@#, @#Y@#),
?????? DECODE (BITAND (flag, 65536), 0, @#N@#, @#Y@#), @#N@#, obj, ts#
? FROM x$bh bh, x$le le
?WHERE bh.le_addr = le.le_addr(+)


由此我们得以窥视x$bh.flag的深层含义.

原文转自:http://www.ltesting.net