对象有多少个数据块缓冲在Data buffer中

对象有多少个数据块缓冲在Data buffer中

为了详细说明具体的情况,先创建一个测试表,并且插入一定的记录进去。

如以上,先创建了一个叫test的表,并插入了5000条记录,插入记录后,用showspace存储过程分析一下表的空间使用情况。关于这个存储过程的具体代码,在本书的附录B中可以获得,因为这个存储过程本身很通用,这里就不多介绍这个存储过程本身了。
可以看到的是,这张TEST的表一共使用了16个块,数据文件id为4,我们再分析一下数据所在的Rowid。

可以看到,数据块其实只占用了8个块,但是表合计占用了16个数据块,另外8个块是什么呢,它们是段头,位图块等,是表中的额外开销。至于这些块的详细信息,在本书的表空间与数据分布一章会有详细介绍,现在只需要知道,该表有16个block,数据块占了8个。

注意:以上通过Rowid查询使用了哪些数据块,只适合没有发生行迁移与行链接的情况下,如新创建的表,插入的小记录是适合的。如果发生了行迁移与行链接,因为Rowid本身不发生变化,而数据块的使用却会发生变化。

那么,现在分别查询一下x$bh与v$bh,看看它们中间保存了几条记录。

FILE# DBABLK TCH
---------- ---------- ----------
4 9 2
4 10 2
4 11 5

4 12 2
4 13 2
4 14 2
4 15 2
4 16 2
4 17 2
4 18 2
4 19 2
4 20 2
4 21 2
4 22 2
4 23 2
4 24 2

16 rows selected.

Piner@10gR2>select file#,block#,status from v$bh where objd=
2 (select data_object_id from dba_objects
3 where owner='PINER' and object_name='TEST')
4 order by block#;

FILE# BLOCK# STATUS
---------- ---------- -------
4 9 xcur
4 10 xcur
4 11 xcur
4 12 xcur
4 13 xcur
4 14 xcur
4 15 xcur
4 16 xcur
4 17 xcur
4 18 xcur
4 19 xcur
4 20 xcur
4 21 xcur
4 22 xcur
4 23 xcur
4 24 xcur

16 rows selected.

可以看到,这两个查询都返回了16条记录,从块9到块24,中间包含了数据块所在的8个块。至于为什么从块9开始,在本书的后面也会有解释,因为本地管理的数据文件头部,有8个保留块。

看x$bh,返回了块的触摸(touch count)信息,表示了一个块的热点程度,现在最热的是数据块11,它并不是数据块,而是段头,通过如下查询也可以证明:

看v$bh,返回了块的状态信息,这里是xcur,表示排斥状态,被当前instance独占,也就是该块正在被使用。常见的状态还有scur,表示被instance共享;cr,表示一致性读;free表示空闲状态;read,表示正在从磁盘上读取;write,表示正在被写入。至于v$bh的这些状态,也是从x$bh中通过decode函数根据字段state解释过来的,所以能看得更明白一些。

如果这个时候,手工清除一次Data buffer,会发生什么情况呢?

可以看到,x$bh中的块的tch都恢复到0了,而v$bh中的状态也都变成free了,但是记录数并没有发生变化,也就是说,数据块虽然被刷到磁盘上去了,数据块的记录指针只不过是简单地被清空而已。

http://holyane.blog.163.com/blog/static/4192717220099161104576/

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21340813/viewspace-1028127/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21340813/viewspace-1028127/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值