数据库第十一章复习与总结(并发控制)

 

三种事务执行方式:

(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;

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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦西空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值