064、SQL跟踪与性能分析(ST05)

发布时间:2026/8/23 8:12:32

064、SQL跟踪与性能分析(ST05)
上个月客户一个电话把我从午睡里拽了出来。说某个Z报表跑了一个小时还没出数IT部门的人已经急得嘴上起泡。我打开那台测试机用SE80把主流程翻了一遍代码逻辑不算绕循环里的SELECT也带了索引怎么看都觉得不能这么慢。数据量表才二十几万行。那问题出在哪我只好祭出ST05。ST05是ABAP里最常用的SQL跟踪工具事务代码就叫ST05。它的作用说白了就是把你指定的用户、指定的时间段内所有发送到数据库的SQL语句原封不动地记录下来。有人说“原封不动”不完全准确至少能让你看到数据库真正执行的语句而不是你在ABAP里写的那句OPEN SQL。这很重要因为遇到隐式转换、缓冲失效、或者优化器抽风的时候你根本不知道数据库那边做了什么妖。先不说原理直接讲怎么用。在命令框里输入ST05进去后界面很简洁有几个复选框什么“SQL跟踪”“锁跟踪”“RFC跟踪”之类的。咱们日常用得最多的就是SQL跟踪其他先别勾勾多了日志文件会爆炸光清理就能浪费你半天时间。然后指定跟踪对象默认情况下是当前用户也可以输入其他用户的用户名。我一般直接保持当前用户因为我要去运行那个报表用同一个会话最方便。接着点那个“开启跟踪”的按钮像录音机一样从这一刻起数据库语句就开始被记录进去了。开了跟踪之后马上打开你要分析的ABAP程序跑一小段。这里有个很重要的经验别傻乎乎地等整个报表跑完再关那样会用巨大的跟踪文件把系统拖死。我通常是执行程序后等上十秒二十秒看看到达某个关键节点或者直接预选一小部分数据就停然后立刻回到ST05点“关闭跟踪”。你要是忘了关跟踪会一直开着系统会越来越慢最后所有用户的查询都排着队等你那场面真的不太优雅。关掉跟踪之后点上面的“列表”按钮或者“分析”也行就能看到刚才记录的一堆数据库操作。界面分两大部分左边是表名右边是操作类型和统计信息。表名下面能看到SELECT、INSERT、UPDATE、DELETE各自有多少次总共花了多少时间。别一上来就看最上面的先按“耗时”排序。通常问题最严重的那条SQL就在第一屏。我那个客户的问题就是这么暴露的。跟踪结果里有一条SELECT SINGLE出现了1600多次单次平均时间0.03秒累加起来就有48分钟。语句是DATA: lv_code TYPE char10. lv_code lv_str. SELECT SINGLE * FROM zhead WHERE zcode lv_code AND zflag X.我盯着这句愣了三秒。zcode字段上明明有索引zflag也是索引列的第二部分理论上走索引只要几毫秒。为什么数据库傻乎乎地全表扫我顺手在ST05里选中那条语句点了一下“执行计划”结果看到索引被忽略了扫描方式变成了“FULL TABLE SCAN”。原因很快被揪了出来我那个LV_CODE变量定义了CHAR10而数据库表字段ZCODE是NUMC10。ABAP的Open SQL在语法检查时不会报错运行时SQL被转换后数据库层面为了比较不同类型可能会隐式地对字段做转换。这个转换一动索引就废了。解决方案也简单直接让变量类型跟着表字段走DATA: lv_code TYPE zhead-zcode. 用这种定义方式类型天然匹配别再自作聪明写CHAR10了 lv_code lv_str. SELECT SINGLE * FROM zhead WHERE zcode lv_code AND zflag X.改完之后这条语句从单次0.03秒降到0.0001秒整个报表跑完不到两分钟。客户觉得我很神其实都是ST05的功劳。再举一个我看到过的经典场景。某同事写了一个程序为了追求效率用FOR ALL ENTRIES把一个内表作为查询条件去数据库捞数据思路没问题但他在查询完之后又在一个内表循环里写了一句SELECT。ST05一开发现数据库被访问了上万次。每一个循环里的SELECT看着都走索引但架不住一万次啊。更隐蔽的是FOR ALL ENTRIES本身会扩展成一条很长的SQL如果内表数据特别多生成的SQL语句可能会超长数据库解析都会卡。ST05的列表里能看到SQL语句的文本长度好几个字段我就见过几KB甚至几十KB的。遇到这种情况我的习惯是用JOIN替代一部分FOR ALL ENTRIES或者把大内表拆成几个小批次处理别一口气塞进去。ST05还能帮你看ABAP缓冲是否生效。如果某个表开启了ABAP缓冲那么同一会话内重复读取的数据可能直接从应用服务器缓存里拿数据库那边根本不会被访问。在ST05的跟踪结果里每个操作会有“直达数据库”还是“缓冲读取”之类的标记。如果你发现一个应该命中缓冲的配置表每次都在跟数据库打交道那可能缓冲设置没生效或者语句的WHERE条件不符合缓冲特性比如用了非主键字段查询缓冲机制直接绕过。这个坑在经常读取的自定义表上特别常见动不动就拖慢整体响应。有人会问我用SE30看事务码的运行时不也能看到时间吗SE30看到的是程序在应用服务器上的CPU时间以及个部分耗时但SQL层面到底哪条语句垃圾它没有ST05这么细。ST05聚焦于数据库交互能直接看到SQL文本、执行次数、花费的数据库时间以及执行计划。两个工具配合起来用能快速定位到性能问题是出在应用逻辑还是数据库访问。我调性能的基本套路是先用SE30跑一遍找到总耗时最高的那一小段再用ST05单独跟踪这一段精确到SQL。用ST05有个注意点生产系统上千万别随便全用户跟踪。开启跟踪本身会对数据库通信产生额外开销如果库的数据量一大跟踪文件会把磁盘写满严重时直接宕机。我一般只在开发或者质量系统上折腾生产上有问题我宁可在非高峰时段只跟踪自己那个客户端进程。还有一点跟踪结果看完就关别一直开着。另外说说执行计划。ST05里选中一条SQL后有个“执行计划”的按钮点开能看到数据库优化器选择的访问路径走没走索引一目了然。有些版本还可以显示具体使用的索引名。这个功能是分析的关键不要只盯着时间。一条SQL慢了先看执行计划如果显示索引没走就检查WHERE条件的字段类型、函数包裹、OR条件、NULL判断这些常见的索引杀手。如果你改了SQL再重新跑一遍跟踪对比执行计划的变化确保优化起作用了。说到函数包裹程序员有个不好的习惯喜欢在条件里写“TO_UPPER(字段) 变量”或者“SUBSTR(字段, 1, 2) ‘AB’”尤其从其他语言转过来的朋友。这种写法在ABAP里也能跑但一旦对索引字段用了函数数据库就没法走索引。ST05的执行计划会诚实地告诉你结果。如果非要这么查就得考虑添加函数索引之类的方法但不同数据库支持情况不一样。最稳妥的还是把数据整理好让查询条件不带函数。还有一个小技巧ST05的跟踪列表一般都支持按列排序你把鼠标点到“总计时间”那一列的标题上点一下让它按从大到小排序所有高耗时的SQL就自动排到上面了。有些版本可能需要右键选择排序方式反正万变不离其宗。找出耗时TOP5或者TOP10逐个击破优化效率比盲调高十倍不止。我个人习惯是每次优化完把ST05的结果导出成文本文件带上当时的日期和程序名放到项目共享目录里。这样过几个月回来还能知道当初为什么这么改比截图舒服多了文本能搜历史记录。截图虽然直观但没法检索而且里面包含数据库表名和SQL语句发给别人看还得打马赛克。文本导出的时候注意选只导出当前跟踪别把整个系统日志导出来。回到开头的案例当我用ST05揪出那个类型不匹配的问题后同事还一脸不信说这也能影响性能我直接把ST05里执行计划前后两张截图放在一起——好吧不能截图但即使没有图数据库执行计划里那个“FULL TABLE SCAN”是无法辩驳的。所以这篇里面所有说到的界面细节你只要打开ST05实际操作一遍就全明白了。好了这篇关于SQL跟踪与性能分析的内容就到这儿。ST05不是那种花里胡哨的工具界面也谈不上精美但它就像一把手术刀精准地切开数据库访问的皮肤让你看到真正的病灶。下一篇我打算聊聊SE30运行时分析或者如果有人想听ABAP调试器里那些不为人知的用法也可以安排。评论区见吧。

