Oracle Tanel Poder 诊断脚本全集
Oracle Tanel Poder 诊断脚本全集
来源:Tanel Poder / tanelpoder.com 适用版本:Oracle Database 9i+ 文档版本:v1.0 / 2026-07-22
1. 关于 Tanel Poder
Tanel Poder,Oracle ACE Director,知名性能专家[1]。
- 博客:tanelpoder.com
- 开源工具:TPT (Tanel Poder’s scripts)
- 擅长内部机制、诊断脚本
2. TPT 脚本集
2.1 介绍
- Tanel Poder's Tuning Scripts
- 开源
- 性能诊断利器
- GitHub: github.com/tanelpoder/tpt_oracle
2.2 特点
- 简洁高效
- 深入内部
- 实战导向
2.3 安装
git clone https://github.com/tanelpoder/tpt_oracle
cd tpt_oracle
sqlplus / as sysdba
@install
3. 常用脚本
3.1 snapper.sql
- 会话级实时监控
- 等待事件
- 统计信息
@snapper ash 5 1 sid=123
-- 每 5 秒采样,1 次,会话 123
3.2 asql.sql
- ASH + SQL
- TOP SQL
- 历史分析
@asql "select event, count(*) from v$active_session_history where sample_time > sysdate-1/24 group by event order by 2 desc"
3.3 tcpdump.sql
- 等待事件转储
- P1/P2/P3 解释
3.4 nonshared
- 查找非共享游标原因
- v$sql_shared_cursor
@nonshared <sql_id>
4. snapper 深度
4.1 用途
- 实时会话监控
- 等待事件
- Time Model
- 统计
4.2 语法
@snapper <ash|stats|all> <interval> <count> sid=<sid>
4.3 示例
-- ASH 模式
@snapper ash 5 10 sid=123
-- 统计模式
@snapper stats 5 1 sid=123
-- 全部
@snapper all 5 1 sid=123
4.4 Tanel 优势
- 实时
- 不依赖 AWR
- 灵活
5. rowchains.sql
5.1 用途
- 检测行迁移/行链接
- v$sysstat
5.2 查询
SELECT name, value FROM v$sysstat
WHERE name LIKE 'table fetch%continued row%';
5.3 Tanel 分析
- 行迁移影响性能
- 重建表
- PCTFREE 调整
详细见:Oracle 行迁移与行链接。
6. look.sql
6.1 用途
- 查找锁
- 阻塞链
- 等待关系
6.2 示例
@look like 'select sid, blocking_session, event from v$session where blocking_session is not null'
7. nonshared.sql
7.1 用途
- 查找游标不共享原因
- v$sql_shared_cursor
7.2 示例
@nonshared <sql_id>
7.3 输出
- 不共享原因
- LANGUAGE_MISMATCH
- OPTIMIZER_MODE_MISMATCH
- BIND_EQUIV_FAILURE
7.4 Tanel 分析
- 不共享 → 多版本
- Library Cache 压力
- 优化
8. im.sql
8.1 用途
- In-Memory 信息
- 12c+
9. waitprof.sql
9.1 用途
- 等待事件分析
- 函数级别
- 深入
9.2 Tanel 优势
- 函数调用栈
- 等待原因
- 高级
10. diag.sql
10.1 用途
- 综合诊断
- 系统信息
- 快速
11. asm.sql
11.1 用途
- ASM 信息
- 磁盘/Disk Group
12. other
12.1
- bsh (buffer cache)
- bh (buffer header)
- latchprof
- mutexprof
13. Tanel 诊断方法论
13.1 原则
- 工具辅助
- 数据驱动
- 深入内部
13.2 步骤
1. snapper 实时监控
2. ASH 历史
3. 等待事件
4. 根因
5. 优化
13.3 工具组合
- snapper:实时
- asql:ASH
- nonshared:游标
- latchprof:Latch
- mutexprof:Mutex
14. 案例
14.1 案例:会话慢
1. snapper 监控
2. 等待事件
3. P1/P2/P3
4. 根因
5. 优化
14.2 案例:Library Cache
1. nonshared 查找
2. 不共享原因
3. 绑定变量
4. 优化
14.3 案例:Latch 争用
1. latchprof
2. 热点 Latch
3. 热块
4. 优化
15. Tanel 名言
"Know your tools"
"Advanced debugging requires advanced tools"
"Internals matter"
16. 其他脚本
16.1
- script_manager.sql
- psql
- predict
16.2 平台
- Linux
- Solaris
- AIX
17. 学习资源
17.1 博客
- tanelpoder.com
- 系列文章
- 深入
17.2 培训
- Advanced Oracle Troubleshooting
- 在线课程
- 实战
17.3 GitHub
- github.com/tanelpoder/tpt_oracle
- 开源
- 更新
18. 最佳实践
- TPT 脚本:安装
- snapper:实时
- nonshared:游标
- latchprof:Latch
- asql:ASH
- 数据驱动:诊断
- 内部机制:理解
- 案例:学习
- 社区:交流
- 原理:深入
19. 参考资料
[1] Tanel Poder, https://tanelpoder.com [2] TPT Scripts, https://github.com/tanelpoder/tpt_oracle