使用PESSIMISTIC_WRITE锁定的REPEATABLE_READ隔离级别

时间:2018-04-11 11:06:02

标签: mysql spring-data isolation-level pessimistic-locking aurora

现在我阻止来自多个实例的多个用户使用 PESSIMISTIC_WRITE 锁访问我的数据库表的同一行。锁定行的事务具有默认的隔离级别集,即 REPEATABLE_READ

在桌子为空的情况下,它会重新填充新的条目,这里很奇怪。插入是一个异步批量插入,在单独的事务中运行。因此,当提交此数据时,用户会读取一行以进行更新,该行应锁定该行。不知何故,这不再起作用,并且有几个用户能够从同一行获取值。

在尝试解决此问题时,我将隔离级别更改为 READ_COMMITED ,并且问题不再发生。

有人可以告诉我这有可能吗?我错过了什么?

以下是一些更好理解的psyeudo代码:

异步重新填充

string appPath = env.ContentRootPath; //Application Base Path
List<Assembly> allAssemblies = new List<Assembly>();

foreach (string dll in Directory.GetFiles(appPath , "*.dll"))
    allAssemblies.Add(Assembly.LoadFile(dll));

获取价值

Transaction
get values to insert
bulk insert

对于锁定,我们使用弹簧数据中的这个注释: Transaction read a row for update (Locks it) do stuff delete the row

1 个答案:

答案 0 :(得分:0)

好的答案是,极光2.x的极光prier正在使用MySQL 5.6.10。 Aurora 2.x现在正在使用MySQL 5.7.12,这个问题现在已经修复了。

P.S。我仍在问自己为什么极光使用2年前的MySQL版本,但这是一个不同的故事。