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. 最佳实践

  1. TPT 脚本:安装
  2. snapper:实时
  3. nonshared:游标
  4. latchprof:Latch
  5. asql:ASH
  6. 数据驱动:诊断
  7. 内部机制:理解
  8. 案例:学习
  9. 社区:交流
  10. 原理:深入

19. 参考资料

[1] Tanel Poder, https://tanelpoder.com [2] TPT Scripts, https://github.com/tanelpoder/tpt_oracle