简短背景:我们刚刚开始使用 Hibernate 将 ERP 系统迁移/重新实现到 Java,目标是使用该系统的并发用户数为 50-100 个。我们使用 MS SQL Server 作为数据库服务器,这足以满足此负载。
现在,旧系统根本不使用任何事务,并且关键部分(例如库存变化)依赖于设置手动锁定(使用标志)并释放它们。这类似于手动事务管理。但有时会出现数据不一致的问题。在新系统中我们希望使用交易来消除这些问题。
现在的问题是:什么是好的/合理的default假设使用率约为 85% OLTP 和 15% OLAP,那么 ERP 系统使用的事务隔离级别是什么?或者我应该始终根据每个任务来决定使用哪个事务级别?
提醒一下,四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE
100 次中有 99 次,读已提交是正确的答案。这确保您只能看到其他会话已提交的更改(因此,假设您已正确设计事务,结果是一致的)。但它不会带来可重复读取或可序列化带来的锁定开销(特别是在非 Oracle 数据库中)。
偶尔,您可能希望运行一个报告,您愿意为了速度而牺牲准确性并设置读取未提交的隔离级别。这很少是一个好主意,但有时它是锁定争用问题的合理可接受的解决方法。
当您的进程需要在整个运行过程中查看一组一致的数据而不管其他事务当时正在做什么时,偶尔会使用可序列化和可重复读取。将月末对账流程设置为可序列化可能是合适的,例如,如果有大量过程代码,用户可能会在流程运行时进行更改,并且要求流程需要确保它始终看到协调开始时存在的数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)