相关新闻

063、使用Open SQL注意事项

063、使用Open SQL注意事项

2026/8/23 8:12:32

那是一个周五的傍晚,生产系统告警像潮水一样涌进手机。某个报表程序在月底结算时直接卡死,数据库CPU飙到99%。远程连上去一看,问题出在一句看似人畜无害的Open SQL上。SELECT * FROM MARA WHERE MATNR IN (SELECT MATNR FROM ZTMP_MAT). 子查…

062、事务与提交(COMMIT/ROLLBACK)

062、事务与提交(COMMIT/ROLLBACK)

2026/8/23 8:12:32

062、事务与提交(COMMIT/ROLLBACK)——以为数据存上了,其实早就灰飞烟灭 有一次在生产机排查问题:一个报表程序跑完,日志里明明写着“更新成功”,可SE16一看,目标表里连根毛都没多。翻代码&…

乘数比较大时溢出处理(一)

乘数比较大时溢出处理(一)

2026/8/23 8:02:32

目录 一、问题 二、方案选型(按 ISP 嵌入式工程推荐优先级排序) 方案 1:64 位中间变量中转 方案 2:无 64‑bit 硬件(极老旧 MCU,无uint64_t/long long)—— 带余数补偿拆分算法 方案 3&#…

数据结构与算法入门:从复杂度分析到基础数据结构与算法实践

