SQL 跟踪

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'
💡对慢速 SELECT 使用 EXPLAIN 验证数据库优化器是否使用了预期的索引。全表扫描表示缺少或未使用的索引。

汇总跟踪结果

汇总类型 分组依据
按 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 次)
📌在跟踪中查找相同的 SELECT。多个相似 SELECT 表示循环中 SELECT 模式,应替换为 JOIN 或 FOR ALL ENTRIES。

跟踪配置

设置 详情
跟踪范围 所有用户、特定用户或事务
跟踪类型 SQL 跟踪、RFC 跟踪、入队跟踪、缓冲跟踪
文件大小 rstr/max_filesize_MB 配置参数控制最大跟踪文件大小
持续时间 保持跟踪简短;大型跟踪影响性能
⚠️SQL 跟踪增加开销。仅跟踪你想分析的特定操作,然后立即停止跟踪。

跟踪分析工作流

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 跟踪增加开销;仅跟踪需要的

相关笔记