MVCC原理
2021/7/9 23:38:08
本文主要是介绍MVCC原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MVCC原理
什么是MVCC
MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
MVCC解决了什么问题
MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读
MySQL版本链
Read View
- m_ids:在生成ReadView时,当前系统中活跃的读写事务的事务id列表
- min_trx_id:在生成ReadView时,当前系统中活跃的读写事务中最小的事务id;也就是m_ids中最小值。
- max_trx_id:在生成ReadView时,系统应该分配下一个事务的事务id值。
- creator_trx_id:生成该ReadView的事务的事务id。
ReadView判断记录可见的条件
什么是当前读和快照读
- 当前读
像select lock in share mode(共享锁), select for update ; update, insert ,delete(排他锁)这些操作都是一种当前读,为什么叫当前读?就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。
- 快照读
像不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于多版本并发控制,即MVCC,可以认为MVCC是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销;既然是基于多版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本
MVCC就是为了实现读-写冲突不加锁,而这个读指的就是快照读, 而非当前读,当前读实际上是一种加锁的操作,是悲观锁的实现
参考资料
《MySQL是怎样运行的-从根儿上理解MySQL》
这篇关于MVCC原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-05在 etcd 中怎么看有多少客户端在监视特定键 (watch)-icode9专业技术文章分享
- 2024-11-05uniapp 怎么实现返回上一页效果-icode9专业技术文章分享
- 2024-11-05UniApp 中则么实现检查一个 URL 是否以 "http://" 开头功能-icode9专业技术文章分享
- 2024-11-05怎么使用nslookup指定dns解析?-icode9专业技术文章分享
- 2024-11-05shopify 中 的 analyticsToken 一般多久过期?-icode9专业技术文章分享
- 2024-11-05array_intersect_key 有没有前后顺序-icode9专业技术文章分享
- 2024-11-05在 CodeIgniter 3.x 中,怎么批量插入返回值?-icode9专业技术文章分享
- 2024-11-05初学者必备:轻松入门TypeScript (ts)编程
- 2024-11-05TypeScript 入门教程:从零开始学习
- 2024-11-05TypeScript入门指南:从基础到实践