首页 > Oracle > Oracle buffer cache 理解之三—–转储buffer cache!
2013
12-24

Oracle buffer cache 理解之三—–转储buffer cache!

oracle 的buffer cache和其他内存结构一样,可以将buffer cache转储到跟踪文件以便查阅,同时提供了不同的level:

这里的leveln有如下几个值:

1 只转储buffer header

2 在level 1的基础上再转储数据块头

3 在level 2的基础上再转储数据块内容

4 转储buffer header和hash chain

5 在level 1的基础上再转储数据块头和hash chain

6 在level 2的基础上再转储数据块内容和hash chain

8 转储buffer header和hash chain以及users/waiters链表

9 在level 1的基础上再转储数据块头、hash chain以及users/waiters链表

10 在level 2的基础上再转储数据块内容、hash chain以及users/waiters链表

下面我们实际来看一下buffer cache转储之后的内容:

1.创建test测试表

2.查出object_id,并插入测试值

这里我只插入了一条数据,可以得知目前jerry_test表中实际只有2个block会有数据,一个就是segment header,另一个就是实际存放了1这个值的block,我们先来看header这个转储文件:

查看转储文件,根据object_id找到测试表

这里的buffer header没有连续,可见没有在同一个hash chain上,同样lru,ckptq等,这些都是管理buffer cache的链表的一种结构,这里没有连续,说明没有在同一条hash chain上,中间穿插了oracle数据字典的hash值。

可以在上面的转储代码中看到class值,该值表示buffer header所对应的数据块类型,含义如下:

其次我们来看一下st,表示buffer cache所指向的数据块的状态,值如下:

从上面的状态可以看出来,此时表中的数据块都是第二种:实例以排他方式获取的当前模式的数据块,这里可以构造其他数据块查看,比如cr数据块,这里就不演示了。

另外还有一直值得提出的就是tch,表示该数据块被扫描的次数。这里转储出来的文件信息,都可以从oracle内部视图X$BH中查询,不过视图中是按照值–列的方式,和转储文件展示方式不一样而已。

关于buffer cache的转储大概就介绍到这里,可能转储的意义,对于平时来讲不大,对于研究内部机制还是很有用处的,以后的博客会简单介绍buffer cache的内部机制。

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL