关于sap:关于-SAP-ABAP-锁机制的一些疑问和解答

58次阅读

共计 992 个字符,预计需要花费 3 分钟才能阅读完成。

Lock table 的地位

Lock Table 位于 Enqueue Server 的主内存(共享内存)中。

如果 enqueue 服务器作为 enqueue 工作过程装置,则该实例的所有工作过程都能够拜访锁表。内部应用服务器在 enqueue 服务器上的入队过程中执行其锁定操作。

二者的通信,通过相干调度程序 (dispatcher) 和音讯服务器进行。

如果应用独立 enqueue 服务器,则所有工作过程都间接与 enqueue 服务器通信。

服务器重启后,主存里还可能存在锁记录吗?

可能。从 Update task 继承下来的锁,保留到 ABAP 服务器存储介质里,当零碎重启时,会被从新加载到 lock table 中。

Enqueue 函数调用结束之后,零碎变量 SY-MSGV1 寄存了以后 lock 的 owner 名称。

@ 符号在 SAP 锁(排队)中用作通配符。换句话说,它能够在锁的抵触查看期间代表任何其余字符。例如,参数值 12345@ 锁定数量 123450 到 123459、12345a 到 12345z、12345A 到 12345Z,以及第 6 个字符地位中具备任何特殊字符的所有其余值。

为了避免 SAP 锁在不须要的时候激活通配符机制,须要保障在调用 enqueue 功能模块时,键值参数不蕴含任何通配符。

如果要用于锁定单个实体的键值的确蕴含通配符,则必须在调用 enqueue 函数之前,将通配符替换为不同的字符。

每个 SAP 零碎只有一台应用程序服务器充当 enqueue 服务器。它保护位于共享内存段中的锁表。

enqueue 服务器上的所有工作过程都能够拜访锁表。其余应用程序服务器上的所有工作过程将其上锁申请委托给 enqueue 服务器上的非凡入队工作过程。

该行为是主动配置的。在默认配置文件 DEFAULT.PFL 中,参数行 rdisp/enqname =< 应用程序服务器名称 > 通知开发人员哪个应用程序服务器可用作排队服务器。当应用程序服务器检测到其名称与排队服务器的名称匹配时,它会创立锁表,并且其所有工作过程都会内联解决排队申请。如果应用程序服务器检测到其名称与入队服务器的名称不匹配,则会将所有入队申请发送到入队服务器。

排队工作流程保障立刻解决传入的申请。通常一个入队过程就足够了。在具备许多应用程序服务器的大型 SAP 零碎中,第二个过程可能会很有用。然而,定义两个以上的入队过程并不不便。如果事务 SM50 CPU 显示仅应用第一个入队过程,则瓶颈是因为其余起因造成的。

正文完
 0