Oracle BufferCache管理机制:理解ckpt+redo+dbwr在数据获取中的作用
需积分: 9 14 浏览量
更新于2024-10-21
收藏 289KB DOC 举报
本文档详细探讨了Oracle数据库中checkpoint (ckpt), redo log (redo), 和 dbwr (database writer) 在buffer cache 内部管理机制中的关键作用。当前台进程执行SQL语句时,Oracle首先会通过执行计划找到所需的数据块,并将其相关信息封装在buffer descriptor中,存储在会话的PGA内存中。这个过程涉及到了数据块的物理地址、类型、对象ID等信息。
数据获取流程的核心是通过hash算法确定数据块的位置,即在hashbucket和hashchain上进行搜索。当Oracle接收到数据块请求时,它会在hashchain上执行以下步骤:
1. 检查bufferheader上的数据块地址,若不符则跳过。
2. 跳过处于写入中(CR)状态的bufferheader,避免并发冲突。
3. 遇到读取中(READING)的bufferheader,进程会等待直到其状态改变,再次检查地址是否匹配。
4. 如果找到匹配的bufferheader且锁模式兼容,进程会直接返回数据块地址并更新正在使用列表。
5. 若锁模式不兼容,Oracle会创建一个新的XCURRENT状态的复制数据块,更新状态为CR的bufferheader,并将新地址和进程号添加到列表。
6. 如果遍历完整个hashchain仍无匹配,这可能意味着数据块未在缓存或已被写入redo log,这时DBWR会介入进行进一步处理。
在整个过程中,checkpoint(ckpt)用于定期将脏数据(未提交更改的数据)写回磁盘,减少数据丢失的风险。redo log(redo)则负责记录所有事务的更改,以供在系统故障后恢复数据。而dbwr(database writer)作为后台进程,负责将脏数据写回磁盘和同步redo log,确保数据的一致性和可靠性。理解这些概念对于深入理解Oracle数据库的性能优化和故障恢复至关重要。
483 浏览量
821 浏览量
179 浏览量
825 浏览量
2021-09-21 上传
2879 浏览量
2024-01-09 上传
243 浏览量
116 浏览量
傻儿哥
- 粉丝: 163
- 资源: 18
最新资源
- nRF905射频芯片文档
- symbian入门教程(创建工程)
- 嵌入式系统C语言编程
- 某某集团员工办公应用软件操作手册.pdf
- AIX_5L_Club_TestReport.doc
- T-SQL资料(很不错)
- 高校医院管理系统需求说明书
- 利用天语A615作为调制解调器让电脑上网操作方法.doc
- CCS2000的使用说明
- Beginning JavaScript with DOM Scripting and Ajax
- 高速缓冲存储器的功能
- zxld1350的英文资料
- 2440datasheet
- ASP.net 中用C#调用Java web service 图解教程
- 计算机组成原理习题答案
- redhat as3下安装oracle 9i