分布式数据库第08章复习要点整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并发执行:同一时刻有多个活动事务同时运行。
并发控制问题:更新丢失、不可重读、读脏数据。
冲突操作(动作):R1(A)-W2(A)、W2(A)- R1(A)、W1(A)- W2(A),即除了读读不冲突外。
串行调度:一个事务的第一个动作是在另一个事务的最后一个动作完成后开始。即调度中事务的各个操作不会交叉,,每个事务相继执行。串行调度是正确调度。
冲突可串:一个调度冲突等价于某个串行调度。也就是说,该调度可以通过一系列非冲突动
作的交换操作使其成为串行调度。
可串性理论:调度S冲突可串,当且仅当其先序图P(S)是无环图。
例如:S={W2(x),W2(y),R2(z),C2,R1(x),W1(x),C1,R3(x),R3(y),R3(z),C3}
先序图:T2→T1→T3,无环,S是串行调度。
并发控制算法:乐观法(锁、时间戳、混合法)、悲观法(锁、时序排序法)
锁模型:互斥模式、共享模式。
互斥(X)模式:如果数据项既可以读也可以写,则要用lock-X申请X模式锁。
共享(S)模式:如果数据项只可以读,则要用lock-S申请S模式锁。
锁相容性矩阵:
数据项上,可以多个事务申请S锁,但一个事务已经有互斥锁,其他事务不允许再获取任何锁。
基本2PL(2-phase locking protocol)协议:事务执行中Lock的管理分成两个阶段:①上升阶段,获取Lock阶段。②收缩阶段,释放Lock阶段。2PL可以保证事务执行的可串性。
锁点:第一个收缩阶段。
2PL能保证事务可串,但不能保证事务独立性。但是使用S2PL可以。
多副本的情况下,使用:ROWA、多数Locking、仅向主副本发Lock原语。
以上3种技术比较:
无网络分割:多数Locking < ROWA
只考虑数据报文时:多数Locking = ROWA
Lock方式:直接Lock、分层Lock
锁粒度:DB、段、关系、元祖
问题:分层Lock时,T1对元组t加s-Lock,T2对t上的段S加x-Lock,则隐含地也要对t加x-Lock,所以冲突。解决办法:意向锁。
意向锁:如果对一个节点加意向Lock, 则说明该节点的下层节点也正在被加Lock。对任一节点加Lock时, 必须先对它的上层节点加意向Lock。
死锁发生的条件:互斥条件、等待条件、非抢占条件、循环等待条件。
局部死锁:仅在一个站点上发生的死锁。
全局死锁:涉及多个站点的死锁。
等待图:一种用来表示事务之间相互等待关系的有向图, 是分析死锁的有用工具。分为局部等待图(LWFD)、全局等待图(GWFD)。
解死锁的方法:
1.预防:①预先占据所有需要的全部资源;②所有资源排序, 按资源序列申请;③预先确定
存取, 将所有并发事务排序, 按需存取数据;④事务退出已占有的资源。
2.死锁检测:集中式死锁检测、层次式死锁检测、分布式死锁检测。
分布式死锁检测算法:(重点:见第七次作业)寻找不含EX的Loop,若存在,则检测到死锁。
时间戳调度:基本时间戳、保守时间戳、多版本时间戳。
基本时间戳(重点:见第七次作业):
①读X的时候,若TS ②写X的时候,若TS 保守时间戳:每个事务的操作都被缓存起来,并建立起有序的队列,然后,按照顺序执行操作。且要保证缓冲队列中至少有一个缓冲读/写,否则会死锁。 多版本时间戳:记录所有Ti对x的读时,即有RTM(Ti, x)。记录所有Ti对x的写时,同时新写入 的值也被记录,WTM(Ti ,x, vi)。 多版本时间戳的规则:读草操作永不拒绝。假定读操作的时间戳是TS, 于是在WTM(Ti, x, vi) 中找所有< TS的{ WTM(Ti, x, vi)}中的最大WTM(Tj, x, vj),即WTM( Tj, x, vj)= max{ WTM(Ti, x, vi)}, 将vj给读的事务。写操作,一般不拒绝。记录下新的WTM( TS(Tk), x, vk) 即可。但是, 若在TS(Tk) 与下一个比TS(Tk)大的最小时间戳TS(Tj)之间有读操作发生时,则拒绝TS(Tk)的写。 2PL与时间戳技术的比较:2PL:最通用的技术;有用于分布式系统;可能有死锁。T.O.:适 宜于多版本;夭折多;无死锁;有用于分布式系统。 乐观方法:对Trans运行时发生的存取冲突不处理,待事务结束时再进行检验。事务的三个阶段:读段、验证段、写段。 验证:使用数据项和事务时间戳(更新表验证);只使用事务时间戳(读/写集验证)。