又双叒叕被面试官问倒了...
MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,主要用于处理多个事务同时访问和修改数据库时的并发问题:
-
定义: MVCC 允许数据库在事务并发执行时维护不同版本的数据,而不是简单地锁定数据。每个事务在执行时看到的数据版本基于事务开始的时间戳。
-
多版本: 每次对数据库的修改都会创建一个新版本,这通过为每个事务分配唯一的时间戳实现。因此,不同事务可能同时存在相同数据的多个版本。
-
读一致性: MVCC 提供了读取一致性,即一个事务在开始后只能看到在其开始时间之前提交的修改。这通过在读取时使用适当的版本来实现。
-
并发处理: MVCC 减少了锁定和阻塞,允许事务并发执行而不会相互干扰,提高了数据库的性能和吞吐量。
MySQL 8 如何实现 MVCC
在 MySQL 8 中,MVCC 是由存储引擎来实现的,而不是 MySQL 服务器本身。MySQL 8 的默认存储引擎是 InnoDB,它使用 MVCC 来处理并发事务。
实现细节:
-
事务ID(Transaction ID):
- 每个事务在开始时会被分配一个唯一的事务ID。
- 这个事务ID用于标识事务的开始和结束时间。
-
每行记录的版本号:
- 每行记录都包含两个隐藏的列,即
DB_ROW_ID
和DB_TRX_ID
。 DB_ROW_ID
是每行记录的版本号。DB_TRX_ID
是对应事务的事务ID。- 每行记录可以有多个版本,每个版本对应于修改该行的不同事务。
- 每行记录都包含两个隐藏的列,即
-
Read View(读视图):
- 在每个事务开始时,都会创建一个Read View。
- Read View包含事务开始时数据库中所有活动事务的快照。
- Read View确保事务只能看到在其开始时间之前提交的修改。
-
Undo Log(撤销日志):
- InnoDB使用撤销日志来存储事务的旧版本数据。
- 撤销日志用于在事务回滚或MVCC读取时提供旧版本的数据。
-
Purge(清理):
- 后台进程负责清理已经提交的事务产生的旧版本数据。
- 清理过程确保系统中不会累积大量未使用的数据。
个人理解
未完待补充
标签:事务,什么,数据库,并发,版本,MVCC,ID From: https://www.cnblogs.com/lweiis/p/17877601.html