首页   快速返回

mysql MVCC 和 事务隔离级别     所属分类 mysql
mysql innodb引擎  
事务 ACID 原子性 一致性 隔离性 持久性
事务隔离性 并发事务 同步及加锁约束 
四个隔离级别 Read-uncommit  Read-commited Repeatable-Read Serializable

查看当前连接使用的事务隔离级别
show variables like '%iso%';           

全局事务隔离级别设为可重复读
set global transaction isolation level Repeatable read;  

设置当前会话事务隔离级别为可重复读
set session transaction isolation level Repeatable read;  
设置当前会话事务隔离级别为序列化
set session transaction isolation level Serializable; 

查看当前会话事务是否自动提交
show variables like 'AUTOCOMMIT';     
禁止事务自动提交 
set AUTOCOMMIT = 'OFF';        
查看数据库当前所有连接
show processlist;   

查看正在执行的事务               
SELECT * FROM information_schema.innodb_trx                       

trx_id  事务ID
trx_state 事务状态
trx_requested_lock_id 事务需要等待的资源
trx_wait_started  事务开始等待时间
trx_tables_in_use 事务使用表
trx_tables_locked  事务拥有锁
trx_rows_locked 事务锁定行
trx_rows_modified 事务更改行 

MVCC 多版本并发控制   Multi-Version Concurrency Control 

版本链
两个隐藏列 trx_id roll_pointer

trx_id  
改动某条记录时,把事务id赋给trx_id隐藏列

roll_pointer  
修改记录时,把旧版本写入到undo日志中,该隐藏列相当于一个指针,可以通过它找到修改前的信息


ReadView

READ COMMITTED 隔离级别的事务在每次查询开始时都会生成一个独立的ReadView
ReadView m_ids列表   记录当前正在活跃的事务

被访问版本的trx_id 小于m_ids列表中最小的事务id,表明生成该版本的事务在生成ReadView前已经提交,该版本低当前事务可见。

从版本链中挑选可见的记录 根据roll_pointer跳到指定的版本

MVCC 使用READ COMMITTD、REPEATABLE READ这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程,
可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。

这两个隔离级别生成ReadView的时机不同,

READ COMMITTD 在每一次进行普通SELECT操作前都会生成一个ReadView

REPEATABLE READ 只在第一次进行普通SELECT操作前生成一个ReadView

上一篇     下一篇
并发编程模型

slf4j为什么用{}而不是%s

java获取系统信息

j2ee容器类加载机制实例演示

tomcat类加载器

java类卸载机制