MVCC 解决什么问题?以及实现

248 阅读1分钟

MVCC(多版本并发控制)

解决什么问题?

  • 解决并发操作冲突: MVCC是为了解决多个事务同时访问数据库时可能出现的并发冲突问题。传统的行级锁会导致事务等待,而MVCC允许事务在不互相干扰的情况下并发执行。

实现

MVCC通过保存数据在某个时间点的快照来实现。不同的存储引擎实现MVCC的方式可能不同,但一般包括以下概念:

  • 快照读(Snapshot Read): 当读取数据时,不会等待行锁的释放,而是读取行的一个快照数据。如果其他事务正在修改或删除该行,读取的是行的历史版本,避免了读写冲突。
  • 锁定读(Locking Read): 当执行类似 select ... for updateselect ... lock in share mode 的语句时,会对行进行锁定读,读取的是行的最新版本,但会阻塞其他事务的写操作。

不同存储引擎的MVCC实现方式可能有所不同,但基本思想是通过版本控制和快照来实现事务的隔离性和并发执行。MVCC提供了一种高效的并发控制机制,降低了锁的争用,提高了数据库的并发性能。