数据库系统概论第十一章 并发控制

1.多事务执行方式
事务在执行过程中需要不同的资源,有时需要CPU,有时需要I/O,有时需要通信。如果事务串行执行,则许多系统资源将处于空闲状态。

在单处理机系统中,事务的并行执行实际上是这些并行事务的并行操作操作轮流交叉运行,称交叉并发方式。

在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,称同时并发方式。
2.并发类型
并发事务会造成事务的不一致,主要包括:
1)丢失修改:
T1,T2同时读入同一数据并修改,则可能会丢失某一事务的修改1
2)不可重复读:
T2先读,T1修改,T2再读,单个记录两次数据不一致;
T2先读,T1删除,T2再读,记录数减少或不存在;
T2先读,T1新增,T2再读,记录数增多;
3)读“脏数据”
T1先修改,T2读取,T1某种原因被撤销,T2读的数据为脏数据
3.并发控制的主要技术
主要的技术有封锁、时间戳、乐观控制法和多版本并发控制。
(1)封锁
原理:事务T在对某一个数据对象(如表、记录)操作之前,先向系统发出请求,对其加锁后事务T再释放它的锁之前,其他事务不能更新此对象。
封锁类型:
排它锁(X锁):事务T对数据对象D加X锁之后,其他对象不可以读取数据对象D
共享锁(S锁):事务T对数据对象D加S锁之后,其他对象可以读数据对象D,但是不可以写数据对象D
(2)封锁协议
什么是封锁协议:在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则就是封锁协议(Locking Protocol)
对封锁方式规定不同的规则,就形成了各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。
一级封锁协议:
T在修改D之前加X锁,结束后释放
可以解决丢失修改的问题
二级封锁协议:
T在修改D之前加X锁,结束字后释放;T在读取D之前加S锁,读取完释放
可以解决丢失修改+读“脏”数据
三级封锁协议:
T在修改D之前加X锁,结束后释放;T在读取D之前加S锁,T结束后释放
可以解决丢失修改+读“脏”数据+不可重复读
活锁与死锁
活锁:
多个事务排队执行,无优先级策略导致事务T之后的事务都比事务T先执行,导致事务T一直等待
解决:采用“先来先服务”的策略
死锁:
事务T1封锁了R1,T2封锁了R2,T1又请求封锁R2,T2又请求了封锁R1,则处于死锁状态
系统采用的解决方法
一级封锁协议
事务T在D之前加X锁,结束后释放
可以解决丢失修改
二级封锁协议
T在修改D之前加X锁,结束后释放;T在读取D之前加S锁,读取完释放,
可以解决丢失修改+读“脏”数据
三级封锁协议
T在修改D之前加X锁,结束后释放;T在读取D之前加S锁,T结束后释放
可以解决丢失修改+读“脏”数据+不可重复读
活锁与死锁
活锁
多个事务排队执行,无忧先级策略导致事务T之后的事务一直先于执行,T一直等待,成为“活锁”
解决:采用“先来先服务”的策略
死锁
T1封锁了R1,T2封锁了R2,T1又请求封锁R2,T2又请求封锁R1,则处于死锁状态。
操作系统采用的解决方法
一次封锁法
要求每个事务必须一次将所有要使用的数据全部枷锁,否则不能继续。
缺点:降低了DBS并发度
顺序封锁发
预先对数据对象规定一个封锁顺序,所有事务按这个顺序实施封锁
缺点:维护资源封锁顺序成本太高
数据库采用的解决办法(诊断并解除死锁)
超时法
设置一个事务的等待时间,超过则认为死锁
缺点:等待时间不好设置
等待图法
并发控制子系统周期性地生成事务等待图,并进行检测,如果存在回路,则表明出现了死锁
在这里插入图片描述

参考:https://www.cnblogs.com/yc913344706/p/7710358.html

猜你喜欢

转载自blog.csdn.net/qq_34207992/article/details/96422904