S/4 HANA中的数据库锁策略
S4中的新的MM数据模型以及HANA的Insert-only特性允许物料凭证的并行处理,提高了相关的吞吐量。由此,数据库锁的应用情况也发生了变化。下文将介绍这些变化(基于S4 1610)。
本文链接:http://www.cnblogs.com/hhelibeb/p/9059153.html
英文原文:Lock strategies in S/4HANA 1610
Key figure模型和Account模型
在SAP S/4 HANA, on-premise edition 1610中,物料估价不再需要排它锁(exclusive locking),这包含所有价格控制为“移动平均价”的和所有特殊库存类型的物料,因为HANA是一个Insert-only数据库,因此它允许物料凭证的并行处理。
因为在S/4HANA OP1610和CE1608中,新的MM-IM数据模型将旧的key figure模型变为了account模型(还添加了53个帮助快速计算/统计的附加列),这允许更细粒度的延迟数量锁定。
下面就是Key figure模型和Account模型的例子,
Key figure模型:
Account模型
对于Key figure模型模型而言,必须在物料和工厂级别上加锁。但是通过Account模型,可以在物料、工厂、存储位置、存储标识、特殊存储标识级别加锁(原则上可以在新模型中任何定义了库存的级别上加锁)。因此,即便是在过去很可能发生锁碰撞的情况下,现在也能并行处理了。
移动平均价的锁
当货物移动改变了库存价值(SALK3)和已估计库存(LBKUM)的时候,移动平均价必须据此调整,这会产生一个V1级别的更新,并且在更新结束前一直需要一个排它锁。数量/价值的变化主要来源于货物移动带来的外部值(比如,来自于采购订单)。然而,如果变化的来源仅仅是舍入差异,移动平均价将不会再调整。
创建批次时的锁(分割评估)
如果创建了物料主数据或者由一个货物移动带来改变时,还是需要排它锁的。如果使用了分割评估,且必须创建新的批次的话,货物移动会创建物料主数据。
对不允许负库存的工厂的延迟共享锁
S/4 HANA OP1610和CE1608引入了一个新的增加吞吐量的选项。这个选项可以在配置中设定,对延迟锁策略(late lock strategy),不允许再使用排它锁,而是使用延迟共享锁(late shared locks),这使得物料凭证的并行处理成为了真正的现实。
库存检查在这种情况下依然是可行的,因为所有的处理进程都会把他们的提取发送到锁服务器,此时,锁服务器将成为库存变更的第二存储(第一存储是数据库),数据的计算会从第一和第二存储进行。
批次主数据变更时的锁
从S/4 HANA OP1610和CE1608开始,为了物料凭证过账时的碰撞率,对于批次物料行项目而言,批次锁只会在批次主数据变更时存在,例如生产日期或best before date变更、且与数据库中现有值不同时。
对On-the-fly calculations的优化
由于on-the-fly calculation,聚合数量变化会存储到混合和聚合表中,成为实际库存数据。这使得对这些表的读访问要比Suite on HANA慢。
为了将on-the-fly calculation的劣势转变为优势,S/4 HANA OP1610和CE1608会引入以下特性:
- 在预读取阶段,只有物料主数据会被读取到内部缓存中,这是通过纯物料主数据视图来从数据库中检索数据的。
- 在行项目处理中,库存数量会从数据库的Account模型中读取,并且这只会在库存减少、且禁止负库存的情况下才会进行。
因此,对于S/4 HANA OP1610和CE1608而言,为延迟锁策略的进行的调整允许物料凭证处理的平行处理,而从数据库读取库存数量的策略和库存检查的策略减少了单个物料凭证的处理时间。总之,相较于过去的S/4 HANA OP1511和Suite on HANA,新版本的系统减少了物料凭证的处理时间。
允许负库存的工厂的锁策略
- 在延迟锁策略下,不再加任何锁。
- 不会再从数据库进行库存判断,也不会再进行库存检查(在两种锁策略下都是)。