如果 MySQL 中没有 MVCC,会有什么影响?
如果 MySQL 中没有 MVCC,会有什么影响?
回答重点
如果没有 MVCC,系统必须频繁地对读写操作进行加锁来保证数据的正确性,因为增加了锁的获取和释放的开销,会导致整体系统响应速度变慢,这种实现叫 LBCC (Lock-Based Concurrent Control)。
扩展知识
LBCC (Lock-Based Concurrent Control)
想象一下有一个事务 1 正在执行,此时一个事务 2 修改了记录 A,还未提交事务。
此时事务 1 要读取记录 A,因为事务 2 还未提交,所以事务 1 无法读取最新的记录 A,不然万一事务 2 回滚了,这不就产生脏读了吗?
那让事务 1 读记录 A 被事务 2 修改之前的数据?但是数据已经被事务 2 改了啊,事务 1 去哪里找之前的数据?
所以怎么办呢?
事务 1 只能用锁阻塞等待事务 2 的提交,这种实现叫 LBCC (Lock-Based Concurrent Control)。
如果有多版本的话,就不一样了。
事务 2 修改的记录 A,还未提交,但是记录 A 被修改之前的版本还在,此时事务 1 就可以读取之前的版本数据,这样读写之间就不会阻塞啦,所以说MVCC 提高了事务的并发度,提升数据库的性能。
Comments