MVCC面试经典问题
- 什么是快照读和当前读?
- 了解MVCC吗?说下什么是MVCC?
- MVCC的实现原理?有什么好处?
- RC和RR级别下MVCC的差异?
(在最后作出解答。。)
MVCC实现的核心知识:
- 事务版本号:
每次事务开启前都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后顺序。 - 表格隐藏列
trx_id :每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的 事务id 赋值给 trx_id 隐藏列。
roll_pointer :每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到 undo日志 中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。 - Undo log
Undo log主要用于记录数据被修改之前的日志,在表信息修改之前先会把数据拷贝到undo log中,当事务进行回滚操作是可以通过undo log里的日志进行数据还原。
用于MVCC快照读的数据,在MVCC多版本控制中,通过读取undo log的历史版本数据可以实现不同事务版本号都拥有自己独立的快照数据版本。 - 每次对记录进行改动,都会记录一条 undo日志 ,每条 undo日志 也都有一个 roll_pointer 属性( INSERT 操作对应的 undo日志 没有该属性,因为该记录并没有更早的版本)