数据库第八部分部分学习课件.pptVIP

  • 126
  • 0
  • 约 40页
  • 2016-12-06 发布于江苏
  • 举报
第8章 并发控制 并发控制 数据库是一个共享资源,可供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。例如:银行数据库系统、机票订票数据库系统等。 并发处理的意义: ⑴ 改善系统的资源利用率; ⑵ 改善短事务的响应时间。 8.1 并发控制导论 1.数据库系统中的并发 事务串行访问(Serial Access):事务顺序执行,一个事务完全结束后才开始另一事务。 并发访问(Concurrent Access):多个事务同时执行,即各事务中的操作可交错执行。 操作的交错执行:需要调度(Schedule)。 2.调度概念 调度:“事务集”中的一串有序操作集。 对调度的要求:一个事务中操作在调度中的顺序应该与它们在事务中的顺序一致。 每个事务最后的行动: COMMIT和ROLLBACK。 调度的表示: S=R(A)W(A)R(B)W(B)R(C)W(C) 8.2 并发执行可能引起的问题 8.3 并发执行的正确性准则 8.4 基于锁的并发控制协议 8.5 死锁及其预防、检测与处理 8.6 SQL Server中的锁与加锁 3)多粒度加锁协议的相容矩阵 4)多粒度加锁/解锁顺序 ① 要对一个数据对象加锁,必须对这个数据对象的所有祖先加相应的意向锁,即:申请锁时,应按自上而下(从根到叶)的次序申请,以便及时发现冲突; ② 解锁时,应按自下而上(从叶到根)的次序进行,以免出现锁冲突。 1. 概述 死锁:当事务出现循环等待时,如不加干预,则会一直等待下去,形成死锁(dead lock)。 对付死锁的二个方法:① 防止死锁;② 检测死锁,发现死锁后处理死锁。 方法:给每个事务一个优先级,并禁止低优先级的事务等待高优先级事务,或反之。而事务优先级的设定,是当事务开始执行时,给事务一个时间戳TS(Time Stamp)来完成。 事务间等待关系:一个事务如申请锁而未获准,则需等待其他事务释放锁,从而形成事务间的等待关系。 时间戳:是一个惟一的、随时间增长的整数。 2. 死锁的预防 (1)基本概念 示例:如有两个事务TA和TB,如ts(TA)<ts(TB),则表示TA早于TB。 死锁预防策略:① 等待—死亡(Wait-Die)策略;② 击伤—等待(Wound-Wait)策略。 if ts(TA)<ts(TB) TA waits; /* wait */ else { rollback TA; /* die */ restart TA with the same ts(TA); } 描述策略之前的假定:设TB已持有某数据对象的锁,现在TA申请同一数据对象的锁。 事务优先级:时间戳越前,事务的优先级越高,也就是说越老的事务,其优先级越高。 (2)等待—死亡(Wait-Die)策略 ① 上规则说明,总是年老的事务等待年轻的事务,故不会循环等待,从而避免死锁。 ② 因年轻而遭回退的事务,由于重启动时仍用以前的ts,故总会变成年老的事务而等待。这样可保证每个事务最终总会由于时间戳早而成为优先级高的事务,从而能获得它所需要的锁。 if ts(TA)ts(TB) TA waits; /* wait */ else { rollback TB; /* wound */ restart TB with the same ts(TB); } 说明: (3)击伤—等待(Wound-Wait)策略 ③ 一个事务一旦获得它所需的所有锁而不再申请锁时,它就不会有被回退的危险。 * * 事务如不加控制地并发执行,会产生如下三个问题。 -丢失更新 (lost update)写-写冲突 -读脏数据 (dirty read)写-读冲突 -读值不可复现 (unrepeatable read)读-写冲突 原因:因两个事务对同一数据并发地写入引起,称写-写冲突(write-write confl

文档评论(0)

1亿VIP精品文档

相关文档