MySQL的MVCC总结

MySQL的MVCC总结

1、什么是MVCC

​ MVCC,Multi-Version Concurrency Control,多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。

读锁: 也叫共享锁、S锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

写锁: 又称排他锁、X锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

表锁: 操作对象是数据表。Mysql大多数锁策略都支持(常见mysql innodb),是系统开销最低但并发性最低的一个锁策略。事务t对整个表加读锁,则其他事务可读不可写,若加写锁,则其他事务增删改都不行。

行级锁: 操作对象是数据表中的一行。是MVCC技术用的比较多的,但在MYISAM用不了,行级锁用mysql的储存引擎实现而不是mysql服务器。但行级锁对系统开销较大,处理高并发较好。

2、MVCC实现原理

innodb MVCC主要是为Repeatable-Read事务隔离级别做的。在此隔离级别下,A、B客户端所示的数据相互隔离,互相更新不可见。

了解innodb的行结构、Read-View的结构对于理解innodb mvcc的实现由重要意义

innodb存储的最基本row中包含一些额外的存储信息 DATA_TRX_ID,DATA_ROLL_PTR,DB_ROW_ID,DELETE BIT

  • 6字节的 DATA_TRX_ID 标记了最新更新这条行记录的 transaction id,每处理一个事务,其值自动+1
  • 7字节的 DATA_ROLL_PTR 指向当前记录项的 rollback segment的undo log记录,找之前版本的数据就是通过这个指针
  • 6字节的 DB_ROW_ID,当由 innodb自动产生聚集索引时,聚集索引包括这个 DB_ROW_ID的值,否则聚集索引中不包括这个值,这个用于索引当中
  • DELETE BIT 位用于标识该记录是否被删除,这里的不是真正的删除数据,而是标志出来的删除。真正意义的删除是在commit的时候
3、对于MVCC的总结

上述更新前建立 undo log,根据各种策略读取时非阻塞就是 MVCC,undo log中的行就是 MVCC中的多版本,这个可能与我们所理解的 MVCC有较大的出入,一般我们认为 MVCC有下面几个特点:

  • 每行数据都存在一个版本,每次数据更新时都更新该版本

  • 修改时 Copy出当前版本随意修改,各个事务之间无干扰

  • 保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃 copy(rollback)

就是每行都有版本号,保存时根据版本号决定是否成功,听起来含有乐观锁的味道,而 Innodb的实现方式是:

  • 事务以排他锁的形式修改原始数据

  • 把修改前的数据存放于 undo log,通过回滚指针与主数据关联

  • 修改成功(commit)啥都不做,失败则恢复 undo log中的数据(rollback)

    二者最本质的区别是,当修改数据时是否要排他锁定,如果锁定了还算不算是MVCC?

    Innodb的实现真算不上MVCC,因为并没有实现核心的多版本共存,undo log中的内容只是串行化的结果,记录了多个事务的过程,不属于多版本共存。但理想的 MVCC是难以实现的,当事务仅修改一行记录使用理想的 MVCC模式是没有问题的,可以通过比较版本号进行回滚;但当事务影响到多行数据时,理想的 MVCC据无能为力了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值