MVCC一直是数据库部分的高频面试题,这篇文章来聊聊MVCC是什么,以及一些底层原理的实现。
当前读和快照读:
select ... lock in share mode.
select
都是一次快照读,因为每次读都可能读取到的是其他事务已经提交的增删改操作select
才是快照读,因为其后的select读取不到其他事务提交的增删改操作select
都是一次当前读,因为每次读取都会加锁MVCC的概念:
MVCC的实现原理:
DB_TRX_ID
,DB_ROLL_PTR
,DB_ROLL_ID
insert
的时候,undo log只在回滚的时候需要,在事务提交后可以立即删除,不需要记录上一个版本该行的数据(因为上一版本该行不存在;在update
、delete
的时候,不仅回滚的时候需要,多版本并发控制的时候也需要用来记录上一数据版本,用于多版本并发控制,因此事务提交后也不会立即删除。MVCC演示:
可重复读隔离级别:在这种隔离级别下,只在事务第一次执行快照读的时候生成readview,后续再读取的时候会复用这个readview。以下过程和读已提交隔离级别的过程相同,唯一的区别是读已提交隔离级别两次执行快照读都会生成新的readview,因而两次读取的结果不同;而可重复读隔离级别两次执行快照读的readview都相同,因而读取结果相同。上述过程就是不可重复读的底层原理。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。