小编Mic*_*oel的帖子

为什么 MySQL 会在将事务级别设置为 READ UNCOMMITTED 后请求共享锁

在多个并行批处理中运行处理作业,它基本上读取大块行以更新一些行 - 这里可以使用较低的事务级别,因为我知道在此任务运行时不会更新相关值,因此在调用每个存储之前我运行的过程:

set session transaction isolation level read uncommitted

然后调用存储过程,它获取要处理的 ID 子集。整体操作的SQLFiddle:http ://sqlfiddle.com/#!9/192d62 (有点做作但保持原始查询的结构)

我问的原因是死锁继续发生并查看监视器输出,有一个线程请求共享锁,而另一个线程在同一空间上持有排他锁(反之亦然)-不应设置该事务级别来阻止需要对于共享锁?除了 之外,还有其他理由获得共享锁repeatable-read吗?

使用 InnoDB。

相关锁信息来自show engine innodb status(编辑以匹配来自 SQLFiddle 的表名):

*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 481628 page no 24944 n bits 112 index `PRIMARY` of table `events` trx id 27740892 lock mode S locks rec but not gap waiting
Run Code Online (Sandbox Code Playgroud)

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 481628 page no …
Run Code Online (Sandbox Code Playgroud)

mysql deadlock parallelism isolation-level

7
推荐指数
1
解决办法
595
查看次数

标签 统计

deadlock ×1

isolation-level ×1

mysql ×1

parallelism ×1