复习与总结(并发控制)

Posted 梦西空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复习与总结(并发控制)相关的知识,希望对你有一定的参考价值。

 

三种事务执行方式:

(1)串行执行:每个时刻只有一个事务运行,以事务为单位,每次执行完一个事务才能执行下一个事务。

(2)轮流交叉执行:在单处理机系统中,每个事务交叉执行,每次处理机只处理一个事务。当一个事务没执行完,可以执行下一个事务。

(3)同时并发执行:在多处理机系统中,多处理机同时运行多个事务,使得事务之间真正的实现并发运行。
(注:后面讨论的并发处理都是以单处理机为基础的)

 
 

一.并发控制概述

引言:事务之间的并发处理可能导致事务的ACID特性遭到破坏。所以引入并发控制的概念以保证事务的隔离性和一致性
 

并发操作破坏了事务的隔离性导致数据不一致:

• 丢失修改:两个事务T1,T2同时读入同一数据后,T2提交的结果破坏了T1提交的结果。

• 读 “ 脏 ”数据:T1修改了一个数据并将数据写入磁盘,T2读入这个数据,之后T1又将修改的数据恢复为初始值,此时T2读的数据与数据库中的数据不一致。

• 不可重复读:T1读入一个数据,T2对T1读的数据进行修改,T1无法再现前一次读的结果。

解决办法: 封锁,时间戳,乐观控制法,多版本并发控制。

 
 

二.封锁

1.两种锁

(1)排他锁(X锁/写锁): 若事务T对数据对象A加上X锁,只有T可以对A进行读取和修改。其他事务不能给A加任何锁,直到T释放了A。
(2)共享锁(S锁/读锁): 若事务T对数据对象A加上S锁,T可以读A但不能修改A,其他事务只可以给A加S锁,不能加X锁,直到T释放A。

相容矩阵:表示两个事务是否可以同时对一个数据对象加锁

T1\\T2XS-
XNNY
SNYY
-YYY

 
2.封锁协议

理解什么时候封锁,什么时候释放锁。

(1)一级封锁协议: 事务T在修改数据R前必须先对R加上X锁,事务结束后释放。
解决:丢失修改。

(2)二级封锁协议: 在一的基础上增加——T在读数据R前必须先对R加上S锁,读完后释放。
解决:丢失修改,读“ 脏 ”数据。

(3)三级封锁协议: 在一的基础上增加——T在读数据R前必须先对R加上S锁,事务结束后释放。
解决:丢失修改,读“ 脏 ”数据,不可重复读。
 
 

三.活锁和死锁

 

活锁 :T1封锁了R,T2请求封锁R,T2等待;此时T3又请求封锁R,T1释放后,系统批准T3的请求,T2等待;从此后一直有事务请求封锁R,而且系统也都批准了他们的请求导致T2被搁置。

解决办法:选取一种优先批准请求的策略,
例如:先来先服务,按截至期优先,按价值优先等;

 
 
 

死锁 :T1锁R1,T2锁R2;
T1请求锁R2,T1等T2释放R2;
T2请求锁R1,T2等T1释放R1;
两个事务都在等对方形成死锁。
 

解决办法:

1.预防法

一次封锁法:一次将以后要用的数据全加锁。
 

产生问题:
(1)增大封锁范围,降低了并发度;
(2)数据库是动态变化的,无法确定哪些要加锁,最坏的办法是一次性全加锁,进一步降低并发度。

 
 

2.死锁识别
(1)超时法:事务等待时间太长就认为发生了死锁。(很容易误判)
(2)等待图法:存在等待回路则判定发生死锁。

死锁诊断:发现死锁后,撤销掉代价最小的事务。

 
 
 

四.并发调度的可串行性

 

• 可串行化调度

多个事务并发执行是正确的 等价于
它的结果与任意一次串行执行时的结果相同

这种调度就是可串行化调度,这种调度满足可串行性。

 
 

• 可串行化调度的充分条件

冲突操作:不同事务同一数据实行写写操作读写操作
不可交换的操作:不同事务的冲突操作同一事务的操作

一个调度 Sc 的若干操作交换后得 Sc’ ,Sc与Sc’等价。
(只有不同事务不冲突操作可交换

 

1.冲突可串行化

定义:通过交换不同事务不冲突操作能得到串行化调度,称为冲突可串行化

冲突可串行化调度一定是可串行化调度。

 

2.两段锁协议

• 对任何数据读,写操作前,要加上相应的锁。
• 每个事务在释放一个锁后,这个事务不可以再加任何锁。

把每个事务分为两个阶段:扩展阶段(加锁阶段),收缩阶段(释放锁阶段)。

产生问题:由于是要用什么数据就对它加锁,与一次封锁法不同,所以可能导致死锁现象。

 
 

五.封锁粒度

定义:封锁对象的大小。
封锁粒度与系统并发度和并发控制密切相关。

多粒度锁协议:允许对所有结点加锁,父结点加锁,子结点也会加同样的锁。

显示封锁:直接对该结点加的锁。
隐式封锁:由于对父结点加锁导致子结点被封锁。

意向锁
IX锁,IS锁,SIX锁。
SIX锁=S+IX;

对子结点加锁要先对父结点加意向锁;
父结点被加了意向锁说明子结点正在被锁

以上是关于复习与总结(并发控制)的主要内容,如果未能解决你的问题,请参考以下文章

Java面试复习重点:docker原理图

复习backtracking 并总结

总结 480 页,超 30W 字 2021 最新一线大厂 Java 高级架构师面试题,已拿阿里 P7+ 意向书!

《MySQL高级篇》十四多版本并发控制

python 复习—并发编程实战——并发编程总结

java并发复习笔记总结