550 likes | 660 Views
第七章 分布式数据库. 7.4 分布式事务管理 事务( Transaction): 一组对数据的操作序列称为事务。 事务的性质或称 ACID 准则: 原子性( Atomic) 一个事务要么全执行,要么全不执行。 一致性( Consistency) 指数据应满足的约束条件。 隔离性( Isolation) 事务更新过的数据在事务结束前对其他事务不可见。 持久性( Durability) 已完成事务对数据的更新应持久,发生故障应恢复。. 分布式事务管理:分布事务管理和局部事务管理
E N D
7.4 分布式事务管理 • 事务(Transaction):一组对数据的操作序列称为事务。 • 事务的性质或称ACID准则: • 原子性(Atomic) • 一个事务要么全执行,要么全不执行。 • 一致性(Consistency) • 指数据应满足的约束条件。 • 隔离性(Isolation) • 事务更新过的数据在事务结束前对其他事务不可见。 • 持久性(Durability) • 已完成事务对数据的更新应持久,发生故障应恢复。
分布式事务管理:分布事务管理和局部事务管理分布式事务管理:分布事务管理和局部事务管理 • 一个分布式事务由主事务(负责事务的开始、提交或异常中终止)和多个子事务(完成对数据的操作)组成。 • 分布式事务管理程序:事务处理和协调程序二部分组成。 • 分布式事务处理:分布式并发控制和事务恢复
7.4.1 分布式事务的并发控制 7.4.1.1 分布式事务可串行化 如果多个事务并行调度执行结果与他们按某一串行执行的结果相同,称这些事务的调度执行是可串行化的。 例:事务T1、T2分别对数据A和B执行更新。 T1: READ A T2: READ B A = A - 10 B = B - 20 WRITE A Y = B READ B WRITE B B = B + 50 READ A WRITE B C = Y + A WRITE C 初始值为A=50,B=l00。 T1先执行结果为: A=40,B=130,C=170。 T2先执行结果为: A=40,B=130,C=130。
T1: READ A T2: READ B A = A - 10 B = B - 20 WRITE A Y = B READ B WRITE B B = B + 50 READ A WRITE B C= Y + A WRITE C 初始值为: A=50,B=l00。 T1: READ A T2: READ B A = A - 10 B = B - 20 WRITE A WRITE B READ B B = B + 50 READ A WRITE B READ B C = A + B WRITE C 执行结果为: 执行结果为: A=40,B=150,C=120。 A=40,B=130,C=170.
调度: 指事务处理执行操作的一个序列。 事务的操作分为两类: Ri(x)、Wi(x) 串行调度序列S1: R j (x)Wj (y)R i (x)Wi (x)R k (y) 冲突操作:若二个事务同时对数据目标X操作,其中之 一是写操作,则这二个操作是冲突的。 并行调度序列S2:Ri(x) Rj(x)Wi(x) Wj(y)Rk(y) 冲突等价:同一个事务集的不同调度序列中,任一对冲 突操作在调度S1中Oi优先Oj而在调度S2中也Oi优先Oj, 则这两个调度冲突等价。 S1和 S2是冲突等价的: 冲突操作<Rj(x),Wi(x)> 和 <Wj(y),Rk(y)> 在S1和S2中的顺序一致。
分布式事务: 由一个主事务和多个子事务组成。 分布式事务的可串行化: 设分布事务集T1,T2,,Tk ,如果满足以下条件,则 T1,T2,,Tk的调度执行是可串行化的. (1).对分布事务T1,T2,,Tk的每个局部结点上的调度Sp都是可串行化的; (2)存在一个对T1,T2,,Tk的综合顺序使得在该顺序中事务Ti<Tj,则对T1,T2,,Tk每个局部结点上的可串行化调度Sp在等价的串行调度Sp中有事务Ti<Tj。
例:设数据X在结点1,Y在结点2 事务 T1: R1(x)W1(x)R1(y)W1(y) T2: R2(x)W2(x)R2(y)W2(y) 存在综合调度: T1 < T2 或T2 < T1 在结点1的调度:R1(x) W1(x) R2(x) W2(x) 在结点2的调度:R1(y) W1(y) R2(y) W2(y) 在结点2的调度: R2(y) W2(y)R1(y) W1(y)
7.4.1.2 基于封锁的并发控制 封锁的类型(共享锁S、排它锁X)、 封锁的时间、封锁协议 • 封锁协议(Locking Protocol) • 使用锁的规则 • 封锁协议的内容包括有,何时申请锁、锁的类型、持锁时间、何时释放锁。 • 事务T在修改数据R之前必须先对R加X锁,在读取数据R之前必须先对其加锁,直到事务结束才释放锁。
为了保证数据库的一致性,DBMS需要提供并发控制机制,以保证并发操作的正确性。为了保证数据库的一致性,DBMS需要提供并发控制机制,以保证并发操作的正确性。 • 并发操作不当带来的数据不一致性的表现 • 丢失修改 • 不可重复读 • 读“脏”数据 A=16 A=A-1 A=16 A=A-1 T1T2 A=6 B=5 A+B=11 A=6 B=10 A+B=16 B=B+5 T1T2 B=5 B=B*6 ROLLBACK B=30 T1T2
二段锁协议(Two-Puase Looking 2PL协议) (1). 任何事务在对数据操作前必须先获得锁; (2). 事务在释放一个锁后不再获得任何锁。 • 第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。 • 第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。 开始上锁 释放锁 结束
若所有事务都遵循2PL协议,则多个事务的交叉执行是可串行化的。若所有事务都遵循2PL协议,则多个事务的交叉执行是可串行化的。 在分布式数据库中,若所有事务都遵循2PL,则分布事务的调度执行是可串行化的。 假定不存在可串行化的调度,即对T1,T2,…,Tk事务不存在分布式事务的综合顺序,则一定存在一个冲突回路: 〈O1(x),O2(x)〉,〈O2(y),O3(y)〉,…, 〈Ok(z),O1(z)〉 但每个事务若遵循二段锁协议,以上调度序列是不会产生的。
T1: R(x)W(x) T2: R(x)W(x) T1: R(y)W(y) T2: R(y)W(x) 例: 结点A(数据X) 结点B(数据y) 并行调度的综合顺序: T1<T2 结点A: R1(x)W1(x) R2(x)W2(x) 结点B: R1(y)W1(y) R2(y)W2(y)
结点A 结点B 结点A T1A T2A T1B T2B T1A(X) T2A(X) T1B(Y) T2B(Y) 全局 等待图 局部等待图 死锁检测和消除: 并行调度的顺序: T1<T2 T1 : R1(y)W1(y) R1(x)W1(x) T2 : R2(x)W2(x) R2(y)W2(y) 执行2PL
NLDD0 • NLDD1 NLDD2 • LDD1 LDD2 LDD3 LDD4 LDD5 • 死锁检测器树 • 分布式数据库中死锁的检测 • 集中式死锁检测 、分层控制:与层次选择有关,应反映网络拓扑结构和对结点的访问模式。 INGRES中是集中死锁检测
结点A 结点B T1 T2 EX 结点A T1 T2 EX 结点B T1 T2 T1 T2 • 分布式死锁检测 需要每个结点都负起检测全局死锁的责任。 (1)局部死锁检测器需要确定把潜在的死循环发送到哪个结点。 (等待它的结点或它等待的结点) (2)哪些结点发送,哪些结点不发送。 如规定EX等待的事务标识大于等待EX的事务标识时发送。
预防死锁 给事务赋予全局唯一标识符,若Ti<Tj决定Ti等待(Ti<Tj)或重新启动(Ti>Tj),事务重新启动时保持事务标识不变。使分布事务是按照事务的全局顺序执行的。 • 设置超时机构
多副本的封锁: (1) 写全锁 写操作申请全部副本的排它锁,读操作仅申请一个副本的共享锁。 (2) 封锁多数 不管是读还是写操作都需要获得对一半以上数据副本的锁 (3) 封锁主副本 活动主副本 (4) 集中封锁 指定一个结点负责锁管理,获得锁后才能对数据副本进行操作。
7.4.1.3 基于时戳(Time Stamp)的并发控制 以时戳的顺序处理冲突,基本时戳法遵循准则: (1).每个事务T开始时,在发生结点赋予时戳TS; (2).事务的读、写操作都带有该事务的时戳; (3).每个数据X分别有最大时戳RTM(X)和WTM(X); (4).若事务T读X,TS < WTM(X) 则拒绝并用新的时戳重新启 动,否则执行读操作,RTM(X)置为max(RTM(X), TS) (5).事务写X,TS < RTM(X) 或 TS < WTM(X),拒绝写并用 新的时戳重新启动,否则执行写并置WTM(X)为TS。
例:事务T1<T2 结点A:R1(x)W1(x)R2(x)W2(x) 结点B: R1(y)W1(y)R2(y)W2(y) 执行2PL: T1 T2 按照时戳法: 设事务T1时戳为TS1,事务T2时戳为TS2,TS1<TS2 结点A 结点B RTM (X) WTM(X) RTM(Y) WTM(Y) R1(x) TS1 0 0 0 W1(x) R1(y) TS1 TS1 TS1 0 R2(x) W1(y) TS2TS1 TS1 TS1 W2(x) R2(y) TS2 TS2 TS2 TS1 W2(y) TS2 TS2 TS2 TS2 基于时戳的并发控制使得事务的并行执行等价于以时戳顺序确定的一个特定的串行序列。
7.4.2 分布式事务的恢复 7.4.2.1 集中式数据库系统中的恢复 集中式数据库系统中恢复的手段主要是利用转储和日志 • 日志文件的主要内容: • (1).事务处理的标识符; • (2).操作的类型(插入、删除、修改); • (3).更新前的值; • (4).更新后的值. • 写检查点所作的操作: • (1).将日志缓冲区中的内容强行写入日志文件; • (2).将数据库缓冲区中的内容强行写入外存储器; • (3).将检查点记录的地址写入重启动文件中。 • 故障种类: 事务内部的故障、系统故障、介质故障。
事务故障的恢复 • 事务恢复的原则 • 对事务内部的故障,不影响其它事务,将事务回退(UNDO)。 • 已提交的事务应该满足事务的持久性, 发生故障后应该重做 (REDO) 它所做过的所有修改数据库的操作。 • 对非事务内部的故障,如系统崩溃等引起事务夭折。所有正在执行的事务都需要撤消(UNDO)
事务故障的恢复步骤: (1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。 (2)对该事务的更新操作执行逆操作。 (3)反向扫描,直至读到此事务的开始标志,事务故障恢复就完成了。 恢复 事务开始 故障点
系统故障的恢复步骤: (1) 正向扫描日志文件(从头扫描日志文件) • 找出在故障发生前已经提交的事务,将其事务标识记入重做(REDO)队列。 • 找出故障发生时尚未完成的事务,将其事务标识记入撤销(UNDO)队列。 (2)对撤销队列中的各个事务进行撤消处理。(UNDO) (3)对重做队列中的各个事务进行重做处理。(REDO)
介质故障的恢复: 装入后备副本,重做已完成的事务。 装入有关日志文件的副本 : • 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。 • 然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。
具有检查点记录的恢复步骤 (1).从重启动文件中找出最近一个检查点记录地址; • (2).得到检查点时刻事务清单; • (3).从检查点以后,正向扫描日志文件,将已经完成的事务放入重做队列,对未完成的事务放入撤消队列。 • (4) 对重做队列中的事务执行REDO操作; • (5)对撤消队列中的事务执行UNDO操作。 日志开始 检查点……检查点 故障点
7.4.2.2 分布式数据库系统中的恢复 • 分布式数据库中的故障:结点故障、通信故障(信息丢失和网络分割)。 • 恢复的单位是事务,故障发生前已完成的事务都在恢复之列。撤消(undo);重做(redo)。 • 分布式事务的恢复分为三个层次: • (1) 仅处理结点故障; • (2) 仅处理结点和信息丢失二种故障; • (3)同时能够处理结点故障、信息丢失和网络分割三种故障。
7.4.2.2 分布式数据库系统中的恢复 • 分布式事务的提交通过协调程序完成,子事务站点为参与者,执行协调程序的站点为协调者。 • 二阶段提交协议(2PC): • 事务的提交分二个阶段: • 准备提交阶段、提交阶段 • 所有子事务提交,全局事务才能提交; • 子事务的执行如果出了故障, 局部事务管理器可以决定中止子事务的执行。
Prepare 协调者: (1)写Prepare信息到日志,发消息 (2).写提交或中止信息到日志,发消息;收到ACK后写Complete. 参与者: (1) 写提交Ready信息到日志。 (2) 写决定信息到日志。 Ready Commit或Abort ACK 二阶段提交协议(2PC): 第一阶段为Prepare阶段, 第二阶段为Commit或Abort阶段。
站点故障 参与者与协调者不同处理。 参与者的处理: • 参与者将“Ready”信息写入日志前故障。协调者等待超时,其他子事务异常中止,该子事务重启后异常中止。 • 参与者将“Ready”信息写入日志后故障。其他子事正确结束(Commit 或 Abort),该子事务重启后由协调者提供信息正确结束。
站点故障 协调者的处理: • 协调者将“Prepare”信息写入日志后故障。所有工作正常的参与者挂起,协调者恢复后重新发“Prepare”信息,参与者应能识别是否是协调者重新发来的信息,再次发“Ready”信息。 • 协调者将决定信息写入日志后故障。“Complete”信息写入日志前的故障需协调者恢复后重新发决定信息,挂起的子事务继续提交,已提交子事务只发”ACK”信息. • 协调者将Complete信息写入日志前故障。
报文丢失 • 第一阶段: 协调者的“Prepare”信息丢失。没有收到“Prepare”信息的参与者等待,协调者等待超时,子事务异常中止。 参与者的“Ready/Abort”信息丢失。协调者等待超时,子事务异常中止。 • 第二阶段: 协调者的“Commit/Abort”信息丢失,参与者处于等待状态。 参与者的“ACK”信息丢失,协调者等待。
网络分割 • 协调者子网: 协调者收不到其它参与者的信息,按参与者发生故障处理。在同一子网的参与者 子事务可以正常结束(中止)。 • 参与者子网: 参与者收不到协调者的信息,按协调者故障处理。 • 2PC协议存在的问题:阻塞 • 在参与者发出准备好信息后协调者发生故障或通信故障,子事务将挂起,它所占有的资源不能释放,降低了系统效率。
三阶段提交协议(3PC): 第一阶段:同2PC协议; 第二阶段:协调者若收到一个“Abort”或在规定时间内没有收到“Ready”,通知所有参与者“Abort”事务。否则向参与者发“Enter-Prepare- State”信息使其进入新的准备好提交状态,参与者收到该信息后将“Enter-Prepare- State”信息写入日志并给协调者发回一个“OK”信息; 第三阶段:第二阶段协调者发出的不是“Abort”信息进入这一阶段,接收到参与者的“OK”信息后发“Commit”给参与者正式提交事务。
PREPARE ABORT ABORT 参与者 ACK 协调者 事务撤消
PREPARE READY Enter-Prepare- State 参与者 协调者 OK COMMIT ACK 事务正常提交
3PC协议对故障处理: 参与者结点的故障 处理与2PC协议相同。 协调者故障 参与者中选一个新的协调者,若新的协调者: (1) 处在“Abort” 状态,所有接点异常中止事务; (2)处于“Enter-Prepare-State”状态,向所有正常工作的参与者发“Enter-Prepare-State”信息提交事务; (3) 处于“Commit”状态,给参与者发“Commit”信息。
7.4.2.3 多副本的更新 (1).更新主副本 仅更新主副本,其它副本的更新在事务结束后由主副本负责更新。对非主副本的操作要等到更新结束后才能进行。 “活动主副本”。 (2).结点保留一张表,记录每个不可更新的结点 (3).快照 数据在某一时刻的状态,存储在外存上,定期刷新。快照仅提供读操作。
3. 快照方法 • 快照:数据在某一时刻的状态,存储在外存上,定期刷新。快照仅提供读操作。 • DEFINE SNAPSHOT HP_BOOK AS • SELECT *FROM BOOK WHERE PRICE > 100 • REFRESH EVERY DAY. • REFRESH SNAPSHOT HP_BOOK .
7.5 分布式目录 • 目录(Catalog) • 一个“微小DB”, 描述DB的元数据(metadata) • 分布式目录需要实现: 目录的存储、存取、并发控制和恢复 • 目录管理策略对提高数据库系统性能至关重要
目录的内容 • 全局模式描述 • 分片模式描述 • 分布模式描述 • 局部名映射 建立物理映象与站点数据名的对应关系 • 存取方式描述 索引 • 数据库统计信息 关系的元组数、元组长度、存放空间 • 一致性约束 完整性约束和存取权限 • 状态信息 记录站点及事务的运行状态 • 数据表示 提供对异构数据库的支持 • 系统描述 站点软硬件配置和处理能力的信息
组织方式 • 独立式 利用OS提供的文件管理功能建立和维护目录信息 • 嵌入式 DBMS与目录信息一体化, 即数据目录系统作为DBMS的子集, DBMS通常应用该方式 • 分离式 利用DBMS的管理功能建立和维护目录信息, 但其用户界面和功能均独立于DBMS
7.5.1 目录的分布和管理 目录分布策略: • 集中式 • 全复制式目录 • 部分复制式 (部分站点、部分目录) 目录的高速缓存(目录赋予版本号,缓冲的目录不必与最新目录一致, 传送访问计划到有关结点时包括目录数据的版本号, 版本号不一致再更新目录 )
7.5.2 不同分布式数据库系统中的目录分布和管理 SDD-1目录特点 • SDD-1的目录采用全局和局部混合的方式,其中:全局模式描述、分片和分布信息是全复制的,其余目录信息局部存储。 • SDD-1支持目录缓冲,允许局部结点缓冲远程目录信息但要求与最新版本一致。
System R*的目录特点 • R*的目录具有局部自治性 每个站点存放 本站点上生成 和 在本站点上存储数据的目录 如果在本结点生成的数据项 没有存放在这个结点,则在相应目录项中需指出该数据存放在哪些结点上 • R*支持带有版本号的目录缓冲以验证数据的有效性。
System R*的命名机制 系统范围名、打印名 • 系统范围名 由4部分组成 : 创建对象的用户标识符, 用户所在站点名,对象名, 对象的源站点名 User-1 @shanghai. EMP @ beijing • 打印名 • 系统范围名的速记名,如EMP • 省略部分表示当前用户和当前站点
ORACLE分布式数据库简介 • ORACLE的分布式特点: • 局部自治 数据由本地DBA管理,其他结点要存取该结点的数据,要由本地DBA授权 • 不依赖中央场地, 所有结点平等,每个结点有自己的数据字典。 • 复制独立 数据备份可存放在多个结点,提供快照。 • 分布式事务处理,执行2PL协议 • 硬件独立 适宜于各种机型 • 操作系统独立 • DBMS独立 Oracle *NET *CONNECT 支持与非Oracle系统的连接,如DB2、SYBASE、SQL/DS
客户 客户 服务器 服务器 数据库 数据库
ORACLE的查询优化: • 分为物理层和逻辑层优化 • ORACLE的优化没有用统计分析信息,主要利用索引和聚簇改善查询性能。 • 若没有建立索引,系统用合并扫描进行连接: • 系统将按连接的列分类排序,合并扫描完成连接。
ORACLE的事务管理: • 划分事务: • COMMIT、ROLLBACK、 • DDL语句,如CREATE … • 锁:ORACLE中的锁是自动的,也可以用显式锁 • 数据锁(DML) • 字典锁(如DDL)字典锁是隐式的