Oracle Tanel Poder 等待事件深度
Oracle Tanel Poder 等待事件深度
来源:Tanel Poder / tanelpoder.com 适用版本:Oracle Database 9i+ 文档版本:v1.0 / 2026-07-22
1. 概述
Tanel Poder 对等待事件有深度解读[1]。
详细见:Oracle-Maclean-Wait-Interface详解。
2. Tanel 等待事件观
2.1 核心
- 等待事件是症状
- 不是根因
- 深入分析
2.2 方法
- 等待事件 + 上下文
- P1/P2/P3 解读
- 内部机制
2.3 工具
- snapper
- ASH
- 等待事件文档
3. 等待事件要素
3.1 基本信息
- Event Name
- Wait Class
- P1/P2/P3
- Wait Time
3.2 P1/P2/P3
- 不同事件不同含义
- 定位关键
- 查文档
3.3 Tanel 强调
- P1/P2/P3 是核心
- 理解每个参数
- 定位
4. db file sequential read
4.1 含义
- 索引单块读
- P1: file#
- P2: block#
- P3: blocks (1)
4.2 定位
SELECT owner, segment_name, segment_type
FROM dba_extents
WHERE file_id = &p1 AND &p2 BETWEEN block_id AND block_id+blocks-1;
4.3 Tanel 分析
- 索引扫描
- 高:评估 SQL
- 优化
5. db file scattered read
5.1 含义
- 全表/索引快速全扫描
- 多块读
- P1: file#, P2: block#, P3: blocks
5.2 Tanel 分析
- 全表扫描
- 高:评估
- 加索引/分区
6. direct path read
6.1 含义
- 直接路径读
- 绕过 Buffer Cache
- 并行/ASYNCH I/O
6.2 场景
- 并行查询
- 排序溢出
- 11g+ 直接读
6.3 Tanel 分析
- 大表全扫描
- 11g+ 自动
- 评估
7. log file sync
7.1 含义
- COMMIT 等待 LGWR
- P1: buffer
7.2 关联
- log file parallel write(LGWR)
- 区分应用 vs 磁盘
7.3 Tanel 分析
- parallel write 高 → 磁盘
- parallel write 低 → 应用 commit
7.4 优化
- 事务级 commit
- Redo Log 优化
- 评估
8. buffer busy waits
8.1 含义
- 块争用
- 等待 pin
- P1: file#, P2: block#, P3: class#
8.2 class#
- data block:数据块
- segment header:段头
- undo block:Undo
- undo header:Undo 头
8.3 Tanel 分析
- data block:热点
- segment header:并发 INSERT
- 优化
9. enq: TX - row lock
9.1 含义
- 行锁
- P1: name|mode
- P2: usn<<16|slot
- P3: sequence
9.2 解析 P2
- usn = TRUNC(p2 / 65536)
- slot = MOD(p2, 65536)
9.3 Tanel 方法
- 找阻塞者
- 评估
- 优化
10. latch: cache buffers chains
10.1 含义
- 热点块 Latch 争用
- P1: latch addr
10.2 定位
-- Latch → 块
SELECT hladdr FROM x$bh WHERE hladdr = '&p1';
10.3 Tanel 分析
- 热点块
- 高并发
- 反向索引/分区
11. library cache lock/pin
11.1 含义
- Library Cache 争用
- lock:编译
- pin:执行
11.2 P1/P2/P3
- P1: handle address
- P2: pin address
- P3: mode
11.3 Tanel 分析
- DDL 冲突
- 绑定变量
- 共享池
12. read by other session
12.1 含义
- 其他会话在读
- 物理读争用
12.2 Tanel 分析
- 多会话同块
- Buffer Cache 不足
- 评估
13. free buffer waits
13.1 含义
- 等待空闲 Buffer
- DBWn 慢
13.2 Tanel 分析
- DBWn 跟不上
- Buffer Cache 不足
- 评估
14. Tanel 诊断流程
14.1 步骤
1. 等待事件 TOP
2. P1/P2/P3
3. 定位对象
4. 内部机制
5. 根因
6. 优化
14.2 工具
- snapper:实时
- ASH:历史
- latchprof:Latch
- v$ 视图
14.3 深度
- 不止于事件名
- 理解机制
- 定位根因
15. 案例
15.1 案例:db file scattered read
- 全表扫描
- P1/P2/P3 → 对象
- 加索引
15.2 案例:log file sync
- 区分应用 vs 磁盘
- parallel write
- 优化
15.3 案例:latch 争用
- Latch → 块 → 对象
- 热点
- 反向索引
16. Tanel 名言
"Wait events are symptoms, not causes"
"Know your wait events"
"P1/P2/P3 matters"
17. 学习资源
17.1 博客
- tanelpoder.com
- 系列文章
- 深度
17.2 培训
- Advanced Oracle Troubleshooting
- 实战
17.3 TPT
- GitHub
- 开源
- 脚本
18. 最佳实践
- P1/P2/P3:理解
- 定位对象:dba_extents
- 内部机制:深入
- snapper:实时
- ASH:历史
- 根因:分析
- 案例:学习
- 工具:TPT
- 监控:持续
- 原理:理解
19. 参考资料
[1] Tanel Poder, “Wait Events Deep Dive”, https://tanelpoder.com [2] Oracle Database Reference 19c