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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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运行时发生的存取冲突不处理,待事务结束时再进行检验。事务的三个阶段:读段、验证段、写段。

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

相关文档
最新文档