关于checkpoint的讨论

原创 2004年07月12日 11:03:00

 

http://www.cnoug.org/viewthread.php?tid=21969

贴主: wanghai

 

checkpoint小议

什么是checkpoint?
checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件。

什么时候发生checkpoint?
我们知道了checkpoint会刷新脏数据,但什么时候会发生checkpoint呢?以下几种情况会触发checkpoint。
1.当发生日志组切换的时候
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候
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执行的情况。

数据字典
完全检查点
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等信息。

 

biti_rainy:

每隔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 了。

jerrysun 转:

something about checkpoint queue latch

wanghai, the following is just for your reference. :)

Firstly we have two queue structures associated with checkpoints - the checkpoint queue - or thread queue - (CKPTQ), and the file queue.For each buffer to be checkpointed, it is linked to these two queues. The CKPTQ contains all buffers that need to be checkpointed for this instance.  The File queue contains all buffers that belong to a specific file that need to  be checkpointed. There is one file queue per file. The file queues are used by tablespace checkpoint requests.

Both these queues constitute a set of checkpoint queues.

Before a process can put a buffer on a checkpoint queue, it must make sure that the queue is not being used. There is one checkpoint queue latch per set of  checkpoint queues, that is used to control access to these queues. To reduce contention on this latch, the set of thread and file queues is replicated as per the number of working sets for the instance.

The determination of the number of working sets has changed across the DB versions.  For 9.2, the default number is calculated
internally as #CPUs  / 2 * 8.

The maximum of DBWR's (db_writer_processes) you can have at 9.2 is 20.  Working sets are assigned to DBWR's in a round-robin
fashion at startup.

 

关于checkpoint queue 与 write list 的关系,请参考

http://blog.csdn.net/biti_rainy/archive/2004/08/01/learn_oracle_20040801_1.aspx

 

关于checkpoint的讨论

关于checkpoint的讨论   http://www.cnoug.org/viewthread.php?tid=21969 贴主: wanghai   checkpoint小议什么是checkp...
  • georgewang
  • georgewang
  • 2004年07月23日 10:42
  • 749

Java输入输出流总结

题目:把字符串"1,+,2,+,3,+,4,+,5,-,6,-,7,+,8,-,9"写入D盘,并且计算字符串的值,在控制台打印。 import java.io.File; import java.io...
  • tonehao1990
  • tonehao1990
  • 2015年06月08日 22:09
  • 651

乔布斯:关于Flash的几点看法

当初这篇轰动一时的文章,据说是乔大爷去世前亲自写的(好吧,Java虽然同样被拒,但还没这种待遇) -------------------------------------------------...
  • arvin0
  • arvin0
  • 2016年03月14日 16:10
  • 761

Hadoop2.0 HA的checkpoint过程

hdfs将文件系统的元数据信息存放在fsimage和一系列的edits文件中。在启动HDFS集群时,系统会先加载fsimage,然后逐个执行所有Edits文件中的每一条操作,来获取完整的文件系统元数据...
  • Amber_amber
  • Amber_amber
  • 2015年07月22日 15:00
  • 3324

推荐几个值得关注的微信公众号

微信公众平台推出有一段时间了,然而相信和我一样没有怎么搞懂微信公众号到底是个什么东西的大有人在,不止是我们,许多拥有微信公众号甚至被官方认证了的都还没有搞懂怎么很好的使用它。于是,我收集了一些目前个人...
  • macwhirr123
  • macwhirr123
  • 2014年04月22日 12:18
  • 3493

spark源码学习(十二)--- checkpoint机制分析

checkpoint原理: 上篇cacheManager源码分析文章中提到,当RDD使用cache机制从内存中读取数据,如果数据没有读到,会使用checkpoint机制读取数据。此时如果没有ch...
  • englishsname
  • englishsname
  • 2016年03月03日 21:33
  • 751

Spark中的checkpoint作用与用法

checkpoint的意思就是建立检查点,类似于快照,例如在spark计算里面 计算流程DAG特别长,服务器需要将整个DAG计算完成得出结果,但是如果在这很长的计算流程中突然中间算出的数据丢失了,sp...
  • qq_20641565
  • qq_20641565
  • 2017年07月27日 23:19
  • 3415

spark-streaming系列------- 5. Spark-Streaming checkpoint的原理和实现

本文以KafkaDirectDStream方式为例说明Spark-Streaming checkpoint的原理     JobGenrerator.generateJobs负责Streaming J...
  • u012684933
  • u012684933
  • 2015年12月31日 18:34
  • 2378

postgresql之checkpoint(检查点)

检查点(Checkpoints)是事务序列中的点,我们保证在该点之前的所有日志信息都更新到数据文件中去了。 在检查点时,所有脏数据页都冲刷到磁盘并且向日志文件中写入一条特殊的检查点记录。 结果是,在发...
  • sszgg2006
  • sszgg2006
  • 2014年05月24日 13:34
  • 5195

Hadoop学习——HDFS中的Snapshot和Checkpoint

Snapshot(快照):在数据库或者文件系统中,一个快照表示对当前系统状态的一个备份,当系统发生故障时,可以利用这个快照将系统恢复到产生快照时的样子。 Checkpoint(检查点):因为数据库系统...
  • yangning5850
  • yangning5850
  • 2013年07月09日 22:05
  • 2596
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于checkpoint的讨论
举报原因:
原因补充:

(最多只允许输入30个字)