回答

收藏

ERP的最佳默认事务隔离级别是什么(如果有)?

技术问答 技术问答 310 人阅读 | 0 人回复 | 2023-09-14

背景简介:我们刚刚开始使用Hibernate将ERP系统迁移/重新实现为Java,目标是使用该系统的并发用户数为50-100。我们使用MS SQL
& k+ u# o2 O3 C$ r) ^Server作为数据库服务器,足以应付此负载。1 |+ R, g* l7 z  q: T6 t2 X* u( a
现在,旧系统根本不使用任何事务,而是依靠关键部分(例如,库存变化)来设置手动锁定(使用标志)并释放它们。就像手动交易管理一样。但是有时数据不一致会出现问题。在新系统中,我们希望使用事务来消除这些问题。0 }& k8 _6 j  L
现在的问题是:在OLTP和OLAP的使用率分别为85%和15%的情况下,对于ERP系统使用哪种良好/合理的 默认, S8 W$ N2 M7 w0 j* F& q8 F
事务隔离级别是合适的?还是我应该始终根据每个任务决定使用哪个交易级别?
+ i  H6 n. I+ H$ |" Y并提醒您四个事务隔离级别:READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ,SERIALIZABLE  e7 ]4 z4 e: e
                7 w4 {( ~3 `8 V; Z9 A
解决方案:8 O! j8 K, o4 B& q/ L4 ^3 ]
               
+ Z; t7 M6 P1 ]3 k$ ?- s
/ F$ _" z0 u3 ^1 o1 S; x; c; h
( X6 r: H" ^: F% k4 x3 M                100次中的99次,读已提交是正确的答案。这样可以确保您仅看到其他会话已提交的更改(因此,假设您已正确设计事务,则结果是一致的)。但这并没有施加可重复读取或可序列化施加的锁定开销(尤其是在非Oracle数据库中)。
$ ~% }6 o" f5 w) v有时,您可能希望运行一个报告,在该报告中您愿意牺牲准确性以提高速度并设置读取的未提交隔离级别。这很少是一个好主意,但有时它是锁定争用问题的合理可接受的解决方法。& F7 c3 l4 D; _  B  u$ d
当您的某个过程需要在整个运行过程中看到一致的数据集时,无论当时其他事务在做什么,都偶尔会使用可序列化和可重复读取。将月末对帐过程设置为可序列化可能是适当的,例如,如果过程代码很多,则用户可能在过程运行时进行更改,并且需要该过程确保在对帐开始时,它始终能看到其存在的数据。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则