首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是MVCC

MVCC就是多版本并发控制,是为了在读取数据时不加锁来提高读取效率和并发性的一种手段。

数据库并发有以下几种场景:

读-读:不存在任何问题。

读-写:有线程安全问题,可能出现脏读、幻读、不可重复读。

写-写:有线程安全问题,可能存在更新丢失等。

mvcc解决的就是读写时的线程安全问题,线程不用去争抢读写锁。

mvcc锁提到的读是快照读,也就是普通的select语句。快照读在读写时不用加锁,不过可能会读到历史数据。

还有一种读取数据的方式是当前读,是一种悲观锁的操作(注意:还有一中乐观锁的操作详见MP乐观锁实现)。它会对当前读取的数据进行加锁,所以读到的数据都是最新的。主要包括以下几种操作:

select lock in share mode(共享锁)

select for update(排他锁)

update(排他锁)

insert(排他锁)

delete(排他锁)

MVCC的实现

1.回顾事务的特性

原子性:通过undolog实现。

持久性:通过redolog实现。

隔离性:通过加锁(当前读)&MVCC(快照读)实现。

一致性:通过undolog、redolog、隔离性共同实现。

2.回顾事务的隔离级别

读未提交:允许读取尚未提交的数据变更。可能会导致脏读、幻读或不可重复读。

读已提交:允许读取已经提交的数据。可能会导致幻读和不可重复读。

可重复读:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改。可能会导致幻读。

可串行化:最高隔离级别。

在读已提交和可重复读隔离级别下的快照读,都是基于MVCC实现的!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OSqZ8BiWv0g_u5Bgyw-6ZU_Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券