mysql MVCC 和 事务隔离级别
所属分类 mysql
浏览量 1474
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类卸载机制