检查点队列浅析
2015-12-06 23:15
393 查看
这篇文章算不上原创,顶多算上是伪原创,大部分资料是收集来的自己又更改了部分内容。
oracle日志原理
redo(重做日志)
rba(重做字节地址由4部分组成:日志线程号,日志序列号,日志文件块编号和日志文件字节偏移量,长度为10个字节。
ckpt equeue: 1,每三秒检查ckpt equeue头的RBA,把检查队列头RBA写到控制文件)
作用:
统计脏数据块
RBA按顺序排序,刷数据到磁盘就按照这个顺序
每个RBA除指向下一个RBA,还指向脏数据块地址
检查点队列(检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复事件),在BH中有一个CKPTQ项,双向链表。
只有脏块才会在检查点队列中,非脏块的CKPTQ为空。
当块首次被更改时,块会立即被加进检查点队列。如果检查点队列中的脏块再次被修改,并不会改变在检查点队列中的位置。
检查点队列中脏块的排序顺序:根据第2点,所有脏块按照首次被更改的时间顺序排列。更准确的说:按照块的1rba排列。
什么是RBA,LRBA,HRBA,ON DISK RBA
RBA: redo block address(修改数据块会产生日志,这就是日志的地址,在checkpoint
queue队列相应的块中记下RBA)
LRBA: 块第一次被脏的那个日志地址。
HRBA: 块最近一次脏的地址。
on disk rba:磁盘中重做日志文件的最后一条重做记录的rba,是最高的重做值。
参与检查点的进程主要包括LGWR,DBWn,和CKPT,分为两大类:完全检查点和增量检查点
完全检查点主要包括以下步骤:
首先在日志缓冲中确定当前的(也就是最新的)重做记录,提取其RBA和SCN作为检查点目标
LGWR清空日志缓存,将重做记录写入在线日志
DBWn进程将检查点目标(RBA和SCN)产生的及检查点目标之前产生的脏数据块,按RBA的顺序写入数据文件
最后,CKPT进程将检查点目标(RBA和SCN)写入数据文件的头部和控制文件
发生时会触发DBWn将所有脏块写到磁盘上。触发完全检查点条件
执行shutdown immediate 命令
执行alter system checkpoint命令
LGER切换在线日志,不论是因为日志写满还是执行alter system switch logfile命令
执行部分表空间维护命令:alter tablespace ... offline|online|begin backup|end backup|read only|read write
增量检查点并不会去更新数据文件头,而只是每3秒由CKPT进程去更新控制文件中的LRBA和SCN, 发生时会检查检查点队列如果发现队列上脏块太多,并且发现io不是很忙,那么将上边的部分写到磁盘中,触发DBWn写。
增量检查点主要包含以下步骤
CKPT每3秒一次记录检查点位置的工作(更新控制文件)
CKPT定期触发DBWR
增量检查点的意义有以下两个:
减少发生完全检查点时DBWn进程的工作负担
提高实例恢复速度
oracle日志原理
redo(重做日志)
rba(重做字节地址由4部分组成:日志线程号,日志序列号,日志文件块编号和日志文件字节偏移量,长度为10个字节。
ckpt equeue: 1,每三秒检查ckpt equeue头的RBA,把检查队列头RBA写到控制文件)
作用:
统计脏数据块
RBA按顺序排序,刷数据到磁盘就按照这个顺序
每个RBA除指向下一个RBA,还指向脏数据块地址
检查点队列(检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复事件),在BH中有一个CKPTQ项,双向链表。
只有脏块才会在检查点队列中,非脏块的CKPTQ为空。
当块首次被更改时,块会立即被加进检查点队列。如果检查点队列中的脏块再次被修改,并不会改变在检查点队列中的位置。
检查点队列中脏块的排序顺序:根据第2点,所有脏块按照首次被更改的时间顺序排列。更准确的说:按照块的1rba排列。
什么是RBA,LRBA,HRBA,ON DISK RBA
RBA: redo block address(修改数据块会产生日志,这就是日志的地址,在checkpoint
queue队列相应的块中记下RBA)
LRBA: 块第一次被脏的那个日志地址。
HRBA: 块最近一次脏的地址。
on disk rba:磁盘中重做日志文件的最后一条重做记录的rba,是最高的重做值。
参与检查点的进程主要包括LGWR,DBWn,和CKPT,分为两大类:完全检查点和增量检查点
完全检查点主要包括以下步骤:
首先在日志缓冲中确定当前的(也就是最新的)重做记录,提取其RBA和SCN作为检查点目标
LGWR清空日志缓存,将重做记录写入在线日志
DBWn进程将检查点目标(RBA和SCN)产生的及检查点目标之前产生的脏数据块,按RBA的顺序写入数据文件
最后,CKPT进程将检查点目标(RBA和SCN)写入数据文件的头部和控制文件
发生时会触发DBWn将所有脏块写到磁盘上。触发完全检查点条件
执行shutdown immediate 命令
执行alter system checkpoint命令
LGER切换在线日志,不论是因为日志写满还是执行alter system switch logfile命令
执行部分表空间维护命令:alter tablespace ... offline|online|begin backup|end backup|read only|read write
增量检查点并不会去更新数据文件头,而只是每3秒由CKPT进程去更新控制文件中的LRBA和SCN, 发生时会检查检查点队列如果发现队列上脏块太多,并且发现io不是很忙,那么将上边的部分写到磁盘中,触发DBWn写。
增量检查点主要包含以下步骤
CKPT每3秒一次记录检查点位置的工作(更新控制文件)
CKPT定期触发DBWR
增量检查点的意义有以下两个:
减少发生完全检查点时DBWn进程的工作负担
提高实例恢复速度
相关文章推荐
- 如何修改OpenCV源码并调试
- 项目报告(最终版)
- 第二百四十八天 how can I 坚持
- 利用svn的blame功能查出代码的每一行是谁写/改的
- 安装 kali live usb
- dede之瀑布流添加心得
- SVM(一)问题的提出
- Android群英传之Android控件建构与自定义控件详解知识点总结
- java 多线程 CountDownLatch用法
- eclipse_jee启动tomcat无法访问tomcat首页,但项目首页却可以打开
- 如何实现arcgis图层属性字段物理顺序的修改
- Java中关于先有鸡还是先有蛋的问题----Class&Object
- VS2008 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”
- Word中使用通配符
- 关于flexpaper不能读取web应用外的swf文件解决方案
- Android开发日记(六)
- Javascript操作DOM常用API总结
- 2015第49周日
- 20135333苏正生——信息安全系统设计基础第十二周学习总结
- 5.1&&5.2字符大小写转换 加密 'A'+13=N,'Z'+13=M