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等的值以列的方式呈现出来。这里就不做过多的介绍了,有兴趣的话,可以将该视图取出的结果与转储出来的文件进行比较,就可以知道每一列的含义。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接