当前位置:文档之家› 分布式数据库第08章复习要点整理

分布式数据库第08章复习要点整理

并发执行:同一时刻有多个活动事务同时运行。

并发控制问题:更新丢失、不可重读、读脏数据。

冲突操作(动作):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<WTM(x),则拒绝。

否则RTM(x)=max{RTM(x), TS}。

②写X的时候,若TS<RTM(x)或TS<WTM(x),则拒绝。

否则WTM(x) = max{WTM(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运行时发生的存取冲突不处理,待事务结束时再进行检验。

事务的三个阶段:读段、验证段、写段。

验证:使用数据项和事务时间戳(更新表验证);只使用事务时间戳(读/写集验证)。

相关主题