嗨, 大家好: 网站在新年后正式开通,欢迎大家加入我们,共同维护一个良好氛围的中国技术社区。 欢迎举报不良帖子,欢迎提供建议。
我们的QQ群:136102234,欢迎进群找答案,里边会有很多资深的大师们。 point overflow

这也是个头疼的问题。

mysql的默认隔离级别是重复读(repeat-read)是明确支持gap锁的,即间隙锁,锁住可能的间隙,使影响的数据无法插入。

但是如果是提交读(read-committed)呢?

提出这个问题是因为遇到一个比较奇怪的死锁。

死锁信息如下,目前我也还未重现这个死锁,有大神还请帮助分析分析: version:mysql5.6 隔离级别:提交读

死锁信息:

实例 采集时间 日志内容 2016-05-04 09:55:29 7fdff3bff700InnoDB: transactions deadlock detected, dumping detailed information. 2016-05-04 09:55:29 7fdff3bff700 (1) TRANSACTION:
TRANSACTION 234857148, ACTIVE 0.009 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 19 lock struct(s), heap size 2936, 10 row lock(s), undo log entries 3
LOCK BLOCKING MySQL thread id: 453762626 block 34066365
MySQL thread id 34066365, OS thread handle 0x7fe03d4f3700, query id 3574094475 10.151.13.94 duwg9rzz23l9 update
INSERT INTO column1( column1.......忽略) VALUES (470169686,忽略)
(1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 1923 page no 120 n bits 168 index PRIMARY of table table1 trx id 234857148 lock_mode X locks gap before rec insert intention waiting
*** (2) TRANSACTION:
TRANSACTION 234857149, ACTIVE 0.010 sec inserting
mysql tables in use 1, locked 1
19 lock struct(s), heap size 2936, 10 row lock(s), undo log entries 3
MySQL thread id 453762626, OS thread handle 0x7fdff3bff700, query id 3574094477 10.151.13.73 duwg9rzz23l9 update

-- 之前有一条DELETE FROM table1 WHERE column1=@column1 AND column2=@column2

INSERT INTO column1( column1.......忽略) VALUES (470170528,忽略)

(2) HOLDS THE LOCK(S):
RECORD LOCKS space id 1923 page no 120 n bits 168 index PRIMARY of table table1 trx id 234857149 lock_mode X locks gap before rec
(2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 1923 page no 120 n bits 168 index PRIMARY of table table1 trx id 234857149 lock_mode X locks gap before rec insert intention waiting
*** WE ROLL BACK TRANSACTION (2)

提问了 2016-05-13 18:31:09

jkant's gravatar image

jkant ♦♦
11130137138
采纳率: 3%


忘记备注column1为主键索引乐。

具体没有分析出这个死锁的具体原因。

但是经过测试:

read-committed级别,不会有gap锁,除非是唯一索引(包括主键)在内的唯一性检查会加锁外,都不影响数据的操作!!!

所以这个死锁就更难分析了!

永久链接

已回答 2016-05-16 09:49:03

jkant's gravatar image

jkant ♦♦
11130137138
采纳率: 3%

你的回答
切换预览

关注这个问题

邮件:

登录之后,你可以在这里订阅任何更新。

RSS:

回答

回答和评论

Markdown基本语法

  • *italic* or _italic_
  • **bold** or __bold__
  • 链接:[文本](http://url.com/ "标题")
  • 图片?![alt 文本](/path/img.jpg "标题")
  • 编号列表: 1. Foo 2. Bar
  • 如果想要换行,只需要在前一行结尾处插入2个空格即可。
  • 支持基本HTML标记

问题标签:

×72
×1

已提出的问题: 2016-05-13 18:31:09

问题浏览量: 814 次

最后更新: 2016-05-16 09:49:03