Oracle中全量CHECKPOINT和增量CHECKPOINT的区别与作用

2024-05-16 10:28

本文主要是介绍Oracle中全量CHECKPOINT和增量CHECKPOINT的区别与作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全量CHECKPOINT和增量CHECKPOINT对用户都是透明的,而增量CHECKPOINT只不过是将全量CHECKPOINT要写的脏块分时间分批次写到数据文件中而已,此操作可以极大地减少对数据库性能的影响。

  1. 全量CHECKPOINT
    全量CHECKPOINT是指DBWR进程将脏缓冲区列表中的脏块一次性地写入数据文件中。该操作可以简单地分为2个步骤(这里假设执行全量CHECKPOINT的时间点为t1):
    (1)DBWR进程将t1时间点前的所有脏块写到数据文件。如果脏块很多,将引起大量的I/O写操作。如果DBWR进程数不够,写入速度将比较缓慢。
    (2)确定所有脏块都写进数据文件之后,CKPT进程更新控制文件和数据文件头。
    假如SGA中的脏块数量很多,那么DBWR进程一次性写脏块是非常消耗I/O的,这不仅加重了DBWR进程的负担,而且还可能因为I/O问题而影响业务,所以不建议频繁进行全量CHECKPOINT操作。
  2. 增量CHECKPOINT
    从Oracle 8开始,Oracle推出了增量CHECKPOINT这一特性,即DBWR进程将CKPTQ队列中的脏块不断地写往磁盘中,从而减轻磁盘I/O压力。Oracle是否启用增量CHECKPOINT,跟隐含参数_disable_incremental_checkpoints有关(默认开启增量CHECKPOINT)。增量CHECKPOINT操作步骤可以简单地分为3步:
    (1)BUFFER CACHE中脏块第一次被更新的时候产生的重做日志记录在重做日志文件中所对应的位置就称为LRBA(Low Redo Block Adress)。脏块按照LRBA顺序组成CKPTQ列表。DBWR进程扫描CKPTQ列表,依次将满足条件的脏块写进数据文件中,并在内存中递增CHECKPOINT NUMBER值,即SCN值。
    (2)脏块写成功之后,DBWR进程将脏块从CKPTQ队列中移走。
    (3)CKPT进程每隔3秒在控制文件中更新DBWR写脏块的进度,即增量CHECKPOINT所完成的RBA信息。
  3. 全量CHECKPOINT和增量CHECKPOINT区别
    增量CHECKPOINT时,CKPT进程不更新数据文件头信息,但会更新控制文中的CHECKPOINT PROGRESS RECORDS。可以DUMP控制文件观察当前实例LGWR进程写在线日志的进度情况。全量CHECKPOINT和增量CHECKPOINT的主要区别如下:
    写脏块的动作不同。全量CHECKPOINT会将BUFFER CACHE中某一时间点之前的所有脏块刷新到数据文件中,在脏块比较多的数据库中,全量CHECKPOINT操作可能会影响数据库的性能。增量CHECKPOINT则是将脏块第一次变脏的顺序分为不同的时间点逐批写到数据文件中,有点“细水长流”的感觉。
    更新的位置不同。全量CHECKPOINT完成之后,会更新内存、数据文件头、控制文件。而增量CHECKPOINT完成之后,只更新内存SCN值和控制文件。
    触发的条件不同。全量CHECKPOINT往往需要通过命令人为触发,而增量CHECKPOINT的触发受多种因素影响,如ONLINE REDOLOG大小、参数FAST_START_MTTR_TARGET等。

这篇关于Oracle中全量CHECKPOINT和增量CHECKPOINT的区别与作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994647

相关文章

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用