- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
09 第九章 并发控制.ppt
第九章 并发控制 主要内容: 掌握事务的概念、状态、性质; 掌握并发调度的可串行性; 掌握锁及两段锁协议; 掌握死锁的概念、解决方法。 本章内容: 9.1事务 9.2并发控制 9.1 事务9.1.1事务的概念 9.1.2 事务的性质(重点) 事务的ACID性质: (1)原子性(Atomicity):每个事务的所有操作要么被成功地执行,要么一个也不被执行。 (2)一致性(数据库正确保持性) (Consistency):一个事务的正确执行必须数据库从一个正确状态转换为另一个正确的状态。 例如:从帐户A转10000元到帐户B: Update account set 余额=余额-10000 where 帐号=A Update account set 余额=余额+10000 where 帐号=B 如果因为某种原因,只执行了第一条语句,数据库中的数据将出现不正确状态. (3)隔离性(Isolation) ,又称为独立性:多个并发事务之间不能相互干扰;并发不影响事务的执行。 例如:有多个售票窗口同时售火车票(多个并发事务),它们之间互不影响. (4)持续性(操作结果永久保持性) (Durability):事务对数据库的更新必须是永久的;事务一旦提交,则永久改变数据库中的数据。 9.1.3 SQL对事务的支持 事务控制语句(显式事务): 开始事务:Begin transaction 提交事务:Commit transaction 回滚事务:Rollback transaction 隐式事务 如果语句中没有用到begin或commit,每个DML语句都会隐式地构造自己的事务 9.2并发控制9.2.1并发控制的概念 串行事务 一个事务结束,另一个事务才开始。 并行事务 多个事务同时执行: 单处理器:分时并发(交叉并发)。 能够减少处理机的空闲时间,提高系统的效率。 多处理器:每个处理器处理一个事务,同时并行。 9.2.2事务调度与可串行性 9.2.3基于锁的并发控制协议 锁(Locking) ?并发调度的主要技术——封锁。 ?事务对需操作的数据进行加锁,以实现数据的互斥访问。 ?当一个事务访问某个数据项时,其他事务都不能修改该数据项。 ?对数据的访问均必须加锁。 9.1.5锁的粒度 封锁对象的大小,即为锁的粒度: 库级、表级、页面、行级、属性级。 锁粒度与并发度 锁粒度越大(可封锁的数据越大),并发度越小。 锁粒度越小,并发度越大。 多粒度封锁 在一个系统中,同时支持多种粒度,供事务选择。 ?? ? ? LOCK-X(A) 等待 等待 等待 等待… 获得LOCK-X(A) 读A=15 A←A-1 写回A=14 Commit UNLOCK(A) ①? LOCK-X(A) 获得 ②? 读A=16 ? ③A←A-1 写回A=15 Commit UNLOCK(A) ④ ? ? ⑤ ? T2 T1 例:没有丢失修改 ?? ? ? 读A=15 ①?LOCK-X(A) 获得 ②? 读A=16 ? A←A-1 写回A=15 ③ ? ④ Rollback UNLOCK(A) ? T2 T1 例:读“脏”数据 (2)二级封锁协议 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。 事务T在读取数据R前必须先加S锁,读完后即可释放S锁。 ?可以防止丢失修改和读“脏”数据。由于读完数据后即可释放S锁,所以它不能保证可重复读。 ①?LOCK-S(A) 获得 读A=50 UNLOCK(A) ② LOCK-S(B) 获得 读B=100 Unlock (B) ③ 求和=150 LOCK-X(B) 等待 等待 获得 B的X锁 读B=100 B←B*2 写回B=200 Commit Unlock(B) T2 T1 ④LOCK-S(A) 获得 读A=50 Unlock(A) LOCK-S(B) 获得 读B=200 UNLOCK(B) 求和=250 (验算不对) ? ? T2 T1 (续) 例:不可重复读 (3)三级封锁协议 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。 事务T在读取数据R前必须先加S锁,直到事务结束才释放。 ?可以防止丢失修改和读“脏”数据,还防止了不可重复读。 ? ? ? ? ? LOCK-X(B) 等待 等待 等待 等待 等待 等待 等待
文档评论(0)