Oracle BufferCache管理机制:理解ckpt+redo+dbwr在数据获取中的作用
需积分: 9 155 浏览量
更新于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数据库的性能优化和故障恢复至关重要。
2021-07-12 上传
2023-08-24 上传
2021-05-29 上传
2021-09-21 上传
110 浏览量
2024-01-09 上传
2023-06-03 上传
2023-05-10 上传
2023-07-24 上传
傻儿哥
- 粉丝: 163
- 资源: 18
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程