mysql性能优化-mvcc

MVCC

实验1:

1
2
3
4
5
6
7
set session autocommit=off;  
update users set lastUpdate=now() where id =1;

--在未做commit/rollback操作之前
--在其他的事务能不能进行对应数据的查询(特别是加上了X锁的数据)
select * from users where id > 1;
select * from users where id = 1;

实验2:

1
2
3
4
5
6
begin 
select * from users where id =1 ;

begin
update users set lastUpdate=now() where id =1;
select * from users where id =1;

两个实验从结果上来看是一致的,底层实现是一样的吗?跟MVCC有什么关系?

MVCC

multiversion concurrency control (多版本并发控制):并发访问(读或写)数据库时,对正在事务内处理的数据做多版本的管理。达到避免写操作的堵塞,从而引发读操作的并发问题。

MVCC插入逻辑流程 :

MVCC插入逻辑流程

MVCC删除逻辑流程:

MVCC删除逻辑流程

MVCC修改逻辑流程:

MVCC修改逻辑流程

MVCC查询逻辑流程:

MVCC查询逻辑流程