Home  >  Article  >  Database  >  【Oracle】

【Oracle】

WBOY
WBOYOriginal
2016-06-07 15:31:471293browse

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

对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不会做任何事情。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn