Oracle体系结构(三)---DBWR机制
来源:互联网 发布:淘宝银色遮光布有毒吗 编辑:程序博客网 时间:2024/05/22 11:31
上篇博文分享了日志缓存文件和日志文件的工作机制,接下来结合更新操作update继续对SGA的DBWR部分进行讲解。
其执行步骤跟查询命令几乎没有任何本质区别,差异在于查询语句查询完返回数据给用户就完工了,而更新语句
还需要继续工作。update命令在数据缓冲区内修改完数据后,会启用DBWR进程,完成更新的数据从内存中刷入到磁
盘。因为磁盘才是真正存储数据的地方,否则一断电,数据在内存中就消失了。
问题来了,Update animal set count=25我们执行完这条指令后提交,数据缓存区的数据会立即被DBWR进程写
进磁盘吗?如果不是,那么什么时候执行呢?
答案是不一定,COMMIT无法决定数据何时从数据缓存区刷入到数据区。数据缓存区的数据每提交一次就刷出一
次,性能太低了。Oracle根据一定的规则来促成这个动作,即缓存区的数据积累到一定的程度,再批量刷入到磁盘
中,这样一来就高效得多了。所以到底什么时候执行不一定,如果非要给个答案的话,那就是数据量积累到Oracle指
定的限额的时候。
问题又来了,说到性能就不得不提安全性。安全和效率往往是不能兼顾的,如果突然断电缓冲区中的数据
安全是如何保障的呢?
Oracle的安全机制就需要上篇博文中提到的日志缓存区和日志文件了。日志缓存区也是在内存区怕断电,但是日
志文件是永久保存在物理磁盘的,它可不怕断电!因此,COMMIT时日志缓存区就会把要操作的动作写到日志文件中进
行保存,断电后可以根据磁盘中的日志文件重新操作一遍就可以了。这样一来,Oracle就不一定非要将数据从数据缓
存区写到磁盘了,既保证了高性能又兼顾了安全性。
Oracle数据缓冲区是批量刷出的,那么是否数据量越大越好呢?
答案肯定为否。为什么呢?很多时候我们要考虑一个平衡点,批量刷出的量比较小,性能就会降低,但是断电后
开机恢复的时间短;反之如果批量刷出的量比较大,性能是提高了,但是数据恢复的时间也就更长了。所以要考虑一
个平衡点。那么这个平衡点如何来把握呢?这就需要进程CKPT上场了。什么时候将数据缓存区数据写到磁盘的动作是
由进行CKPT来触发的,CKPT触发DBWR写出。
关于CKPT是如何触发DBWR写出的,欢迎继续关注下篇博文的讲解。
- Oracle体系结构(三)---DBWR机制
- oracle体系结构 LGWR DBWR
- 【Oracle】-【体系结构-DBWR】-DBWR进程相关理解
- 【Oracle】-【体系结构-DBWR】-DBWR进程相关
- Oracle体系结构及备份(十四)——bg-dbwr
- oracle体系结构(三)
- Oracle体系结构概览(三)
- 【Oracle】-【LRU和DBWR】-LRU算法与DBWR中的应用
- Oracle体系结构(二)---日志处理机制
- ORACLE中触发DBWR进程的事件~
- Oracle DBWn(DBWR)写数据文件
- Oracle DBWR和缓存的管理
- ORACLE 体系结构
- ORACLE 体系结构
- oracle体系结构
- oracle体系结构
- oracle 体系结构
- Oracle体系结构
- Matlab fftshift 详解
- UICollectionViewDelegate
- 第十章 内部类
- C++ UI
- 多线程
- Oracle体系结构(三)---DBWR机制
- iOS如何获取设备硬件信息
- 获取指定几个星期的周一、周日的工具类(可用于按周查询数据)
- Maven异常解决
- RabbitMQ学习总结(2)——安装、配置与监控
- Java笔记 第四章(3) Java面向对象编程基础 第三部分(对象概述)
- C#将数值转换为千分位表示
- TCP和UDP的区别有哪些?
- 记录 “Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法”