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. 最佳实践
- 增量检查点:现代
- MTTR 合理:300 秒
- Redo Log 大:减少切换
- DBWn 数:CPU/8
- I/O 分散:性能
- 监控事件:及时
- 测试恢复:可行
- 文档化:配置
- 定期评估:调整
- AWR:监控
16. 参考资料
[1] Oracle Database Concepts 19c, “Checkpoint” https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/