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,新版本的系统减少了物料凭证的处理时间。

允许负库存的工厂的锁策略

  1. 在延迟锁策略下,不再加任何锁。
  2. 不会再从数据库进行库存判断,也不会再进行库存检查(在两种锁策略下都是)。

S/4 HANA中的数据库锁策略的更多相关文章

  1. 6.翻译系列:EF 6 Code-First中数据库初始化策略(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-firs ...

  2. EF CodeFirst 数据库初始化策略

    最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点.下面简单列一下目录 1.1 目录 数据库初始化策略和数据迁移Migration的简单介 ...

  3. EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略

    1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...

  4. web开发中的两把锁之数据库锁:(高并发--乐观锁、悲观锁)

    这篇文章讲了 1.同步异步概念(消去很多疑惑),同步就是一件事一件事的做:sychronized就是保证线程一个一个的执行. 2.我们需要明白,锁机制有两个层面,一种是代码层次上的,如Java中的同步 ...

  5. 聊一聊 MySQL 数据库中的那些锁

    在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...

  6. java和数据库中所有的锁都在这了

    1.java中的锁 1.1 锁的种类 公平锁/非公平锁 可重入锁/不可重入 独享锁/共享锁 读写锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 1.2 锁详细介绍 1.2.1 公平锁,非公平锁 公平锁 ...

  7. MySQL:聊一聊数据库中的那些锁

    在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...

  8. SQLSERVER2008中创建数据库发生无法获得数据库'model'上的排他锁

    SQLSERVER2005中创建数据库发生无法获得数据库'model'上的排他锁是怎么回事? 创建数据库失败,提示无法获得数据库‘model’上的排他锁,如下图所示: 解决方法: 在查询分析器中运行如 ...

  9. 一例胜千言,详谈SQL Sever数据库锁

    1 前言 数据库大并发操作要考虑死锁和锁的性能问题.看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一 ...

随机推荐

  1. cocos2d-x 读写 xml 文件

    cocos2d-x 读写 xml 文件 A product of cheungmine使用cocos2d-x开发2d游戏确实方便,但是对于一般的小游戏,经常需要的工作是UI布局设计和调整,代码改来改去 ...

  2. Android Data Binding代码实践(告别findViewById)(四)

    Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...

  3. 从开发者角度解析 Android N 新特性!

    大清早看到 Google 官方博客发布 Android N 的开发者预览版,立马从床上跳起来开始仔仔细细的读起来. 从开发者角度来看,Android N 的更新并不算大.网上之前流传的一些 Andro ...

  4. 关于Intent

    TCP/IP 协议是Internet国际网络的基础,主要包括TCP,IP,UDP和ICMP等协议 要连上internet,操作系统必须安装TCP/IP协议,TCP/IP协议可以让不同类型,不同操作系统 ...

  5. CRT 重启Was

    输入用户名.密码登陆以后 # ps -eaf | grep websphere 找到路径 /usr/IBM/WebSphere/AppServer/ 进入/usr/IBM/WebSphere/AppS ...

  6. PL/SQL 设置

    1.如何批量导出建表语句?    通过菜单选择[Tools]–>[Export User Objects...],在打开的窗口中选择准备导出的表即可. 通过此种方式导出的sql脚本中不会有ins ...

  7. 修改访问的后缀contant

    设置Struts 2处理的请求后缀及Action调用 1.在struts2中默认处理的请求后缀为action,我们可以修改struts.xml 和struts.properties来修改默认的配置,在 ...

  8. oracle超出打开游标的最大数的原因和解决方案

    oracle超出打开游标的最大数的原因和解决方案 分类: Oracle相关2012-06-05 10:36 6362人阅读 评论(0) 收藏 举报 oracle数据库sqljavasessionsys ...

  9. zookeeper 分布式管理

    分布式框架: Zookeeper与paxos算法 一.            zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是 ...

  10. python3 数据科学基础

    第一章 1.Anaconda(最著名的python数据科学平台) 下面小伙伴们咱们来初初识下Anaconda吧 What is Anaconda???? 回答: (1).科学计算的平台 (2).有很多 ...