一、MVCC机制
MVCC(Multiversion concurrency control):多版本并发控制;mysql在可重复读隔离级别下保证了事务的隔离性,并发访问(读或写)数据库时,对正在事务内处理的数据做多版本的管理。以达到用来避免写操作的堵塞,从而引发读操作的并发问题(同样的sql语句再同一个事务里多次执行查询结果相同,其它事务对数据有修改也不会影响当前sql语句的查询结果。这个隔离性就是靠MVCC机制来保证的,对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别下为了保证较高的隔离性是通过对所有操作加锁互斥来实现的)。
mysql读已提交和可重复读隔离级别下都实现了mvcc机制。
作用
数据库并发的场景:
- 读-读:不存在任何问题,也不需要并发控制
- 读-写:有线程安全问题,可能会造成事务隔离性问题,可能会遇到脏读,幻读,不可重复读
- 写-写:有线程安全问题,可能会存在更新丢失问题。
1、解决了读写之间的阻塞问题,通过mvcc可以让读写互相不阻塞,即读不阻塞写,写不阻塞读,提高事务的并发处理能力。同时还解决了脏读、幻读、不可重复读等事务隔离问题,但是没有解决更新丢失的问题。
2.解决了一致性读的问题,当我们查询数据库在某个时间点的快照时,只能看到这个时间点之前事务提交更新的结果,而不能看到这个时间点之后事务提交的更新结果。
