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,新版本的系统减少了物料凭证的处理时间。
允许负库存的工厂的锁策略
- 在延迟锁策略下,不再加任何锁。
- 不会再从数据库进行库存判断,也不会再进行库存检查(在两种锁策略下都是)。
S/4 HANA中的数据库锁策略的更多相关文章
- 6.翻译系列:EF 6 Code-First中数据库初始化策略(EF 6 Code-First系列)
原文链接:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-firs ...
- EF CodeFirst 数据库初始化策略
最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点.下面简单列一下目录 1.1 目录 数据库初始化策略和数据迁移Migration的简单介 ...
- EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略
1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...
- web开发中的两把锁之数据库锁:(高并发--乐观锁、悲观锁)
这篇文章讲了 1.同步异步概念(消去很多疑惑),同步就是一件事一件事的做:sychronized就是保证线程一个一个的执行. 2.我们需要明白,锁机制有两个层面,一种是代码层次上的,如Java中的同步 ...
- 聊一聊 MySQL 数据库中的那些锁
在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...
- java和数据库中所有的锁都在这了
1.java中的锁 1.1 锁的种类 公平锁/非公平锁 可重入锁/不可重入 独享锁/共享锁 读写锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 1.2 锁详细介绍 1.2.1 公平锁,非公平锁 公平锁 ...
- MySQL:聊一聊数据库中的那些锁
在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...
- SQLSERVER2008中创建数据库发生无法获得数据库'model'上的排他锁
SQLSERVER2005中创建数据库发生无法获得数据库'model'上的排他锁是怎么回事? 创建数据库失败,提示无法获得数据库‘model’上的排他锁,如下图所示: 解决方法: 在查询分析器中运行如 ...
- 一例胜千言,详谈SQL Sever数据库锁
1 前言 数据库大并发操作要考虑死锁和锁的性能问题.看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一 ...
随机推荐
- LDA主题模型
(一)LDA作用 传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似 ...
- Advanced Pricing - How to source Pricing Attributes using QP_CUSTOM_SOURCE.Get_Custom_Attribute_Valu
详细内容需要参考文档:Oracle 11i Advanced Pricing-Don't Customize, Extend! utl:http://blog.csdn.net/cai_xingyun ...
- How Tomcat Works 读书笔记 八 载入器 上
Java的类载入器 详细资料见 http://blog.csdn.net/dlf123321/article/details/39957175 http://blog.csdn.net/dlf1233 ...
- Media Player Classic - HC 源代码分析 3:核心类 (CMainFrame)(2)
===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...
- Zeromq自连接错误
Zeromq自连接错误(金庆的专栏)Zeromq消息中间件开发的服务器和客户端不必按顺序启动,客户端可以在服务器开启之前启动.这是Zmq特别好用的一大特性.利用该特性,网游各功能服务器可以任意重启,实 ...
- C++之多继承
#include <iostream> using namespace std ; class AA { public: int a ; void Say_hello(void) { co ...
- multiset基础学习,可以有重复类型的多重集合容器
#include <set> #include <iostream> using namespace std; struct Student { char *name; int ...
- OpenNMS安装手册
一. 系统需求Windows Server 2008 R2 SP1 64位JDK 8 update 5 for Windows 64位PostgreSQL 9.3.5 for Windows 64位O ...
- Spring Boot定时任务应用实践
在Spring Boot中实现定时任务功能,可以通过Spring自带的定时任务调度,也可以通过集成经典开源组件Quartz实现任务调度. 一.Spring定时器 1.cron表达式方式 使用自带的定时 ...
- 视频博文结合的教程:用nodejs实现简单的爬虫
教学视频地址: https://v.qq.com/x/page/b0643tut4ze.html 前言 本喵最近工作中需要使用node,并也想晋升为全栈工程师,所以开始了node学习之旅,在学习过 ...