如何解决在 ABAP 中强制执行数据库更新和隐式 COMMIT 之间的短暂延迟?
作为 SAP 基础架构部门,有时我们会在 SAP AS (NW
/ S/4
) 中遇到问题,因为 WP
正在对 DB 进行写访问,因此记录正在锁定,直到发出明确的 COMMIT
命令。但是,在某些情况下,开发人员没有明确调用 COMMIT
(不专心、懒惰),因此记录会被锁定,直到隐式 COMMIT
被生成。这会导致修改同一记录的其他 WP
卡住一段时间(在某些情况下 - 直到达到超时)。
我们正在努力寻找一种机制来识别这种模式,至少可以监控生产中的现有情况,最好在应用程序开发生命周期的早期阶段拦截它。
静态代码检查似乎不是一种选择:
- 可能有理由不明确
COMMIT
每个数据库写访问(即:在ON_COMMIT
事件中调用写访问。 - 查询可能驻留在从处理提交本身的进程调用的函数/方法中。
我们试图在 RZ20
下找到相关的监控项,但没有找到。
重现:
REPORT zfirst.
DATA: ls_scarr TYPE scarr.
ls_scarr-carrid = 'TST'.
MODIFY scarr FROM ls_scarr.
DO. ENDDO.
REPORT zsecond.
ls_scarr-carrid = 'TST'.
MODIFY scarr FROM ls_scarr.
运行 zfirst
,由于 DO
循环,它永远运行。让它卡住。然后运行zsecond
。它会卡在 MODIFY 行中。
解决方法
我认为您可以使用代码分析器检测基本不定式循环。但是这些循环已经在测试步骤中建立并修复了。
DB 锁完全是设计问题。架构师需要规划考虑并行更新的解决方案(如果需要)。
您可以在 DB01 t-code Locks 部分获取锁列表。
我想在这里添加一些注释:
- 开发者可以对表格行使用锁定机制。
- 如果不需要回滚,开发者可以手动调用
commit work
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。