数据结构与算法入门:从复杂度分析到基础数据结构与算法实践

2026/8/23 9:12:35

1. 先搞清楚“数据结构与算法”到底在解决什么问题 很多人一听到“数据结构与算法”就觉得头大,认为是面试八股文,或者觉得离实际开发很远。其实完全不是这样。简单来说, 数据结构是“怎么存”,算法是“怎么算” 。你写的每一行…

Windows下使用MinGW-w64编译Boost库的完整指南

Windows下使用MinGW-w64编译Boost库的完整指南

2026/8/23 9:12:35

1. 项目概述:为什么要在Windows上折腾Boost和MinGW? 如果你在Windows上做C开发,尤其是涉及跨平台项目、高性能计算或者需要用到一些重量级开源库(比如做量化交易回测、游戏服务器、科学计算),那你大概率绕…

基于多智能体协作的自进化课程系统 整体解决方案设计 上

基于多智能体协作的自进化课程系统 整体解决方案设计 上

2026/8/23 9:12:35

第二部分 整体解决方案设计一、方案整体概述本方案提出“AI创课引擎”(AI Course Creation Engine),是一个以“认知翻译”为内核、以“多智能体协作”为架构、以“数据飞轮”为驱动力的自进化课程系统。系统覆盖命题提出的“知识讲解→课堂体…

基于多智能体协作的自进化课程系统 命题前置分析与洞察

基于多智能体协作的自进化课程系统 命题前置分析与洞察

2026/8/23 9:12:35

第一部分 命题前置分析与洞察一、行业背景与趋势洞察当前青少年编程教育市场正经历从“内容供给驱动”到“学习体验驱动”的深层范式转变。据Global Info Research数据,全球K-12 AI教育市场2024年收入约亿美元,预计2031年将达亿美元,年复合增…

04-M4-Agentic路由-让每个问题找到对的部门

04-M4-Agentic路由-让每个问题找到对的部门

2026/8/23 9:12:35

Agentic 路由:让每个问题找到对的部门(M4 落地实测) 系列:城市管理 Agentic RAG —— 从零搭建城市管理问答系统 本篇:M4 Agentic 路由(实测版) 源码:https://gitee.com/Chester_Xu…

TimeSage-MT:多轮对话时序基准测试的设计原理与实战指南

TimeSage-MT:多轮对话时序基准测试的设计原理与实战指南

2026/8/23 9:02:34

1. 项目概述:为什么我们需要一个“多轮对话”的时间序列基准测试?如果你最近在关注时间序列分析或者智能体(Agent)领域的研究,大概率会听到一个词:TimeSage-MT。这不仅仅是一个新的数据集或模型&#xff0c…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…