【Oracle】-【体系结构】-【DBWR】-DBWR进程相关理解

对DBWR的一些理解


首先从名称上,DBWR全称是Database Writer Process,属于Oracle后台进程的一种,有的地方也叫DBWn,我想这里是出于DBWR进程个数的原因,DBWR进程在一个Oracle Server中可以最多有20个,编号是DBW1-DBW9和DBWa-DBWj,下面根据不同文档、官方手册以及高手帖的理解,总结关于DBWR的一些关键点:

1、DBWR是将数据库buffer cache中的dirty数据块写到磁盘中,这里dirty表示的是buffer cache中被修改的buffer缓存,DBWR是根据LRU算法实现从缓存写到磁盘的,与dirty相对的还有cold(或clean)块的概念,即未修改的缓存。根据LRU算法,DBWR会将最近最少被使用的buffer写入磁盘,以让其它的数据内容可以写入该缓存,也就是free buffer增加,否则一味地占用buffer cache,新的数据就不能利用buffer cache了。

2、新增的DBWn不能在单处理器中使用,对于数量,每8个CPU可以至少利用一个DBWR进程,如果是处理器组,那么有多少个处理器组,就应该有多少个DBWR进程。DBWR的个数可以由初始化参数DB_WRITER_PROCESSES决定。总结来讲,DBWR的个数如果没有在启动时由用户指定,那么Oracle会根据CPU和处理器组的个数来设置DB_WRITER_PROCESSES参数。

3、DBWR进程会将dirty缓存写入磁盘,条件是:

(1)、服务进程在扫描buffer个数阈值(由隐藏参数:_db_block_max_scan_pct,代表已经扫描的buffer header的个数占整个LRU链表上buffer header总数的百分比)后还没找到一块clean未用的缓存时,会触发DBWR。当执行其它处理时,DBWR会异步地将dirty缓存写入磁盘。

(2)、当出现checkpoint时,DBWR会将dirty的缓存写到磁盘。

(3)、数据文件或表空间离线。

(4)、表空间在备份。

(5)、表空间只读。

(6)、超时。

(7)、表被删除或截断。

4、DBWR是批量(多块)写入,以提高性能。块的数量在不同的操作系统有不同的设置。

5、关于DB_WRITER_PROCESSES,官方文档注明它的默认值是1或CPU数量/8,以及任何大于它的值,范围是1到20。

最重要的一点就是不是每次交易执行commit时,都会立即调用DBWR,换句话说,commit时DBWR不会做任何事情。

原文地址:https://www.cnblogs.com/jiangu66/p/3206812.html