检查点checkpoint

Oracle数据中有一个概念叫“检查点”,很不容易理解。

检查点不是一个点,而是一个事件。这个事件的发生只有一个作用:让数据文件变“新”,或者说数据文件离数据库的状态不那么远,反正不太容易描述清楚。

检查点事件的目的是让实例恢复的时间变短(妈哟,这个更不好描述)。

检查点这个事件的实际动作就是:将data buffer cache中的“脏数据”写至数据文件(数据文件或者撤销文件)。

将脏数据写入数据文件,怎么写?全部写,还是只写相关的部分,按照一定算法部分写?这三种写法就对应如下的三种检查点事件。

据说从9i以来,数据库存在三种检查点:完全检查点,局部检查点和增量检查点。

完全检查点,这个很好理解,就是将data buffer cache(标准翻译叫数据库数据缓冲区缓存)中的所有脏数据全部写入对应的数据文件和撤销文件(也是数据文件)。

所以执行完全检查点的成本很高,成本主要是指cpu使用和IO使用。因为可能存在相当数量的脏数据。

局部检查点,这个局部怎么理解呢?:局部的意思就是和某种相关的操作或者对象关联的数据(当然也是脏数据)。

比如将一个表截断时,那么在截断该表之前,内存中很可能存在和该对象(也就是要被截断的表)相关的脏数据,这些脏数据必须要被处理(也就是要被写入相关的数据文件),然后才能真正执行截断操作。

另外,将表空间/数据文件脱机,或者置于备份模式也会触发这类对象的局部检查点。还有像删除区间时,区间相关的脏数据块写入也触发局部检查点。

增量检查点,这个最简单,实施这样的操作的成本也最低,就是dbwn进程根据“最近最少使用”的原则,将冷门脏数据(就是data buffer cache中的脏数据链中的最冷端)写入对应的数据文件。本着对数据库性能最小影响的原则,所以一次增量检查点写入的数据量很小。

另外,根据资料显示,在联机日志自动/手动切换时,根据不会触发任何类型的检查点事件。

还有,检查点事件不是由ckpt进程发起,我觉得应该是由dbwn或者服务器进程发起,ckpt进程只是在检查点事件发生时,去更新控制文件的信息而已。

增量检查点由dbwn发起(dbwn进程根据自己的机制主动或者被动地发起增量检查点),完全检查点由服务器进程发起(因为完全检查点是由人为手动触发的,那么对应的应该是服务器进程)。


可以使用如下参数将检查点事件的日志写入alert日志:

SQL> show parameter checkpoints_to

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_checkpoints_to_alert             boolean     FALSE
SQL> alter system set log_checkpoints_to_alert=true scope=both;

System altered.

SQL> 

执行一次完全checkpoint:

SQL> alter system checkpoint;

System altered.

SQL>

alert日志:

Mon Oct 05 12:00:22 2015
Beginning global checkpoint up to RBA [0x23.19e1.10], SCN: 1420105
Completed checkpoint up to RBA [0x23.19e1.10], SCN: 1420105

执行一次日志组切换:

SQL> alter system switch logfile;

System altered.

SQL> 

alert日志:

Mon Oct 05 12:02:09 2015
Beginning log switch checkpoint up to RBA [0x24.2.10], SCN: 1420299
Thread 1 advanced to log sequence 36 (LGWR switch)
  Current log# 3 seq# 36 mem# 0: /u01/oradata/denver/redo03.rdo

可见,日志切换还是触发了一次检查点事件(是什么检查点呢?)

另外,alert日志还有如下检查点:

Mon Oct 05 12:03:00 2015
Incremental checkpoint up to RBA [0x23.19e8.0], current log tail at RBA [0x24.2.0]  这个是增量检查点。

Mon Oct 05 12:06:26 2015
Completed checkpoint up to RBA [0x24.2.10], SCN: 1420299  (日志切换触发的检查点结束,耗时有点长,难道是完全检查点?)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值