oracle checkpoint作用释疑


首先在checkpoint机制中理解脏数据的概念!
脏数据是相对于原数据而言的,是指被修改过的,与原数据不一样的数据。

在oracle有SGA中,有个数据高速缓冲区(database buffer cache),由许多大小相等的缓存块组成。
这些块根据使用情况不同,可分为脏缓冲块、空闲缓存块和命中缓存块三类:
1. 脏缓存块(dirty buffers):它保存的是已经被修改过的数据。当一条语句对某个缓存块中的数据进行修改后,这个缓存块就被标记为脏缓存块。
2. 空闲缓存块(free buffers):不包含任何数据,它们等待后台进程或进程向其中写入数据。当oracle从数据文件中读取数据时,
将会寻找空闲缓存块,以便将数据写入其中。
3. 命中缓存块(pinned buffers):是那些正被使用,或者被显式地声明为保留的缓存块。这些缓存块始终保留在数据高速缓冲区中,不会被换出。

1. 何为检查点?其存在的意义?
2. 检查点的有哪些分类?检查点的结构如何?什么是checkpoint queue?

通俗的将,检查点仅仅是一个机制而已,其作用是通知DBWR进程将cache buffer中的脏块写入
到disk中,当然这个通知的动作是通过检查点进程CKPT来完成的。那么检查点存在的意义是什
么呢?其实很简单,目的就是减少db crash后的recover time。

这里可能存在一个误区,那就是并不是只有检查点的情况下才会导致DBWR进程去写脏块到disk
中,在cache buffer 空间不足的情况下,由于Cache buffer LRU的机制就决定了不管是否发生
检查点,DBWR都会将脏块写入到disk中,以此来保证cache buffer能容纳更多的new block。

所谓的checkpoint queue,可以理解为由脏块组成的一个LRU链表。

检查点有哪些分类呢?大概有如下几种:

1. Full Checkpoint
2. Thread Checkpoint (local checkpoint, global checkpoint)
3. Datafile Checkpoint
4. Mini-checkpoint (object checkpoint,基于DDL)
5. Parallel Query Checkpoint
6. Incremental Checkpoint (Log Switch Checkpoint)

1. 首先我们来看下完全检查点,对于full checkpoint,在8i之前就存在了,很好理解,你目的是
一旦触发完全检查点,DBWR进程会将cache buffer drity LRU list上的所有脏块写入到disk中(持久化的过程)。

那么在哪些情况下会触发完全检查点呢?如下:

(1) shutdown instance;
(2) 日志组切换
(3) log_checkpoint_timeout,log_checkpoint_interval,fast_start_io_target,fast_start_mttr_target
(4) 手工执行alter system switch logfile时
(5) 手工alter system checkpoint
(6) alter tablespace XXX begin/end backup;
(7) alter tablespace XXX datafile offline;

注意: 在oracle 8i以后,引入增量检查点以后,日志切换以及switch logfile都是增量检查点,
不过需要说明一下的是,虽然说其是增量检查点,不过同时触发时controlfile和datafile header
都会进行更新的,后面的实验可以说明。

完全检查点就说到这里,至于局部检查点以及全局检查点,注意是针对RAC而言,可以这样理解:

alter system checkpoint local; 就是触发单实例的完全检查点
alter system checkpoint global; 就是RAC中所有实例同时触发完全检查点

2. 文件检查点

文件检查点相对完全检查点而言,你可以理解为属于其子集,其针对范围是某个表空间或表空间
中的某个数据文件,当执行如下命令的时候,会触发文件检查点:

alter tablespace XXX begin/end backup;
alter tablespace ,datafile offline;

下面通过bbed来验证一下:
BBED> info all

File# Name Size(blks)
—– —- ———-
1 /home/ora10g/oradata/roger/system01.dbf 57600
2 /home/ora10g/oradata/roger/undotbs01.dbf 118400
3 /home/ora10g/oradata/roger/sysaux01.dbf 33280
4 /home/ora10g/oradata/roger/users01.dbf 640
5 /home/ora10g/oradata/roger/roger01.dbf 2560
6 /home/ora10g/oradata/roger/roger02.dbf 1280

BBED> set file 5 block 1

FILE# 5
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000de088
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db03de8
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000008
ub4 kcrbabno @504 0x00005c72
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00

BBED> set file 6 block 1

FILE# 6
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000de088
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db03de8
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000008
ub4 kcrbabno @504 0x00005c72
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00

BBED> set file 4 block 1
FILE# 4
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000de088
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db03de8
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000008
ub4 kcrbabno @504 0x00005c72
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
将表空间ROGER offline,如下:
> alter tablespace roger offline;

Tablespace altered.

> !

[ora10g@killdb ~]$ bbed parfile=parfile.bbed
Password:

BBED: Release 2.0.0.0.0 – Limited Production on Sun Nov 6 23:29:39 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************

BBED> set file 4 block 1

FILE# 4
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000de088
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db03de8
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000008
ub4 kcrbabno @504 0x00005c72
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00

BBED> set file 5 block 1

FILE# 5
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000df6b3
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db074d1
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000008
ub4 kcrbabno @504 0x000075ab
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00

BBED> set file 5 block 1

FILE# 5
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000df6b3
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db074d1
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000008
ub4 kcrbabno @504 0x000075ab
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00

++++++ 我们可以看到仅仅是表空间roger中的几个datafile的检查点SCN发生了改变。++++++

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《oracle checkpoint作用释疑
本文地址:https://www.zhiletu.com/archives-451.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微