Mysql多版本并发控制

概念

Mysql的绝大多数事务型存储引擎都不是简单的行级锁。他们实现了多版本的并发控制,也就是MVVC,当然,支持MVVC的数据库并不只有Mysql,Orcale、PostgreSql等都实现了MVVC,只不过他们实现的方式不同而已,因为MVVC没有一个统一的规范。

其实MVVC可以理解为行级锁的一种变异,它会选择性加锁,避免的大部分情况下的枷锁操作,所以节省了cpu的开销,虽然每个数据库的实现方式不同,但都是并发读,串行写(必要的记录)。

MVVC是通过保存数据在某个时间点的快照实现的,也就是说,不管执行多少代码,多长时间,每个事务看到的数据应该是一致的。如果没有MVVC,根据Mysql的隔离级别,我们会发现,不同的事务之间,每个事务查询到的数据可能是不一致的,对这点不清晰的可以参考:事务特征以及隔离级别

虽然说不同的存储引擎有着不同的实现MVVC方式,但是最经典的莫过于乐观并发控制以及悲观并发控制,我们来说明一下他们分别如何实现并发控制。

InnoDB存储引擎是通过在每行记录的后面保留两个字段(隐藏),这两列,一个是保存了行的创建时间,哟i个是保存过期时间(删除时间)。当然,存储的并不是真是的时间值,而是系统版本号,每开启一个事务,系统的版本号都会叠加,整个事务都会一当前的版本号作为判断的基本条件。

查询:
InnoDB会根据下面两个条件查询每行记录:
1.InnoDB之查找版本号小于或等于当前事务版本号的数据行。
2.数据的删除版本要么没有指定,要么必须大于当前事务版本号,可以保证事务读取到的数据在事务开启之前未被删除。

插入:
InnoDB再插入的时候会在新行中保存当前系统的版本号作为行版本号。

删除:
InnoDB将需要删除的数据保存当前系统版本号作为删除表示。

修改:
InnoDB未插入一行新纪录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为删除标识。

保存这两个额外的版本号,就可以让大多数读操作可以不加锁,提高了系统性能,并且也能保证只会督导符合标准的记录,但是这两个字段会占用额外的存储空间。

悲观并发控制其实就很简单了,那就是锁定指定行,同一时刻,只有一个事务能被执行,其他食物处于阻塞状态,这样消息并不是很好,但是不需要新增额外的字段。

MVVC只在read committed(读提交)与repeatable read(可重复读)两个隔离级别下工作,至于是什么原因,如果阅读了上面的事务特征以及隔离级别,相信就不难理解了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
版本并发控制(MVCC)是MySQL中的一种技术,它通过维护数据的多个版本,以实现读写操作的并发控制。MVCC通过在每行记录后面保存两个隐藏的列(一个保存行的创建时间,一个保存行的删除时间)来实现。当一个事务读取数据时,它会根据事务开始的时间戳和行的版本信息来确定可见的数据版本。这种机制在InnoDB存储引擎中被广泛使用,可以提供一致性读操作的保证。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL之InnoDB存储引擎-MVCC](https://blog.csdn.net/qq_53267860/article/details/125073612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [MySQL数据库多版本并发控制MVCC](https://blog.csdn.net/iuu77/article/details/129132863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [mysql版本并发控制MVCC的实现](https://download.csdn.net/download/weixin_38607195/14907745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值