SQL 跟踪 (★★) #debugging #analysis-tools #performance #open-sql
用途
方面
详情
事务
ST05
目标
跟踪和分析数据库执行的 SQL 语句
输出
所有 SQL 操作的详细列表及时间
SQL 跟踪操作
操作
含义
PREPARE
解析 SQL 语句并创建执行计划
OPEN / REOPEN
为 SELECT 打开游标(或用新参数重新打开)
FETCH
从游标获取行
EXEC / REEXEC
执行非 SELECT 语句(INSERT、UPDATE、DELETE)
1 2 3 4 执行流程: PREPARE → OPEN → FETCH(重复) → (隐式关闭) 非 SELECT: PREPARE → EXEC (或 REEXEC 重新执行)
跟踪过程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +------------------+ | 1. 启动跟踪 | ← 激活跟踪(按用户/事务) +--------+---------+ | +--------v---------+ | 2. 执行工作 | ← 运行要跟踪的程序/事务 +--------+---------+ | +--------v---------+ | 3. 停止跟踪 | ← 停用跟踪 +--------+---------+ | +--------v---------+ | 4. 显示跟踪 | ← 分析跟踪列表 +------------------+
跟踪列表列
列
描述
Duration
执行时间(微秒)
Object name
数据库表名
Operation
PREPARE、OPEN、FETCH、EXEC 等
Records
影响的行数
RC
返回代码(0 = 成功)
Statement
实际的 SQL 语句
EXPLAIN SQL
功能
详情
用途
显示数据库特定的访问策略
方法
选中一条语句 → EXPLAIN
显示
使用了哪个索引、访问路径、估计成本
1 2 3 4 5 EXPLAIN 输出(示例): 表: SFLIGHT 访问: INDEX RANGE SCAN 使用索引: SFLIGHT~01(主索引) 条件: MANDT='100' AND CARRID='LH'
汇总跟踪结果
汇总类型
分组依据
按 SQL 语句
相同 SQL 文本
按相同访问
相同表 + 操作
识别优化潜力 1 2 3 4 5 6 7 8 9 10 11 跟踪显示: SELECT * FROM SFLIGHT WHERE CARRID='LH' 耗时:120ms 记录:5 SELECT * FROM SFLIGHT WHERE CARRID='BA' 耗时:95ms 记录:3 SELECT * FROM SFLIGHT WHERE CARRID='AF' 耗时:110ms 记录:4 SELECT * FROM SFLIGHT WHERE CARRID='DL' 耗时:88ms 记录:2 按相同访问汇总: SFLIGHT / SELECT / 4 次调用 / 总计:413ms / 平均:103ms → 优化:用单次 SELECT ... FOR ALL ENTRIES 替换 或 JOIN(4 次往返 → 1 次)
跟踪配置
设置
详情
跟踪范围
所有用户、特定用户或事务
跟踪类型
SQL 跟踪、RFC 跟踪、入队跟踪、缓冲跟踪
文件大小
rstr/max_filesize_MB 配置参数控制最大跟踪文件大小
持续时间
保持跟踪简短;大型跟踪影响性能
跟踪分析工作流 1 2 3 4 5 1. 按耗时排序(降序) → 找到最慢的语句 2. 按记录数排序(降序) → 找到最大的结果集 3. 按相同访问汇总 → 找到重复的相同查询 4. 对慢速语句使用 EXPLAIN → 验证索引使用 5. 修复问题并重新跟踪 → 测量改进
考试/测试模式
关键词 / 短语
答案
“SQL 跟踪事务”
ST05
“PREPARE 操作”
解析 SQL 语句,创建执行计划
“FETCH 操作”
从打开的游标获取行
“EXEC 操作”
执行非 SELECT 语句(INSERT/UPDATE/DELETE)
“EXPLAIN SQL 显示”
数据库访问策略(使用的索引、访问路径)
“按相同访问汇总”
按相同表+操作分组以查找重复查询
“相同 SELECT 表示”
循环中 SELECT 模式;使用 JOIN 或 FOR ALL ENTRIES
“跟踪文件大小参数”
rstr/max_filesize_MB
“跟踪开销警告”
SQL 跟踪增加开销;仅跟踪需要的
相关笔记