第十一章 并发控制.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 并发控制 11.1 并发控制 数据库是一个共享资源,可供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。例如:银行数据库系统、机票订票数据库系统等。 并发控制的产生是由于共享的要求,即多个用户程序并发存取同一数据。并发控制单位是事务。 例:考虑飞机订票系统中的一个活动序列: (1) 甲售票点读出某航班的机票余额=16; (2) 乙售票点读出同一航班的机票余额也为16; (3) 甲售票点卖出一张机票,修改余额为15,并把A写回数据库; (4) 乙售票点也卖出一张机票,也修改余额为15,并把A写回数据库。 事务如果不加控制地并发执行,会产生下列三个问题: 丢失修改 (lost update) 读脏数据 (dirty read) 读值不可复现 (unrepeatable read) (3)读 “脏”数据 指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,事务T1由于某种原因被撤消,这时事务T1已修改过的数据恢复原值,事务T2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。 11.2 并行控制的技术——封锁 图11.3 两种锁的相容矩阵 11.3 活锁和死锁 死锁的预防:保证系统永远不进入死锁状态。 预防死锁的方法较多,如: ①一次封锁法:一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。但这样做,扩大封锁范围,降低了并发度。 ②顺序封锁法:顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实现封锁。 死锁的解除 发现死锁后,靠事务本身无法打破死锁,必须由DBMS干预。DBMS对死锁一般作下列处理: 选择一个处理死锁代价最小的事务,将其撤销,释放其持有锁,其他事务继续。 对撤销的事务所执行的数据修改必须加以恢复。 被撤销的事务在另一时间再次启动。 1、SQL Server提供不同级别的物理锁 2、SQL Server锁类型 锁管理器根据事务类型(如select,insert,delete等)来选择锁的类型。 锁管理器使用的各种类型的锁如下: 共享锁(shared):用于读事务(如select语句),可以对行、页和表使用共享锁,允许其他事务读。完成后即释放; 更新锁(update):用于更新操作(如Update、 Delete语句) ,可以对行、页和表使用更新锁。更新锁是先使用共享锁读数据,而后实际修改时升级为独占锁。更新锁同时只能有一个事务拥有。 独占锁(execusive):用于写事务(如Insert、Update、Delete语句),实际修改时使用; 意向锁(intent):说明其下级结点正在被加锁。 模式锁(schema):分为模式静态锁和模式修改锁。当SQL Server禁止修改模式时,使用模式静态锁;实际修改表或索引时,使用模式修改锁。 本章小结 注意:两段锁协议和防止死锁的一次封锁法的异同之处。 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。因此一次封锁法遵守两段锁协议; 但两段锁协议并不是要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务有可能发生死锁。 例:p302 图11.9 课堂练习: 此并发操作出现什么问题?应如何修改? 请求 SLOCK A 读A=18 写回A=18 COMMIT UNLOCK A ①请求 SLOCK A 读A=18 ② ③A=A+10 写回A=28 COMMIT UNLOCK A ④ T2 T1 该操作丢失修改。 该操作的第①步中,事务T1应该申请X锁。 11.6 封锁的粒度 封锁的对象:属性、元组、关系、索引、数据库、物理页、数据块。 封锁粒度越大,并发度越小,系统开销越小。 从用户的角度看,如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁(Multiple Granularity Locking)。 一般情况下,需要处理大量元组的事务可以用关系作为封锁粒度;需要处理多个关系的大量元组的事务可以以数据库作为封锁粒度;一个处理少量元组的事务通常用元组作为封锁粒度。   SQL Server里的锁定动作是自动的,它由一个内部的锁管理器进程实现。锁管理器负责决定锁类型(共享锁,独占锁等)和锁粒度(行,页和表等)。   例如,create index语句会锁定整个表,而update语句会锁定一行或多行或整个表。 行锁(row-level lock):是指锁定一个数据页或索引页中的一行数据。 页锁(page lock):用于锁定一个页(8KB的数据页或索引页信息)。 表锁(table lock):用于锁定包含数据与索引的整个表。用于表级别的锁定。一个表通

文档评论(0)

cxiongxchunj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档