Mysql多版本并发控制原理(MVCC)

一、Mysql事务的隔离级别(default= 可重复读)。

	1.读未提交。
		开启事务A,开启事务B,A事务查询 age=13,B事务查询 age=13,接着,A事务更新age=14(事务不提交), A事务查询 age=14,B 事务查询age=14。
		⚠️注意:存在【脏读,不可重复读,幻读】
	2.读已提交。
		开启事务A,开启事务B,A事务查询 age=13,B事务查询 age=13,接着,A事务更新age=14(事务不提交), A事务查询 age=14,B 事务查询age=13。当事务A事务提交之后,B事务查询 age=14。
		⚠️注意:存在【不可重复读,幻读】
	3.可重复读(MVCC,next-key-lock解决幻读)不是当前隔离级别解决的。
		开启事务A,开启事务B,A事务查询 age=13,B事务查询 age=13,接着,A事务更新age=14(事务不提交), A事务查询 age=14,B 事务查询age=13。当事务A事务提交之后,B事务查询 age=13,当事务B提交时候,查询age=14。
		⚠️注意:存在【幻读】
	4.串行化。
		完全串行话的读,每次读都需要获得表级共享锁,读写相互都会阻塞。
		🏁重点:不可重复读 和 幻读的区别?
			① 不可重复读:关注的是修改,同一条数据读取的数据是不一样的。
			② 幻读:关注的是新增/删除,读取的条数发生了变化。
	事务的特性:原子性,一致性,隔离性,持久性。

二、如何查看设置隔离级别。

  a)查看mysql 版本:select version(); 
  b)查看系统隔离级别:select @@gloabl.tx_isolation;
  c)查看会话隔离级别(version=5):select @@tx_isolation;
  d)查看会话隔离级别(version=8):select @@transaction_isolation;
  e)设置会话隔离级别:set session transaction isolation level repeatable read;

三、如何选择隔离级别。

	...待整理

四、隔离级别与并发事务。

  a)上 
  b)中 
  c)下

五、Mysql 日志。

a)redo.log 重做日志
	i.是InnoDB存储引擎层的日志。
	ii.记录数据是修改之后的数据,不管事物是否提交都会记录,我们的一切操作,对于数据的修改,这些动作都会记录下来。
	iii.可以保证事务的提交。
	iv.先写日志,在写磁盘。对于数据的处理,先写入日志,再写磁盘,来保证数据的写入的高性能。
b)undo.log 回滚日志
	i.记录数据发生之前的数据版本,也就是事物提交之后。
	ii.可以用于回滚,数据回滚也就是事务的回滚。
	iii.可以提供多版本并发控制下的读(MVCC),即非锁定度。
c)bin.log 归档日志 业务层面操作的日志
	i.主从复制
	ii.二进制的形式记录。
	iii.基于时间点的数据还原。
	提交事务记录binlog ,定时刷盘,不光是记录数据,会记录一些事件

六、多版本并发控制原理之-隐藏字段

 a)上 
 	i.DB_TRX_ID
    	1.6byte字节
    	2.记录创建这条记录时,最后一次修改改条记录的事物ID/最近修改插入事务ID。
    ii.DB_ROLL_PTR
    	1. 7byte,回滚指针
    	2.指向这条记录的上一个版本(存储于rollback segment 回滚段里) 
    iii.DB_ROOW_ID
    	1.6byte,隐含的自增ID(隐藏主键)
    	2.如果数据表没有主键 a)InnoDB会自动以DB_ROOW_ID产生一个聚簇索引。 iv.创建版本号 v.删除版本号

七、多版本并发控制原理之-当前读和快照读。

 a)什么是当前读? 
 	i.select from update ;update ,insert ,delete
    ii.当前读:读取的是当前最新记录的最新版本。 	
    iii.读取时还要保证其他并发事务不能修改当前记录。
    iv.会对读取的记录进行加锁。 	
 b)什么是快照读? 
 	i.不加锁的非阻塞读。
    ii.快照读的隔离级别不是串行隔离级别,串行的隔离级别下的快照读会退化成当前读。

八、多版本并发控制原理之-读视图。

 a)read-view(决定的是对其他事务数据的可见性的一个重要的因素
 	i.List (记录当前活跃事务的ID) 
 		例如1:1,2,3
    ii.Up ID (记录最小的事务ID) 
    	例如1:1 
    iii.Low ID(记录下一个要分配的事务ID)  
    	例如1:4
    
    ⚠️注意:可重复读级别,在首次读取的时候生成读视图,并且在当前的事务下进行传递。 
    ⚠️注意:读已提交级别,在每次快照读时生成视图。

九、多版本并发控制原理之-数据可见性算法。
数据可见性算法保证了事务之间的数据是否可见

十、数据常见问题

 ① 数据库锁的有那几类? 	
 	a)行级-锁 	
 		i.共享锁,又指-读锁。 	
 		ii.排它锁,包括【插入,更新,删除,SELECAT * FROM UPDATE】。 	
    b)页级-锁 	
    c)表级-锁 	
    d)记录锁 	
    	锁住的是索引,锁了索引,就是锁的索引树。 	
    e)间隙锁
    	锁住的是个范围,间接的解决了幻读的问题。 	
   ② next-key-lock是什么?  	
   		待更新...
   ③  .............
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值