复习与总结(并发控制)
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\\T2 | X | S | - |
---|---|---|---|
X | N | N | Y |
S | N | Y | Y |
- | Y | Y | Y |
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;
对子结点加锁要先对父结点加意向锁;
父结点被加了意向锁说明子结点正在被锁
以上是关于复习与总结(并发控制)的主要内容,如果未能解决你的问题,请参考以下文章