写点什么

SAP ABAP SM50 事务码的另类用途 - ABAP 工作进程对数据库表读取操作的检测

作者:Jerry Wang
  • 2023-06-09
    上海
  • 本文字数:1702 字

    阅读完需:约 6 分钟

SAP ABAP SM50 事务码的另类用途 - ABAP工作进程对数据库表读取操作的检测

本文标题的 SM50 事务码,在 SAP 系统里描述信息是“Work Processes of AS Instance”,即应用服务器实例上的工作进程监控器。



在基于 ABAP 技术栈的 SAP 产品里,客户无论是从浏览器,SAPGUI,或者 API 的方式向 SAP 系统发起请求,最后的业务处理都是通过这些勤勤恳恳的工作进程完成的。



工作进程是 SAP 系统中的关键组件,用于处理与数据库的通信、执行 ABAP 代码和管理系统资源。在 ABAP NetWeaver 系统中,工作进程分为以下类型:


  1. 对话进程(Dialog Process):对话进程用于处理来自用户的交互式请求,例如在 SAP GUI 中执行事务。每个对话进程在一次执行一个 ABAP 程序或事务,并在完成后准备好处理下一个请求。

  2. 更新进程(Update Process):更新进程负责处理修改数据库的请求,例如更新、插入和删除操作。这些进程确保数据库更新按顺序和同步执行,以确保数据的一致性。

  3. 背景进程(Background Process):背景进程用于执行预定的、非交互式任务,如批处理作业和报表生成。这些进程在系统后台运行,以便在资源可用时处理任务。

  4. 断点重启进程(Enqueue Process):断点重启进程负责管理系统中的锁定表,确保在执行数据库更新操作时遵循一致性和完整性规则。当多个用户尝试访问或修改相同的数据对象时,这些进程协调对资源的访问。

  5. 传输进程(Spool Process):传输进程用于管理打印输出、传真和电子邮件等输出请求。这些进程将输出请求从 SAP 系统转发到相应的输出设备或服务。


在 ABAP NetWeaver 系统中,工作进程的数量和类型可以根据系统资源和性能需求进行配置。有效地管理和监控工作进程有助于确保 SAP 系统的高性能和可靠性。


本文要介绍的,是使用 SM50 检测出工作进程长时间读取一张数据库表这个行为的小技巧。SM50 界面有一列名为"Current Action Info",如果启动 SM50 时,当前工作进程正在持续读取一张数据库表,则该列会显示出数据库表的名称。



比如上图显示了编号为 9743 的工作进程,当前状态为 Running,正在 client 000 以系统用户 SAPSYS 的身份,执行 ABAP 系统程序 SAPMSSY2, 读取数据库表 TBTCO.



我曾经用这个小技巧,完成了实际工作中的一个任务。


在我还在做 SAP CRM 标准开发时,我需要找出监听了 CL_BSP_WD_COLLECTION_WRAPPER 这个类抛出的 NEW_FOCUS 事件的所有 ABAP 类。



于是我使用 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 里进行搜索:



然而这个过滤条件只能显示哪些类发布,而非监听了 NEW_FOCUS 事件。



于是我打开 SM50,一眼就看到了当前进程正陷入读取 VSEOCOMPDF 的泥潭之中。



这是一个数据库视图:



ABAP 类和其发布事件的关联关系维护在了数据库表 SEOCOMPODF 中。我在 SE16 里按照如下过滤条件进行检索:



不到一秒钟就得到了我想要的列表:



总结


这个例子如果采用 ST05 跟踪 Where-Used List 执行时访问到了哪些表,结果一定会出来长长的一串。而使用 SM50 的 Current Action Info,能避开所有干扰信息,迅速准确找出存储 ABAP 类和其监听事件的关联关系的存储表。


ABAP 开发人员手头上可用的工具很多,如何在不同情形下灵活选择最合适的工具去解决问题,是我们需要不断去练习和提高的。


发布于: 刚刚阅读数: 3
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017-12-03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
SAP ABAP SM50 事务码的另类用途 - ABAP工作进程对数据库表读取操作的检测_SAP_Jerry Wang_InfoQ写作社区