MVCC是一个多版本并发控制的概念
了解MVCC之前,得有两个概念,当前读和快照读,当前读像 select lock in share mode (共享锁), select for update; update; insert; delete (排他锁)这些操作都是一种当前读,为什么叫当前读?就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁,快照读就是不加锁的读,本质上是去undo日志里去找到此条数据的最新的日志转换成视图来展示。省略了读写之间的锁操作,提高了并发性。在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能
同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题。
原理是用字段来记录当前最新可见的数据,例如现在有4个事务,1、3号事务还在活跃状态,4号事务进行了更新操作,2号事务想要快照读数据,操作在4号事务更新操作之后,那么2号事务快照读时,就会先去判断当前最新的undo日志,经过计算得出是4号事务,然后将undo日志转换为视图进行展示。
MVCC的思考
最新推荐文章于 2024-07-20 20:04:43 发布