Oracle 检查点深度解析

Oracle 检查点深度解析

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

检查点机制保证数据一致性[1]:

类型

  • 完全检查点
  • 增量检查点
  • 局部检查点
  • 并行检查点

详细见:Oracle 检查点机制详解


2. 检查点作用

2.1 一致性

- 数据文件同步
- SCN 一致
- 实例恢复基础

2.2 性能

- 减少 MTTR
- Buffer Cache 写盘
- 异步 I/O

2.3 恢复

- Redo 起始点
- 减少恢复时间

3. SCN(System Change Number)

3.1 概念

- 数据库版本号
- 单调递增
- 全局唯一

3.2 类型

  • System SCN
  • Checkpoint SCN
  • Stop SCN
  • Datafile SCN
  • Commit SCN

3.3 查看

SELECT current_scn FROM v$database;

4. RBA(Redo Block Address)

4.1 组成

- Log Sequence#
- Block Number
- Offset

4.2 检查点 RBA

- 增量检查点起始
- Redo 位置

5. 完全检查点

5.1 触发

- SHUTDOWN NORMAL/IMMEDIATE/TRANSACTIONAL
- ALTER SYSTEM CHECKPOINT
- LOG SWITCH
- OFFLINE TABLESPACE
- BEGIN BACKUP

5.2 过程

1. CKPT 通知 DBWn
2. DBWn 写所有脏块
3. CKPT 更新控制文件 + 数据文件头

6. 增量检查点

6.1 触发

- MTTR 目标
- Redo Log Buffer 满
- 定期

6.2 检查点队列

- 脏块按首次脏时间排序
- DBWn 按队列写
- CKPT 定期更新控制文件 RBA

6.3 优势

- 减少 I/O 峰值
- MTTR 可控
- 不阻塞

7. MTTR(Mean Time To Recovery)

7.1 设置

ALTER SYSTEM SET fast_start_mttr_target = 300;
-- 300 秒恢复

7.2 影响

- 数值小:DBWn 频繁写
- 数值大:恢复时间长

7.3 自适应

-- 9i+ 自动调整
ALTER SYSTEM SET fast_start_mttr_target = 0;
-- MTTR Advice
SELECT mttr_target_for_estimate, estd_cache_writes 
FROM v$mttr_target_advice;

8. 检查点队列

8.1 结构

- 脏块链表
- 按 SCN/RBA 排序
- LRU 独立

8.2 写入

- DBWn 按队列顺序写
- 减少 I/O
- 恢复可定位

9. 日志切换

9.1 触发

- Redo Log 满
- 手动
- 定期

9.2 检查点

- 日志切换触发检查点
- 旧日志归档
- ARCn

9.3 等待

- log file switch (checkpoint incomplete)
- 检查点未完成
- DBWn 慢

10. 监控

10.1 检查点信息

SELECT 
  ctid, completion_time, 
  datafile_blocks, blocks_kn, 
  blocks_written
FROM v$thread;

SELECT 
  file#, 
  checkpoint_change#, 
  checkpoint_time,
  last_change#
FROM v$datafile;

10.2 MTTR

SELECT 
  recovery_estimated_ios, 
  target_mttr, 
  estimated_mttr
FROM v$instance_recovery;

10.3 检查点事件

SELECT event, total_waits, time_waited
FROM v$system_event
WHERE event LIKE 'checkpoint%' OR event LIKE 'log file switch%';

11. 调优

11.1 Redo Log 大小

- 减少切换
- 15-20 分钟切换
- 多组

11.2 DBWn 数

ALTER SYSTEM SET db_writer_processes = 4;

11.3 MTTR

- 平衡恢复时间 vs 性能
- 300 秒典型

11.4 I/O

- 数据文件分散
- SSD
- 异步 I/O

12. 局部检查点

12.1 触发

- DROP TABLESPACE
- OFFLINE TABLESPACE
- DROP TABLE
- TRUNCATE TABLE

12.2 优势

- 仅相关对象
- 影响小

13. 并行检查点

13.1 RAC

- 各节点独立
- 跨节点协调

13.2 优势

- 并行写
- 性能

14. 常见坑与排错

14.1 log file switch (checkpoint incomplete)

- Redo Log 小
- DBWn 慢
- 增大 Redo Log
- 增大 DBWn

14.2 恢复时间长

- MTTR 设置过大
- 减小 fast_start_mttr_target

14.3 检查点性能

- 减少 I/O
- 异步
- SSD

15. 最佳实践

  1. 增量检查点:现代
  2. MTTR 合理:300 秒
  3. Redo Log 大:减少切换
  4. DBWn 数:CPU/8
  5. I/O 分散:性能
  6. 监控事件:及时
  7. 测试恢复:可行
  8. 文档化:配置
  9. 定期评估:调整
  10. AWR:监控

16. 参考资料

[1] Oracle Database Concepts 19c, “Checkpoint” https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/