数据库并发讲解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库并发讲解

并发控制;问题的产生;问题的产生(续);问题的产生(续);问题的产生(续);问题的产生(续);问题的产生(续);事务执行示例 ; read(A); A := A ? 50; write(A); read(B); B := B + 50; write(B);; read(A); A := A ? 50; write(A); read(B); B := B + 50; write(B);; read(A); A := A ? 50; write(A);; read(A); A := A ? 50; ; 并发控制; 并发控制概述;并发控制概述;;;;;;;并发控制概述(续);并发控制概述(续); 并发控制;封锁;什么是封锁;基本封锁类型;排它锁;共享锁;锁模式 ;锁的相容矩阵;当用SELECT语句访问数据库时,系统能自动用共享锁访问数据; 在使用INSERT、UPDATE和DELETE语句增加、修改和删除数据时,系统会自动给使用数据加排它锁。 设table1(A,B,C) A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 ;1)排它锁 新建两个连接 在第一个连接中执行以下语句 begin tran update table1 set A=aa where B=b2 waitfor delay 00:00:30 --等待30秒 commit tran 在第二个连接中执行以下语句 begin tran select * from table1 where B=b2 commit tran 若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒 ;2)共享锁 在第一个连接中执行以下语句 begin tran select * from table1 holdlock –——holdlock:SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。 where B=‘b2’ waitfor delay ‘00:00:30’ --等待30秒 commit tran 在第二个连接中执行以下语句 begin tran select A,C from table1 where B=‘b2’ update table1 set A=‘aa’ where B=‘b2’ commit tran 若同时执行上述两个语句,则第二个连接中的select查询可以执行 而update必须等待第一个事务释放共享锁后才能执行 即要等待30秒 ;使用封锁机制解决丢失修改问题;使用封锁机制解决不可重复读问题;使用封锁机制解决读“脏”数据问题; 并发控制;活锁和死锁;活锁;活锁(续);活锁(续);死锁;死锁(续);解决死锁的方法;1. 死锁的预防;死锁的预防(续);(1)一次封锁法;(2)顺序封锁法;死锁的预防(续);2. 死锁的诊断与解除;(1) 超时法;(2)等待图法;等待图法(续);等待图法(续);死锁的诊断与解除(续); 并发控制;封锁协议;1级封锁协议; 2级封锁协议; 3级封锁协议;说明: 应用程序一般不直接请求锁。 锁由数据库引擎?的一个部件(称为“锁管理器”)在内部管理。当数据库引擎?实例处理 Transact-SQL 语句时,数据库引擎查询处理器会决定将要访问哪些资源。查询处理器根据访问类型和事务隔离级别设置来确定保护每一资源所需的锁的类型。 查询处理器将向锁管理器请求适当的锁。如果与其他事务所持有的锁不会发生冲突,锁管理器将授予该锁。;隔离等级:一个事务必须与其它事务进行隔离的程度。 较低的隔离级别可以增加并发,但代价是降低数据的正确性。 相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。 事务指定一个隔离级别,该隔离级别定义一个事务必须与由其他事务进行的资源或数据更改相隔离的程度。隔离级别从允许的并发副作用(例如,脏读或幻读)的角度进行描述。 应用程序要求的隔离等级确定了SQL Server使用的锁定行为。;通过以下隔离等级约束锁: READ UNCOMMITTED(未提交读) 隔离事务的最低级别,指定事务可以读取已由其他事务修改但尚未提交的行。 在 READ UNCOMMITTED 级别运行的事务,数据读取时不需要锁定。 设置此选项之后,可以读取未提交的修改,这

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档