现在我阻止来自多个实例的多个用户使用 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
答案 0 :(得分:0)
好的答案是,极光2.x的极光prier正在使用MySQL 5.6.10。 Aurora 2.x现在正在使用MySQL 5.7.12,这个问题现在已经修复了。
P.S。我仍在问自己为什么极光使用2年前的MySQL版本,但这是一个不同的故事。