检查点队列浅析
来源:互联网 发布:s7200编程电缆驱动 编辑:程序博客网 时间:2024/06/02 05:04
这篇文章算不上原创,顶多算上是伪原创,大部分资料是收集来的自己又更改了部分内容。
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进程的工作负担
- 提高实例恢复速度
0 0
- 检查点队列浅析
- 检查点队列与增量检查点
- 检查点队列简单总结
- CKPT检查点队列
- ORACLE Checkpoint-检查点队列与增量检查点
- oracle检查点队列与增量检查点【转载】
- OCP知识点讲解 之 检查点队列与增量检查点
- Oracle 的检查点队列 (checkpoint queue)
- 第十八讲--检查点队列(checkpoint queue)
- oracle学习笔记 检查点队列(checkpoint queue)
- 队列-浅析
- 检查点
- 检查点
- 检查点
- 检查点
- 检查点
- 检查点
- 检查点
- BC #65 (A)
- java 多线程 CountDownLatch用法
- 有向图(6)--计算强连通分量的Kosaraju算法
- Nginx与tomcat 实现负载均衡和动静分离
- 希尔排序
- 检查点队列浅析
- iOS开发 - 22.实用技术之地图的基本使用
- 混淆
- MFC应用程序
- UVa 725 除法
- iOS进程、线程相关总结
- BC #65(B) 规律
- 第一次写博客
- Unable to execute dex: Multiple dex files define 解决方法