WEB开发网
开发学院数据库Oracle Oracle中Buffer Cache内存结构及监控 阅读

Oracle中Buffer Cache内存结构及监控

 2007-05-12 12:24:11 来源:WEB开发网   
核心提示: 我们看到,该buffer header指向的就是6号文件里的45066号数据块,Oracle中Buffer Cache内存结构及监控(7),我们可以再来看看表buffer_test里的rowid所告诉我们的文件号以及数据块号,从下面可以看到,有兴趣的话,可以将该视图取出的结果与转储出来的文

我们看到,该buffer header指向的就是6号文件里的45066号数据块。我们可以再来看看表buffer_test里的rowid所告诉我们的文件号以及数据块号,从下面可以看到,结果是一样的。

SQL> select id,dbms_rowid.rowid_relative_fno(rowid) as file#,
 2 dbms_rowid.rowid_block_number(rowid) as block# from cost.buffer_test;
    ID   FILE#   BLOCK#
---------- ---------- ----------
     1     6   45066

我们可以来看一下st,这表示buffer cache所指向的数据块的状态。一共有六种状态:FREE(0)=可以被重用的数据块;XCURRENT(1)=实例以排他方式获取的当前模式数据块;SCURRENT(2)=可以与其他实例共享的当前模式数据块;CR(3)=作为一致性读镜像的数据块,永远不会被写入磁盘;READING(4)=正在从磁盘读出的数据块;MRECOVERY(5)=正在进行介质恢复的数据块;IRECOVERY(6)=正在进行实例恢复的数据块。从状态说明中我们可以看到,现在表buffer_test的数据块都是当前模式的数据块。我们可以来构造一个CR状态的数据块。

分别建立两个session,在一个session中,执行:

SQL> update buffer_test set id=2 where id=1;

不要提交,然后在另外一个session中,执行:

SQL> select * from buffer_test;
    ID
----------
     1

然后我们转储buffer header后,到跟踪文件中找到obj为7087的记录,可以看到类似如下的内容。可以看到该buffer header的状态就是CR。

…………………………………
BH (0x63FFBBC8) file#: 6 rdba: 0x0180b00a (6/45066) class 1 ba: 0x63F5C000
…………………………………
 ckptq: [NULL] fileq: [NULL]
 st: CR md: NULL rsop: 0x00000000 tch: 0
…………………………………

另外,我们还可以看到tch,就是表示该数据块被扫描的次数。 以上这些是转储出来的内容。Oracle还提供了视图来显示buffer header的内容,这就是X$BH。这个视图就是把转储到平面文件以后所看到的诸如hash、st、tch等的值以列的方式呈现出来。这里就不做过多的介绍了,有兴趣的话,可以将该视图取出的结果与转储出来的文件进行比较,就可以知道每一列的含义。

上一页  2 3 4 5 6 7 

Tags:Oracle Buffer Cache

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接