暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
InnoDB这个将近20年的_bug_修复了_加锁到第一个不符合条件记录_加锁_next_key.pdf
253
6页
0次
2021-10-27
10墨值下载
InnoDB20"bug"
MySQL
有点意外,惊ing
0.
1. MySQL 8.0.18 前是
2. MySQL 8.0.18
0. 背景信息
InnoDB个知识点
InnoDB锁规则上,有这样的一个原则:
对有唯一属性的索引(主键/唯一索引)进行范围条件加锁时
向右遍历(假设是普通正序索引,而且不ORDER BY DESC约束)过程中
会一直扫描并next-key锁到第一个满足条件的记录为止,
但如果是RC级别,这next-key lock退化gap lock,而RR下不会退化。
简言之,就是 "锁会被扩大化",从InnoDB擎诞生以来一直都是如此。
其实严格来说,这个算是问题或缺陷,甚至也可以认为bug
1. MySQL 8.0.18 前是么加
构、
PC验更
# 5.6版本
[root@yejr.run]> select version();
+------------+
| version() |
423
+------------+
| 5.6.39-log |
+------------+
#隔离级别
[root@yejr.run]> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| REPEATABLE-READ |
+------------------------+
#表数据
[root@yejr.run]> select * from t1;
+----+----+----+----+
| c1 | c2 | c3 | c4 |
+----+----+----+----+
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 0 |
| 3 | 3 | 3 | 0 |
| 4 | 2 | 2 | 0 |
+----+----+----+----+
#表结构&索引,c1是主键(有唯一属性),c2是辅助索引
[root@yejr.run]> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`c1` int(10) unsigned NOT NULL DEFAULT '0',
`c2` int(10) unsigned NOT NULL DEFAULT '0',
`c3` int(10) unsigned NOT NULL DEFAULT '0',
`c4` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`c1`),
KEY `c2` (`c2`)
) ENGINE=InnoDB;
session2
session1 sessioin2
T1 begin; begin;
T2
select * from t1 where c1<=1 for up
date;
T3
delete from t1 where c1
=3;
of 6
10墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