SAP ABAP SM50 事务码的另类用途 - ABAP 工作进程对数据库表读取操作的检测
![SAP ABAP SM50 事务码的另类用途 - ABAP工作进程对数据库表读取操作的检测](https://static001.geekbang.org/infoq/b5/b5156e55ce941210f693e1d17c069b4c.png)
本文标题的 SM50 事务码,在 SAP 系统里描述信息是“Work Processes of AS Instance”,即应用服务器实例上的工作进程监控器。
![](https://static001.geekbang.org/infoq/09/099ff25298866ed4e799cf3d6d46d088.png)
在基于 ABAP 技术栈的 SAP 产品里,客户无论是从浏览器,SAPGUI,或者 API 的方式向 SAP 系统发起请求,最后的业务处理都是通过这些勤勤恳恳的工作进程完成的。
![](https://static001.geekbang.org/infoq/9f/9fece6c79a2e246ddd8329ff78f08f2d.png)
工作进程是 SAP 系统中的关键组件,用于处理与数据库的通信、执行 ABAP 代码和管理系统资源。在 ABAP NetWeaver 系统中,工作进程分为以下类型:
对话进程(Dialog Process):对话进程用于处理来自用户的交互式请求,例如在 SAP GUI 中执行事务。每个对话进程在一次执行一个 ABAP 程序或事务,并在完成后准备好处理下一个请求。
更新进程(Update Process):更新进程负责处理修改数据库的请求,例如更新、插入和删除操作。这些进程确保数据库更新按顺序和同步执行,以确保数据的一致性。
背景进程(Background Process):背景进程用于执行预定的、非交互式任务,如批处理作业和报表生成。这些进程在系统后台运行,以便在资源可用时处理任务。
断点重启进程(Enqueue Process):断点重启进程负责管理系统中的锁定表,确保在执行数据库更新操作时遵循一致性和完整性规则。当多个用户尝试访问或修改相同的数据对象时,这些进程协调对资源的访问。
传输进程(Spool Process):传输进程用于管理打印输出、传真和电子邮件等输出请求。这些进程将输出请求从 SAP 系统转发到相应的输出设备或服务。
在 ABAP NetWeaver 系统中,工作进程的数量和类型可以根据系统资源和性能需求进行配置。有效地管理和监控工作进程有助于确保 SAP 系统的高性能和可靠性。
本文要介绍的,是使用 SM50 检测出工作进程长时间读取一张数据库表这个行为的小技巧。SM50 界面有一列名为"Current Action Info",如果启动 SM50 时,当前工作进程正在持续读取一张数据库表,则该列会显示出数据库表的名称。
![](https://static001.geekbang.org/infoq/7c/7cab2efb3af978d796b6fc9bd6e04821.png)
比如上图显示了编号为 9743 的工作进程,当前状态为 Running,正在 client 000 以系统用户 SAPSYS 的身份,执行 ABAP 系统程序 SAPMSSY2, 读取数据库表 TBTCO.
![](https://static001.geekbang.org/infoq/cb/cb33e5122bc1ca1c3c8190a0f1b0552a.png)
我曾经用这个小技巧,完成了实际工作中的一个任务。
在我还在做 SAP CRM 标准开发时,我需要找出监听了 CL_BSP_WD_COLLECTION_WRAPPER 这个类抛出的 NEW_FOCUS 事件的所有 ABAP 类。
![](https://static001.geekbang.org/infoq/ab/aba2abd9b6887db0276b5dfbe16608b3.png)
于是我使用 ABAP workbench 里的 Where-Used List 功能,等待了 5 分钟过后仍然出结果。我又以后台作业的方式执行了 Where-Used List 操作,或许是待检索的 ABAP 类的总数太过庞大的缘故,十分钟过去了仍无结果。
于是我换了一种方式,打开 SE80 的 Repository Information System.
SAP ABAP 系统的 Repository Information System(RIS)是一个集成在 SAP 系统中的工具,用于存储和检索开发对象(如程序、表、事务代码等)的元数据。它允许开发人员和其他 SAP 用户搜索、浏览和分析系统中的各种对象,以便更好地了解和管理这些对象。
RIS 提供了以下功能:
1. 搜索和查找:用户可以根据各种条件(如对象类型、名称、作者等)快速搜索和查找 SAP 系统中的开发对象。
2. 分析和报告:RIS 提供了一些内置报告和分析工具,使用户能够快速生成关于系统中对象的统计信息和分析报告。
3. 对象间关系:RIS 可以展示对象之间的依赖关系和引用关系,有助于了解系统中各个对象如何相互影响和协同工作。
4. 版本管理:RIS 可以跟踪和显示对象的历史版本,使用户能够查看和比较不同版本的变更。
5. 文档管理:RIS 支持将文档链接到相关的开发对象,方便用户查找和查阅相关信息。
根据如下条件在 ABAP Repository Information System 里进行搜索:
![](https://static001.geekbang.org/infoq/34/34ff286ae1c62aa72554c96a5d71f811.png)
然而这个过滤条件只能显示哪些类发布,而非监听了 NEW_FOCUS 事件。
![](https://static001.geekbang.org/infoq/99/99083b64abf1f8ab8ba9e703e45b1472.png)
于是我打开 SM50,一眼就看到了当前进程正陷入读取 VSEOCOMPDF 的泥潭之中。
![](https://static001.geekbang.org/infoq/e8/e8be1c3e96f257e21ff9910de6b5afbe.png)
这是一个数据库视图:
![](https://static001.geekbang.org/infoq/52/5228d4c2a4c69a47ff0a91c463373f1c.png)
ABAP 类和其发布事件的关联关系维护在了数据库表 SEOCOMPODF 中。我在 SE16 里按照如下过滤条件进行检索:
![](https://static001.geekbang.org/infoq/d5/d54972174d57bc050a6b68568dd7122e.png)
不到一秒钟就得到了我想要的列表:
![](https://static001.geekbang.org/infoq/3b/3b34bae924a62350a7d92fa266ea8a2b.png)
总结
这个例子如果采用 ST05 跟踪 Where-Used List 执行时访问到了哪些表,结果一定会出来长长的一串。而使用 SM50 的 Current Action Info,能避开所有干扰信息,迅速准确找出存储 ABAP 类和其监听事件的关联关系的存储表。
ABAP 开发人员手头上可用的工具很多,如何在不同情形下灵活选择最合适的工具去解决问题,是我们需要不断去练习和提高的。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/e134ba45a3c95153cdd95a53f】。文章转载请联系作者。
评论