关于检查点队列的简单总结

1、Oracle日志原理

REDO流(重做日志流)

RBA (重做字节地址由4部分组成:日志线程号、日志序列号、日志文件块编号和日志文件字节偏移量,长度为10个字节.例如Thread:1 RBA:0x000014.00000003.0010)

ckpt equeue :1.每3秒会触发检查脏块,2.每3秒检查ckpt equeue头的RBA,把检查队列头RBA写到控制文件)

作用:(1).统计脏数据块

(2).RBA按顺序排序,刷数据到磁盘就按这顺序

(3).每个RBA除指向下一个RBA,还指向脏数据块地址

2、检查点队列(检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复时间),在BH中有一个ckptq项,双向链表.

(1)只有脏块才会在检查点队列中,非脏块的ckptq为空。

(2)当块首次被更改时,块会立即被加进检查点队列。 如果检查点队列中的脏块再次被修改,并不会改变其在

检查点队列中的位置。

(3)检查点队列中脏块的排列顺序:根据第2点,所有脏块按照首次被更改的时间的顺序排列。 更准确点说:按

照块的lrba排列。

3、什么是RBA?LRBA?HRBA?ON DISK RBA?

(1)RBA:就是重做块地址

(2)LRBA:第一次对此数据块修改对应的Redo Block Address的顺序排列

(3)HRBA:相对于LRBA,后面修改的RBA

(4)on disk rba:磁盘中重做日志文件的最后一条重做记录的rba,是最高的重做值。

4、参与检查点的进程主要包括lgwr、dbwn和ckpt,分为两大类:完全检查点和增量检查点

(1)完全检查点主要包括以下步骤:

 ①首先,在日志缓冲中确定当前的(也就是最新的)重做记录,提取其RBA与SCN作为检查点目标

 ②LGWR清空日志缓存,将重作记录写入在线日志

 ③DBWn进程将检查点目标(RBA与SCN)产生的及检查点目标之前产生的脏数据块,按RBA的顺序写入数据文件

 ④最后,CKPT进程将检查点目标(RBA与SCN)写入数据文件的头部和控制文件

(2)触发完全检查点的条件:

①执行shutdown immediate命令

②执行alter system checkpoint命令

③LGWR切换在线日志,不论是因为日志写满还是执行alter system switch logfile命令

④执行部分表空间维护命令:alter tablespace ...offline|online|begin backup|end backup|read only|read write

5、增量检查点并不会去更新数据文件头,而只是每3秒由CKPT进程去更新控制文件中的LRBA和SCN

(1)增量检查点主要包含以下步骤

①CKPT每3秒一次记录检查点位置的工作(更新控制文件)

②CKPT定期触发DBWR

(2)增量检查点的意义有以下两个:

①减少发生完全检查点时DBWn进程的工作负担

②提高实例恢复的速度

6、CHECKPOINT 优化

(1)从9I开始CHECKPOINT的优化大大简化了

设置FAST_START_MTTR_TARGET

较大的值:恢复时间较长

较小的值:增加IO负载

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-10-31 19:54:05

关于检查点队列的简单总结的相关文章

python设置检查点简单实现代码_python

说检查点,其实就是对过去历史的记录,可以认为是log.不过这里进行了简化.举例来说,我现在又一段文本.文本里放有一堆堆的链接地址.我现在的任务是下载那些地址中的内容.另外因为网络的问题或者网站的问题,每次下载可能不会非常的成功.有可能出现断链或者socket异常错误.不过不管产生什么样的错误,我都希望我的程序能够一直跑下去.或者能停掉后,继续从为下载的链接处跑.而不是从开始的地方跑.这个问题非常简单.因为这些链接是上下文无关的(上下文有关的情况要另外分析).所以我只要记录程序运行停止前的最后一条

[20170407]关于增量检查点的一个疑问.txt

[20170407]关于增量检查点的一个疑问.txt --//oracle现在写脏块基本采用增量检查点,除非执行alter system checkpoint,或者shutdown immediate(normal)正常关闭数据库. --//别人的疑问,如果如果写增量检查点时,current log tail at RBA=Incremental checkpoint up to RBA时,如下情况 1.环境: SYS@book> @ &r/ver1 PORT_STRING         

