MVCC(多版本并发控制)
解决什么问题?
- 解决并发操作冲突: MVCC是为了解决多个事务同时访问数据库时可能出现的并发冲突问题。传统的行级锁会导致事务等待,而MVCC允许事务在不互相干扰的情况下并发执行。
实现
MVCC通过保存数据在某个时间点的快照来实现。不同的存储引擎实现MVCC的方式可能不同,但一般包括以下概念:
- 快照读(Snapshot Read): 当读取数据时,不会等待行锁的释放,而是读取行的一个快照数据。如果其他事务正在修改或删除该行,读取的是行的历史版本,避免了读写冲突。
- 锁定读(Locking Read): 当执行类似
select ... for update
或select ... lock in share mode
的语句时,会对行进行锁定读,读取的是行的最新版本,但会阻塞其他事务的写操作。
不同存储引擎的MVCC实现方式可能有所不同,但基本思想是通过版本控制和快照来实现事务的隔离性和并发执行。MVCC提供了一种高效的并发控制机制,降低了锁的争用,提高了数据库的并发性能。