Oracle 杨廷琨 Oracle 内部机制揭秘

Oracle 杨廷琨 Oracle 内部机制揭秘

来源:杨廷琨 (AskTOM 中文 / 啖汤) 适用版本:Oracle Database 全版本 文档版本:v1.0 / 2026-07-22


1. 概述

杨廷琨擅长 Oracle 内部机制讲解[1]。

详细见:Oracle 数据块结构深度


2. 数据块结构

2.1 块头

- 块类型
- 事务槽(ITL)
- SCN
- 块地址

2.2 行目录

- 行位置
- 行长度
- 行状态

2.3 行数据

- 列值
- 行头
- 列长度

2.4 空闲空间

- 块尾
- 未用空间

3. ITL(Interested Transaction List)

3.1 作用

- 事务信息
- 块级锁
- 一致性读

3.2 结构

- 事务 ID
- Undo 地址
- SCN
- Flag

3.3 INITRANS/MAXTRANS

CREATE TABLE emp (...) INITRANS 2 MAXTRANS 255;

3.4 杨廷琨分析

- INITRANS 太小 → 等待
- 高并发调整
- 监控

4. SCN 机制

4.1 类型

- 系统 SCN
- 提交 SCN
- 块 SCN
- 查询 SCN

4.2 一致性读

- 查询 SCN
- 块 SCN 比较
- Undo 回滚

4.3 杨廷琨强调

- SCN 是一致性基础
- MVCC 核心
- 理解

详细见:Oracle SCN 机制详解


5. Undo 机制

5.1 作用

- 回滚
- 一致性读
- 闪回

5.2 Undo Segment

- 事务绑定
- 自动管理(AUM)
- UNDO_RETENTION

5.3 ORA-01555

- Undo 被覆盖
- 长查询
- 增加 Undo

详细见:Oracle Undo 深度解析


6. Latch

6.1 作用

- 内存结构保护
- 短期锁
- 串行化

6.2 类型

- cache buffers chains
- library cache
- shared pool
- redo copy

6.3 杨廷琨分析

- Latch 争用 = 性能问题
- 原因分析
- 优化

详细见:Oracle Latch 与 Mutex 深度解析


7. Mutex

7.1 作用

- 替代部分 Latch
- 更轻量
- 11g+

7.2 优势

- 内存小
- 速度快
- 减少 Latch

7.3 杨廷琨对比

- Latch vs Mutex
- 适用场景
- 性能

8. Buffer Cache

8.1 LRU

- 最近最少使用
- 替换算法
- 冷热分离

8.2 LRUW

- 脏块链
- DBWn 写

8.3 多缓冲池

ALTER SYSTEM SET db_cache_size=1G;
ALTER SYSTEM SET db_keep_cache_size=200M;
ALTER SYSTEM SET db_recycle_cache_size=200M;

详细见:Oracle Buffer Cache 工作原理详解


9. 共享池

9.1 Library Cache

- SQL/PLSQL
- 执行计划
- 游标

9.2 Data Dictionary Cache

- 数据字典
- 解析需要

9.3 Result Cache

- 11g+
- 结果缓存
- 性能

详细见:Oracle Shared Pool 深度解析


10. Redo Buffer

10.1 作用

- Redo 缓存
- LGWR 写
- COMMIT

10.2 大小

SHOW PARAMETER log_buffer

10.3 杨廷琨分析

- 太小:等待
- 太大:浪费
- 平衡

11. 后台进程

11.1 关键进程

- PMON:进程监控
- SMON:系统监控
- DBWn:写数据
- LGWR:写 Redo
- CKPT:检查点
- ARCn:归档

11.2 协同

- LGWR 先于 DBWn
- CKPT 触发 DBWn
- ARCn 跟随 LGWR

详细见:Oracle 后台进程 SMON PMON DBWn LGWR CKPT ARCn 详解


12. 杨廷琨学习方法

12.1 转储

-- 数据块转储
ALTER SYSTEM DUMP DATAFILE 5 BLOCK 100;

-- 控制文件转储
ALTER SESSION SET EVENTS 'immediate trace name controlf level 8';

12.2 视图

- v$waitstat
- v$sysstat
- v$latch
- v$lock

12.3 实验

- 测试环境
- 复现
- 验证

13. 内部机制应用

13.1 性能诊断

- 等待事件
- 内部视图
- 根因

13.2 故障诊断

- 转储
- trace
- 分析

13.3 优化

- 参数调整
- 结构调整
- 验证

14. 最佳实践

  1. 原理:理解
  2. 转储:学习
  3. 视图:监控
  4. 实验:验证
  5. 案例:学习
  6. 等待:分析
  7. 参数:合理
  8. 监控:内部
  9. 文档:记录
  10. 持续:学习

15. 参考资料

[1] 杨廷琨, “Oracle 内部机制”, https://www.modb.co/u/yangtingkun [2] Oracle Database Concepts 19c [3] Jonathan Lewis, “Oracle Core”