阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

InnoDB,快照读,在RR和RC下有何差异?

80次阅读
没有评论

共计 1546 个字符,预计需要花费 4 分钟才能阅读完成。

什么是快照读(Snapshot Read)?

MySQL 数据库,InnoDB 存储引擎,为了提高并发,使用 MVCC 机制,在并发事务时,通过读取数据行的历史数据版本,不加锁,来提高并发的一种不加锁一致性读(Consistent Nonlocking Read)。

画外音:本文所有讨论基于 MySQL-InnoDB。

快照读的内核原理,详见:《​​InnoDB 并发如此高,原因竟然在这?​​》

什么是读提交(Read Committed)?

(1)数据库领域,事务隔离级别的一种,简称 RC;

(2)它解决“读脏”问题,保证读取到的数据行都是已提交事务写入的;

(3)它可能存在“读幻影行”问题,同一个事务里,连续相同的 read 可能读到不同的结果集;

InnoDB,快照读,在 RR 和 RC 下有何差异?

什么是可重复读(Repeated Read)?

(1)数据库领域,事务隔离级别的一种,简称 RR;

(2)它不但解决“读脏”问题,还部分解决了“读幻影行”问题,同一个事务里,连续相同的 read 读到相同的结果集;

在读提交 (RC),可重复读(RR) 两个不同的事务的隔离级别下,快照读有什么不同呢? 我们一起来做一些实验。

假设有 InnoDB 表:

t(id PK, name);

表中有三条记录:
shenjian
zhangsan
lisi

case 1,两个并发事务 A,B 执行的时间序列如下(A 先于 B 开始,B 先于 A 结束):

A1: start transaction;
         B1: start transaction;
A2: select * from t;
         B2: insert into t values (4, wangwu);
A3: select * from t;
         B3: commit;
A4: select * from t;

提问 1:假设事务的隔离级别是可重复读 RR,事务 A 中的三次查询,A2, A3, A4 分别读到什么结果集?

提问 2:假设事务的隔离级别是读提交 RC,A2, A3, A4 又分别读到什么结果集呢?

case 2,仍然是上面的两个事务,只是 A 和 B 开始时间稍有不同(B 先于 A 开始,B 先于 A 结束):

B1: start transaction;

A1: start transaction;

A2: select * from t;
         B2: insert into t values (4, wangwu);
A3: select * from t;
         B3: commit;
A4: select * from t;

提问 3:假设事务的隔离级别是可重复读 RR,事务 A 中的三次查询,A2, A3, A4 分别读到什么结果集?

提问 4:假设事务的隔离级别是读提交 RC,A2, A3, A4 的结果集又是什么呢?

case 3,仍然是并发的事务 A 与 B(A 先于 B 开始,B 先于 A 结束):

A1: start transaction;
         B1: start transaction;
         B2: insert into t values (4, wangwu);
         B3: commit;
A2: select * from t;

提问 5:假设事务的隔离级别是可重复读 RR,事务 A 中的 A2 查询,结果集是什么?

提问 6:假设事务的隔离级别是读提交 RC,A2 的结果集又是什么呢?

case 4,事务开始的时间再换一下(B 先于 A 开始,B 先于 A 结束):

case 4,事务开始的时间再换一下(B 先于 A 开始,B 先于 A 结束):B1: start transaction;

A1: start transaction;

         B2: insert into t values (4, wangwu);

         B3: commit;
A2: select * from t;

提问 7:假设事务的隔离级别是可重复读 RR,事务 A 中的 A2 查询,结果集是什么?

提问 8:假设事务的隔离级别是读提交 RC,A2 的结果集又是什么呢?

很多时候,我们以为自己懂了,其实 …

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1546字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中