【Oracle】-【体系结构-DBWR】-DBWR进程相关理解
2013-07-21 21:18
309 查看
对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不会做任何事情。
首先从名称上,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不会做任何事情。
相关文章推荐
- 【Oracle】-【体系结构】-【DBWR】-DBWR进程相关理解
- 【Oracle】-【体系结构-DBWR】-DBWR进程相关
- Linux下使用ps命令来查看Oracle相关的进程
- oracle四个重要的后台进程(DBWR / LGWR / ARCH / CKPT)
- oracle体系结构-进程结构 概述
- oracle查找并杀掉锁表及对象的session及相关系统进程
- oracle变成艺术 深入理解数据库体系结构 第三版 目录
- Linux下使用ps命令来查看Oracle DB以及EBS相关的进程
- ORACLE后台进程----DBWR/DBWn
- Linux下使用ps命令来查看Oracle相关的进程
- 【Oracle脚本】Oracle进程相关的SQL脚本
- 【Oracle】-【体系结构-LGWR】-LGWR的一些理解
- 适合初学者理解的Oracle的体系结构
- Oracle相关服务与svchost.exe进程
- Oracle体系结构:内存结构和进程结构-体系架构
- 【Oracle脚本】Oracle进程相关的SQL脚本
- 基础入门_Python-进程相关.深入理解子进程/守护进程/进程高可用实现?
- Oracle--数据库体系结构(物理结构、逻辑结构、内存结构及进程)
- 第八篇 再述oracle数据库体系结构 之四:Oracle实例的进程结构
- 操作系统的进程和线程的相关知识的理解