重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 50|回复: 0

[Oracle] Oracle SQL_TRACE 性能跟踪

[复制链接]
发表于 2026-4-26 18:51:25 | 显示全部楼层 |阅读模式
一、概述
SQL_TRACE 是 Oracle 提供的底层性能跟踪工具,用于捕获会话或数据库级别的 SQL 执行活动,生成跟踪文件(trace file),帮助分析:

SQL 执行细节
性能瓶颈定位
递归调用追踪
核心特点
5807969eded8619f29.png

⚠️ 注意事项
启用跟踪会增加系统开销,使用后应立即关闭
生产环境避免全局启用,优先使用会话级跟踪
二、启用与停止方法
2.1 全局启用(⚠️ 不推荐生产环境)
-- 参数文件方式(需重启数据库)
sql_trace = true

-- 动态修改(立即生效)
ALTER SYSTEM SET sql_trace = true;
ALTER SYSTEM SET sql_trace = false;  -- 关闭
2.2 当前会话启用(最常用方式)
-- 1. 设置跟踪文件标识(便于查找)
ALTER SESSION SET tracefile_identifier = 'my_trace_20240301';

-- 2. 开始跟踪
ALTER SESSION SET sql_trace = true;

-- 3. 执行需要跟踪的 SQL
EXEC PORTFOLIO.ETL_TASK_PRO(20240301, 1);

-- 4. 结束跟踪
ALTER SESSION SET sql_trace = false;
2.3 跟踪其他会话
-- 1. 查询目标会话的 SID 和 SERIAL#
SELECT sid, serial#, username FROM v$session WHERE username = 'APP_USER';

-- 2. 开始跟踪
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid, serial#, true);

-- 3. 停止跟踪
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid, serial#, false);
三、跟踪文件管理
3.1 文件位置
-- 查看跟踪文件存放目录
SHOW PARAMETER user_dump_dest;

-- 示例输出
-- user_dump_dest = /oracle/app/oracle/diag/rdbms/climb/climb/trace
3.2 文件类型说明
7915869ededa3df017.png

3.3 快速定位当前会话的跟踪文件
SELECT s.sid,
       s.server,
       i.instance_name || '_' ||
       NVL(pp.server_name, NVL(ss.name, 'ora')) || '_' ||
       p.spid || '.trc' AS trace_file_name
FROM   v$instance i,
       v$session s,
       v$process p,
       v$px_process pp,
       v$shared_server ss
WHERE  s.paddr = p.addr
  AND  s.sid = pp.sid(+)
  AND  s.paddr = ss.paddr(+)
  AND  s.sid = &session_id;  -- 输入会话ID
四、TKPROF 格式化工具
TKPROF 将原始 .trc 文件转换为易读的格式化报告。

4.1 基本用法
tkprof input.trc output.txt
4.2 常用参数
2116369ededb6f211c.png

4.3 实用示例
# 基础格式化
tkprof trace_ora_12345.trc report.txt

# 包含执行计划,排除系统 SQL
tkprof trace_ora_12345.trc report.txt explain=scott/tiger sys=no

# 按提取时间排序,显示等待事件
tkprof trace_ora_12345.trc report.txt sort=fchela waits=yes
五、TRACE 文件解读
5.1 输出指标说明
8737369ededcca0020.png

5.2 关键关注点
高 disk 值 → 存在大量物理读,可能缺少索引或全表扫描

高 elapsed / cpu 比值 → 存在大量等待事件,需进一步分析

高 Misses in library cache → 存在硬解析,考虑使用绑定变量

Rows 与 count 比例 → 单次返回行数,判断提取效率

5.3 执行计划解读
Rows     Row Source Operation
-------  ---------------------------------------------------
  10000  TABLE ACCESS FULL (cr=1500 pr=1500 pw=0 time=500)
7930469ededdd80267.png

六、最佳实践
6.1 跟踪策略选择
8908069ededee0844a.png

6.2 性能影响控制
跟踪期间 避免大规模并发测试
跟踪完成后 立即关闭(sql_trace=false)
使用 sys=no 过滤系统递归调用,减少输出量
6.3 文件管理
定期清理 user_dump_dest 目录(可配置 ADR 自动清理)
使用 tracefile_identifier 命名规范,便于识别
6.4 标准诊断流程
┌─────────────────────────────────────────────────────────┐
│  1. 启用会话跟踪(ALTER SESSION SET sql_trace=true)    │
│                          ↓                               │
│  2. 复现问题操作                                         │
│                          ↓                               │
│  3. 关闭跟踪(ALTER SESSION SET sql_trace=false)       │
│                          ↓                               │
│  4. 使用 TKPROF 格式化                                   │
│                          ↓                               │
│  5. 分析耗时、物理读、执行计划                           │
│                          ↓                               │
│  6. 优化 SQL(加索引、改写、绑定变量)                   │
└─────────────────────────────────────────────────────────┘
七、常见问题排查
9373469edee0a28553.png

八、总结
SQL_TRACE + TKPROF 是 Oracle 性能诊断的经典组合:

SQL_TRACE:捕获原始执行数据
TKPROF:格式化成可读报告
v$session:定位会话和跟踪文件
执行计划:定位性能瓶颈根因


一句话口诀:开启 → 复现 → 关闭 → 格式化 → 分析 → 优化

掌握 SQL_TRACE,让你告别盲目调优,用数据驱动性能优化决策。

3316669edee0fca532.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-5-11 13:55 , Processed in 0.917734 second(s), 24 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表