关于dirty buffer

其实大家对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的深层含义.

时间: 2024-12-24 11:28:53

关于dirty buffer的相关文章

buffer cache实验4

ckptq的工作机制与增量检查点及fast_start_mttr_target参数 1.检查点概念--chkpoint 检查点是一个数据库事件,存在的意义在于减少崩溃恢复crash recovery时间. 检查点事件由后台进程CKPT触发,当检查点发生时,CKPT通知DBWR进程将脏数据库dirtybuffer写出到数据文件上,更新数据文件头及控制文件上的检查点信息. 数据文件头的SCN是CHECKPOINT SCN. 检查点工作原理: 在数据库中,进行数据修改时,需要先将数据读和内存中buff

buffer cache实验3:lru和lruw链表

1.Buffer cache中的LRU链表概念: oracle在hash chain中未搜索到所需要的buffer时,ORACEL 服务进程会发出I/O调用,到磁盘的数据文件中读取相应数据块--除了直接路径读外,此时会将数据块的内容拷贝到buffer cache 内存中--同时会构造一个buffer header. 在将数据块拷贝到buffer cache中时,假如buffer cache是空的,直接拿一个空的内存数据块来用即可. 但是如果buffer cache中的内存数据块全都被用掉了,没有

oracle Buffer Cache的管理机制

1.LRU链表结构概述 在前面,我们已经知道了Oracle是如何在hash chain中搜索要找的数据块所对应的buffer header的过程,我们也知道如果在hash chain上没有找到所要的buffer header时,Oracle会发出I/O调用,到磁盘上的数据文件中获取数据块,并将该数据块的内容复制一份到buffer cache中的内存数据块里.这个时候,假如buffer cache是空的,比较好办,直接拿一个空的内存数据块来用即可.但是如果buffer cache中的内存数据块全都

buffer cache 深度解析+

本文内容整理自网络:     本文首先详细介绍了oracle中buffer cache的概念以及所包含的内存结构.然后结合各个后台进程(包括DBWRn.CKPT.LGWR等)深入介绍了oracle对于buffer cache的管理机制,并详细解释了oracle为什么会采用现在的管理机制,是为了解决什么问题.比如为何会引入touch次数.为何会引入增量检查点等等.最后全面介绍了有关buffer cache监控以及调优的实用方法. 1. buffer cache的概念   用最简单的语言来描述ora

Redo log日志组故障分析

数据库平台:SunOS 5.8 Generic_108528-23 sun4u sparc SUNW,Ultra-Enterprise 数据库版本:8.1.5.0.0 数据库症状:数据库响应缓慢,应用请求无法返回,业务操作陷于停顿,此时需要DBA介入并进行问题诊断及故障处理. 1. 登录数据库进行检查 首先我们登录数据库,检查故障现象. 经过检查发现,数据块的所有重做日志组除current外都处于active状态: oracle:/oracle/oracle8>sqlplus "/ as

Oracle Redo log日志组故障分析

数据库平台:SunOS 5.8 Generic_108528-23 sun4u sparc SUNW,Ultra-Enterprise 数据库版本:8.1.5.0.0 数据库症状:数据库响应缓慢,应用请求无法返回,业务操作陷于停顿,此时需要DBA介入并进行问题诊断及故障处理. 1. 登录数据库进行检查 首先我们登录数据库,检查故障现象. 经过检查发现,数据块的所有重做日志组除current外都处于active状态: oracle:/oracle/oracle8>sqlplus "/ as

关于oracle检查点及SCN的深入研究

一.检查点概述 大多数关系型数据库都采用"在提交时并不强迫针对数据块的修改完成"而是"提交时保证修改记录(以重做日志的形式)写入日志文件"的机制,来获得性能的优势.这句话的另外一种描述是:当用户提交事务,写数据文件是"异步"的,写日志文件是"同步"的.这就可能导致数据库实例崩溃时,内存中的DB_Buffer中的修改过的数据,可能没有写入到数据块中.数据库在重新打开时,需要进行恢复,来恢复DB Buffer中的数据状态,并确保已

oracle检查点及oracle SCN知识详解

一.检查点概述 大多数关系型数据库都采用"在提交时并不强迫针对数据块的修改完成"而是"提交时保证修改记录(以重做日志的形式)写入日志文件"的机制,来获得性能的优势.这句话的另外一种描述是:当用户提交事务,写数据文件是"异步"的,写日志文件是"同步"的.这就可能导致数据库实例崩溃时,内存中的DB_Buffer 中的修改过的数据,可能没有写入到数据块中.数据库在重新打开时,需要进行恢复,来恢复DB Buffer 中的数据状态,并确

Oracle 表空间与数据文件

--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念     表空间:是一个或多个数据文件的逻辑集合     表空间逻辑存储对象:永久段-->如表与索引                         临时段-->如临时表数据与排序段                      回滚段-->用于事物回滚或闪回内存的撤销数据     表空间分类:系统表空间(sys