转自:http://www.ixdba.net/article/0e/420.html
一:什么是checkpoint?
checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件。
二:什么时候发生checkpoint?
我们知道了checkpoint会刷新脏数据,但什么时候会发生checkpoint呢?以下几种情况会触发checkpoint。
1.当发生日志组切换的时候
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候
IXDBA.NET社区论坛
3.当运行ALTER SYSTEM SWITCH LOGFILE的时候
4.当运行ALTER SYSTEM CHECKPOINT的时候
5.当运行alter tablespace XXX begin backup,end backup的时候
6.当运行alter tablespace ,datafile offline的时候;
三:增量检查点(incremental checkpoint)
oracle8以后推出了incremental checkpoint的机制,在以前的版本里每次checkpoint时都会做一个full thread checkpoint,这样的话所有脏数据会被写到磁盘,巨大的i/o对系统性能带来很大影响。为了解决这个问题,oracle引入了checkpoint queue机制,每一个脏块会被移到检查点队列里面去,按照low rdb(第一次对此块修改对应的redo block address)来排列,靠近检查点队列尾端的数据块的low rba值是最小的,而且如果这些赃块被再次修改后它在检查点队列里的顺序也不会改变,这样就保证了越早修改的块越早写入磁盘。每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。
增量检查点并不去更新数据文件头,只是在控制文件中记录了checkpoint progress record这个区域,记下low rba,on-disk rba等信息。这些信息就可以用来快速恢复。
(解释)每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。
这里应该是只更新控制文件,每3秒不是更新数据文件,记录 checkpoint 的执行情况,这个说法,没错,但不够详细,应该说,由于增量检查点和 checkpoint queue 的原理,ckpt 进程每次只是告诉 dbwr ,写dirty buffer将要一直写到最新这个位置,仅仅是告诉 dbwr 一个 checkpoint queue 中的结束点,而 ckpt 每3秒钟,在控制文件中报告一下 dbwr 最新写入的位置。 这样使得,比如数据库要做恢复的时候(instance recovery)可以从这个最新位置开始做恢复,而不是从数据文件中的 checkpoint scn 开始做恢复,这样将缩短恢复时间,尤其是 instance crash 的情况下启动更快。
另外要注意的是,检查点发生的时候,ckpt 去更新数据文件头和控制文件,并不是把当前检查点发生时候的 scn 更新进去,而是把上一次dbwr写入已经完成的检查点发生时候的 scn 更新进去 ,也就是说,更新控制文件和数据文件头 是 滞后于检查点的发生的,这个从恢复的原理也很容易理解,因为检查点发生的时候 dirty buffer还没有写入,自然不能立即更新成当前的 scn 了。
四:数据字典
完全检查点
select * from X$KCCRT where indx=0;
ADDR INDX INST_ID RTNUM RTSTA RTCKP_SCN RTCKP_TIM RTCKP_THR RTCKP_RBA_SEQ RTCKP_RBA_BNO RTCKP_RBA_BOF RTCKP_ETB RTOTF RTOTB RTNLF RTLFH RTLFT RTCLN RTSEQ RTENB RTETS RTDIS RTDIT RTLHP RTSID RTOTS
-------- ---------- ---------- ---------- ---------- ---------------- -- -------------------- ---------- ---------------- --------------------
4084B228 0 1 1 15 720368521 06/25/2004 18:49:37 1 949 2 16 0600000000000000 2 0 3 1 3 1 949 1 05/16/2004 13:29:03 0 1389 tbdb2in1 06/12/2004 12:30:50
这里显示了上一次的完全检查点是在06/25/2004 18:49:37发生,所以我们推断06/25/2004 18:49:37发生了一次日志切换,再去操作系统上去看生产的归档,果然18:49有一个归档生产。
-rw-r----- 1 oracle oinstall 83532800 Jun 25 18:49 1_948.dbf
增量检查点
SQL> select * from X$KCCCP where indx=0;
ADDR INDX INST_ID CPTNO CPSTA CPFLG CPDRT CPRDB CPLRBA_SEQ CPLRBA_BNO CPLRBA_BOF CPODR_SEQ CPODR_BNO CPODR_BOF CPODS CPODT CPODT_I CPHBT CPRLS CPRLC CPMID CPSDR_SEQ CPSDR_BNO CPSDR_ADB
-------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
4084B45C 0 1 1 2 0 10762 29753 949 76847 0 949 106814 0 721554970 06/25/2004 21:05:10 529794310 529036227 1 526310932 1413781667 949 1 0
这里显示了low-rba,on-disk rba,checkpoint time等信息。
案例分析:
各位前辈,看到此章,非常有感,,,
但有一事请各位帮忙,我们单位现在数据库老是有时快,有时慢,是不是跟这个有关系。我该从哪方面开始查!
答:不能肯定是他拉,你慢是指什么意思?是不是同一个语句有时慢有时快吗,如果是这样,那要结合你的statspack来分析,一般来说每个应用都有高峰期和低峰期,看你慢的时候,你的事务量是不是很高(可以在这段时间增加statspack的频率),load的情况如何,是不是有什么耗资源的应用定期在跑(找出这些语句,需要优化他),每秒的重做量是不是很高。io的使用情况,是不是有很多序列读等待还是序列写等待,来合理优化索引
你说的检查点是不是是一个可能的原因,当然有可能,如果没有合理的设置log_buffer大小,logfile放在读写比较差的磁盘上,检查点的频繁程度,合理设置fsfr_start_mttr_target,看看在statspack中存在下面的等待事件
1.log file switch(archiving needed)
日志切换的时候由于日志组循环使用了一圈但日志归档还没有完成,通常是io有严重问题,
可增大日志文件和增加日志组,调整log_archive_max_processes
(checkpoint incomplete)
当日志切换的时候由于日志组循环使用了一圈但将被使用的日志组中的checkpoint还没有完成造成,
通常是io有严重问题,可增大日志文件和增加日志组
2.log file sync(这个到可能是log_buffer太大的反作用)
当用户commit的时候通知lgwr写日志但lwgr正忙,造成的可能原因是commit太频繁或者lgwr一次写日志时间太长
(可能是因为一次log io size 太大),可调整 _log_io_size,
结合log_buffer,使得 (_log_io_size*db_block_size)*n =
log_buffer,这样可避免和增大log_buffer引起冲突;
放置日志文件于高速磁盘上
3.log file single write
指出写入到日志文件的标题块.可能表示检查点中等待
4.另外dbwr写是不是存在瓶径
cache buffers lru chain 是否需要增加
需要异步IO吗还是增加从dbwr
问一下,上面说了ckpt每隔3秒只是更新了控制文件的checkpoint progress record这个区域,那么它是什么时候进行数据文件更新的?当更新了控制文件后,正在更新数据文件时,掉电,会出现什么样的情况呢?
答:数据文件是有dbwr来写的,跟ckpt并没有实质关系。更新控制文件是在更新数据文件之后的动作,所以不用担心,这个时候断电会从上次的ckpt点开始恢复。
分享到:
相关推荐
Checkpoint 分为完全检查点(Normal checkpoint)和增量检查点(Incremental checkpoint)两种。完全检查点是指将所有脏块写入到硬盘,增量检查点是指将部分脏块写入到硬盘。 在了解 Checkpoint 工作原理之前,需要...
知识点一:Checkpoint 防火墙的安装 * 安装 VPN-1/FireWall-1 Gateway 到 Nokia IPSO 3.7 上 * 安装管理服务器到 Win2000 Server * 安装 GUI 界面— Management Client 知识点二:Checkpoint 防火墙的管理服务器...
2. **增量检查点(Incremental Checkpoint)**:这是一种优化策略,仅写入自上次完全检查点以来修改过的脏数据块,从而减少了I/O操作,提高了系统性能。 #### 四、Checkpoint 相关概念 在深入了解Checkpoint的工作...
Linux 中检查点 (Checkpoint) 的核心支持 ——ckpt 文件系统的设计 Linux 操作系统中,检查点 (Checkpoint) 机制是提高系统可靠性、减少运算损失的重要技术。检查点机制的核心支持是实现高效的进程迁移和负载平衡的...
在Oracle数据库管理中,Checkpoint是一种关键机制,用于确保数据的一致性和安全性。Checkpoint的主要功能是在数据库发生故障时,能够快速恢复到一个一致的状态,而无需进行全量的重做日志回放。以下是对Checkpoint...
Oracle检查点(Checkpoint)是数据库管理系统中的一个关键概念,它涉及到数据一致性、恢复机制和性能优化。检查点的主要目的是确保在实例失败后,数据库能够快速地恢复到一致性的状态。 检查点分为增量检查点...
Oracle 检查点(Checkpoint)是数据库管理系统中一种关键的优化策略,它涉及到数据库的稳定性和恢复机制。检查点的主要目标是确保在系统崩溃或意外停机后,数据库能够快速恢复到一致的状态,减少恢复过程中的数据...
Oracle数据库有两种Checkpoint:一种是Consistent Checkpoint,它出现在日志的末尾,用于保证Oracle可以在任何时候打开数据库;另一种是Inconsistent Checkpoint,它和数据文件的检查点对应,用于崩溃恢复。 驱动...
Checkpoint(检查点)是 Oracle 数据库用来同步内存缓冲区与磁盘文件的过程。其主要目的是将脏缓冲区(Dirty Buffer)中的数据写入数据文件,并更新控制文件和重做日志文件中的检查点信息。通过这种方式,可以确保在...
在理解Checkpoint时,区分两种类型的检查点——**完全检查点(Full Checkpoint)**和**增量检查点(Incremental Checkpoint)**至关重要。 ##### 2.1 完全检查点 完全检查点是指所有脏块(即那些被修改但尚未写入磁盘...
当发出 ckpt 时,ckpt 会将检查点时刻的 scn 写入到控制文件和数据文件头部,同时会促使 dbwr 进程将 data buffer 中的所有的脏数据写入到数据文件中。 Checkpoint 的具体工作包括: * 触发 DBWn 向磁盘写入 Dirty...
Oracle还允许通过设置初始化参数如LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT和FAST_START_IO_TARGET来强制触发检查点。此外,数据库管理员可以使用`ALTER SYSTEM CHECKPOINT`命令手动触发检查点。 检查点的...
物理Checkpoint是指将数据库缓冲区缓存(database buffer cache)中的脏页(dirty blocks)写入到数据文件中,并更新控制文件和重做日志文件,使其包含最新的检查点信息。这个过程通常由后台进程CKPT来触发,也可以...
在 SparkCore 中,Checkpoint 可以用于关键点进行Checkpoint,便于故障恢复。Checkpoint 的使用可以大大提高 Spark 应用程序的可靠性和可维护性。 Checkpoint 是 Spark 中的一个重要机制,用于快速恢复应用程序的...
第八章: 检查点 checkpoint 第九章:实例恢复机制 第二部分:Oracle存储架构 第十章: 数据字典和动态视图 第十一章:Oracle的存储架构 第十二章:Oracle中表的几种类型 第十三章:数据库审计 audit 第十四章:数据...
检查点类型可以分为多种,包括标准检查点、图像检查点、表检查点、页面检查点、文本/文本区域检查点、位图检查点、数据库检查点、可访问性检查点、XML 检查点等。 标准检查点是最常用的检查点类型,它可以检查对象...
本教程主要关注如何在测试过程中创建检查点(Checkpoint),以确保网页内容或状态符合预期。在自动化测试中,检查点是一种重要的验证手段,用于比对实际测试结果与预期结果是否一致,从而确保应用程序的正确运行。 ...
在LoadRunner中,检查点(Checkpoint)是一种重要的验证机制,用于验证在虚拟用户执行过程中,应用程序是否按照预期的方式响应。检查点可以帮助测试人员确认特定的操作是否成功完成,或者页面是否正确加载。 本文...