ORACLE CheckpointQueue和增量检查点

<p style="margin:0in;font-size:20.0pt;"> ORACLE CheckpointQueue和增量检查点 </p> <p style="margin:0in;font-size:10.0pt;color:gray;"> <br /> </p> <p style="margin:0in;line-height:15pt;font-family:微软雅黑;fon

队列在编程中的实际应用(php)

一:队列的概念.数据结构 队列(Queue)是运算受到限制的一种线性表.只允许在表的一端进行插入,而在另一端进行删除元素的线性表.队尾(rear)是允许插入的一端.队头(front)是允许删除的一端.空队列是不含元素的空表. 假设有个队列Q=(a1,a2,-,an),则a1为队头元素,an为队尾元素.元素入队的次序为a1,a2,-,an,而出队的次序为a1,a2,-,an.可见队列的操作是按照先进先出的原则进行的. 其他详细的介绍请在网上搜索很多资料. 二:PHP的队列 在PHP中队列以数组的形

【性能优化】增量检查点

Oracle从8i开始引入了检查点队列这么一种概念,用于记录数据库里面当前所有的脏数据块的信息,DBWR根据这个队列而将脏数据块写入到数据文件中.检查点队列按时间先后记录着数据库里面脏数据块的信息,里面的条目包含RBA(Redo Block Address,重做日志里面用于标识检查点期间数据块在重做日志里面第一次发生更改的编号)和数据块的数据文件号和块号.在检查点期间不论数据块更改几次,它在检查点队列里面的位置始终保持不变,检查点队列也只会记录它最早的RBA,从而保证最早更改的数据块能够尽快写入

Redis消息队列

Redis的消息队列使用简单,没有什么配置,比ActiveMQ要轻量级太多,当然功能也比较简单,如果只需要简单的订阅以及发布,可以考虑使用它. 订阅操作 命令为:subscribe [channel] [channel] ..,如[代码1]所示,即成功订阅频道[redis.blog]. 发布操作 命令为publish [channel] [message],如[代码2]所示,[图1]为订阅的客户端展示效果. [代码1]: subscribe "redis. blog" [代码2] pu

Redis 消息队列介绍

Redis的消息队列使用简单,没有什么配置,比ActiveMQ要轻量级太多,当然功能也比较简单,如果只需要简单的订阅以及发布,可以考虑使用它. 订阅操作 命令为:subscribe [channel] [channel] ..,如[代码1]所示,即成功订阅频道[redis.blog]. 发布操作 命令为publish [channel] [message],如[代码2]所示,[图1]为订阅的客户端展示效果. [代码1]: subscribe "redis. blog" [代码2] pu

oracle 检查点(checkpoint)

以下内容整理自网路,如有侵权,请联系我. checkpoint扫盲 什么是checkpoint 在数据库系统中,写日志和写数据文件是数据库中IO消耗最大的两种操作,在这两种操作中写数据文件属于分散写,写日志文件是顺序写,因此为了保证数据库的性能,通常数据库都是保证在提交(commit)完成之前要先保证日志都被写入到日志文件中,而脏数据块着保存在数据缓存(buffer cache)中再不定期的分批写入到数据文件中.也就是说日志写入和提交操作是同步的,而数据写入和提交操作是不同步的.这样就存在一个问

队列在编程中的实际应用(php)_php技巧

一:队列的概念.数据结构 队列(Queue)是运算受到限制的一种线性表.只允许在表的一端进行插入,而在另一端进行删除元素的线性表.队尾(rear)是允许插入的一端.队头(front)是允许删除的一端.空队列是不含元素的空表. 假设有个队列Q=(a1,a2,-,an),则a1为队头元素,an为队尾元素.元素入队的次序为a1,a2,-,an,而出队的次序为a1,a2,-,an.可见队列的操作是按照先进先出的原则进行的. 其他详细的介绍请在网上搜索很多资料. 二:PHP的队列 在PHP中队列以数组的形