并发控制讲解_第1页
并发控制讲解_第2页
并发控制讲解_第3页
并发控制讲解_第4页
并发控制讲解_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1并发控制讲解问题的产生

多事务执行方式串行执行T1T2T3交叉并发执行第1页/共40页问题的产生

事务并发执行带来的问题会产生多个事务同时存取同一数据的情况可能会存取和存储不正确的数据,破坏事务和数据库的一致性。第2页/共40页

并发控制

并发控制概述封锁两段锁协议封锁的粒度

SQLServer的并发控制小结第3页/共40页T1的修改被T2覆盖了!并发控制概述并发操作带来数据的不一致性实例示例:飞机订票系统中的一个活动序列①甲售票点(甲事务)读出某航班的机票余额A,设A=16;②乙售票点(乙事务)读出同一航班的机票余额A,也为16;③甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库;④乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库结果:卖出两张机票,数据库中机票余额只减少1第4页/共40页并发控制概述这种情况称为数据库的不一致性,是由并发操作引起的。在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。若按上面的调度序列执行,甲事务的修改就被丢失。原因:第4步中乙事务修改A并写回后覆盖了甲事务的修改第5页/共40页并发控制概述

并发操作带来的数据不一致性丢失修改(LostUpdate)两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。上面飞机订票例子就属此类不可重复读(Non-repeatableRead)事务T1读取数据后,事务T2执行更新、删除或插入操作,使T1无法再现前一次读取结果。其中,由执行删除或插入操作引起的不可重复读现象也成为“幻象读”。第6页/共40页并发控制概述

并发操作带来的数据不一致性读“脏”数据(DirtyRead)事务T1修改某一数据,并将其写回磁盘事务T2读取同一数据后,T1由于某种原因被撤销这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致T2读到的数据就为“脏”数据,即不正确的数据第7页/共40页并发控制概述

并发控制并发控制就是要用正确的方式调度并发操作,避免造成数据的不一致性,使用一个事务的执行不受其他事务的干扰。并发控制机制的任务对并发操作进行正确调度保证事务的隔离性保证数据库的一致性第8页/共40页并发控制概述

并发控制的主要技术封锁(Locking)时间戳(Timestamp)乐观控制法

在SQLServer中,并发控制是通过锁来实现的。第9页/共40页

并发控制

并发控制概述

封锁两段锁协议封锁的粒度

SQLServer的并发控制小结第10页/共40页封锁

什么是封锁?事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。在事务T释放它的锁之前,其它的事务不能更新此数据对象。第11页/共40页封锁

基本封锁类型排它锁(又称为写锁,简记为X锁)若事务T对数据对象A加上X锁,则:在T释放A上的锁之前,只允许T读取和修改A,其他事务不能读取和修改A。共享锁(又称为读锁,简记为S锁)若事务T对数据对象A加上S锁,则:在T释放A上的S锁之前,其他事务可以读A,但不能对A做修改。第12页/共40页

并发控制

并发控制概述封锁

两段锁协议封锁的粒度

SQLServer的并发控制小结第13页/共40页两段锁协议

DBMS对并发事务不同的调度可能会产生不同的结果,什么样的调度是正确的?可串行化调度多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。可串行性是并发事务正确调度的准则一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度第14页/共40页两段锁协议封锁协议

运用封锁方法时,对数据对象加锁时需要约定一些规则何时申请封锁持锁时间何时释放封锁等

两段封锁协议(Two-PhaseLocking,简称2PL)

是最常用的一种封锁协议,用于保证事务的可串行性调度。第15页/共40页两段锁协议

两段锁协议指所有事务必须分两个阶段对数据项加锁和解锁

在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁在释放一个封锁之后,事务不再申请和获得任何其他封锁第16页/共40页两段锁协议“两段”锁的含义事务分为两个阶段第一阶段是获得封锁,也称为扩展阶段事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁第二阶段是释放封锁,也称为收缩阶段事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁第17页/共40页两段锁协议例:事务Ti遵守两段锁协议,其封锁序列是:SlockASlockBXlockCUnlockBUnlockAUnlockC;|← 扩展阶段 →| |← 收缩阶段→|事务Tj不遵守两段锁协议,其封锁序列是:

SlockAUnlockASlockBXlockCUnlockCUnlockB;第18页/共40页两段锁协议

事务遵守两段锁协议是并发事务正确调度的充分条件,而不是必要条件。若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是正确的;若并发事务的一个调度是正确的,不一定所有事务都符合两段锁协议第19页/共40页

并发控制

并发控制概述封锁两段锁协议

封锁的粒度

SQLServer的并发控制小结第20页/共40页封锁粒度

封锁对象的大小称为封锁粒度(Granularity)

封锁的对象:逻辑单元,物理单元例:在关系数据库中,封锁对象:逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等物理单元:页(数据页或索引页)、物理记录等第21页/共40页封锁粒度

封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;封锁的粒度越小,并发度较高,但系统开销也就越大第22页/共40页封锁粒度示例:若封锁粒度是数据页,事务T1需要修改元组L1,则T1必须对包含L1的整个数据页A加锁。如果T1对A加锁后事务T2要修改A中元组L2,则T2被迫等待,直到T1释放A。如果封锁粒度是元组,则T1和T2可以同时对L1和L2加锁,不需要互相等待,提高了系统的并行度。又如,事务T需要读取整个表,若封锁粒度是元组,T必须对表中的每一个元组加锁,开销极大第23页/共40页封锁粒度选择封锁粒度同时考虑封锁开销和并发度两个因素,适当选择封锁粒度需要处理多个关系的大量元组的用户事务:以数据库为封锁单位需要处理大量元组的用户事务:以关系为封锁单元只处理少量元组的用户事务:以元组为封锁单位第24页/共40页

并发控制

并发控制概述封锁两段锁协议封锁的粒度

SQLServer的并发控制小结第25页/共40页

事务的隔离级别“锁”保证了并发事务执行的隔离性,但在在一些实际应用中,并不要求事务具有完全的隔离性,可以允许一些“脏读”、“幻象读”等的情况存在。可设置事务的隔离级别,用于描述一个事务必须与其他事务所进行的资源或数据更改相隔离的程度。SQLServer的并发控制第26页/共40页

事务的隔离级别

SQLServer2005支持的隔离级别(从最低到最高)如下:未提交读(READUNCOMMITTED)。已提交读(READCOMMITTED)。可重复读(REPEATEABLEREAD)。可序列化(可串行化)(SERIALIZABLE)。随着隔离级别的提高,可以更有效地防止数据的不一致性。但是,这将降低事务的并发处理能力,会影响多用户访问。SQLServer的并发控制第27页/共40页SQLServer的并发控制

事务的隔离级别隔离级别脏读不可重复读幻读未提交读是是是已提交读否是是可重复读否否是可串行读否否否第28页/共40页

事务的隔离级别

隔离级别可以通过编程方式进行设置,也可以通过使用SQL语法设置:

SETTRANSACTIONISOLATIONLEVEL

{READUNCOMMITTED|READCOMMITTED|

REPEATABLEREAD|SERIALIZABLE}SQLServer的并发控制第29页/共40页

锁的管理在SQLServer2005中,“锁”由数据库引擎在内部进行管理。根据用户采取的操作,会自动获取和释放锁。当事务开始并在事务内执行命令时,SQLServer2005会锁定任何所需的资源以帮助保护所需隔离级别的资源。默认情况下,行级锁定用于数据页,页级锁定用于索引页。当超过行锁数的可配置阈值时,锁管理器将自动执行锁升级。SQLServer的并发控制第30页/共40页SQLServer支持的锁类型锁类型说明共享(S)保护资源,以便只能对其进行读取访问。当资源上存在共享(S)锁时,其他事务均不能修改数据。排他(X)指示数据修改,例如插入、更新或删除。确保不能同时对同一资源进行多个更新。更新(U)防止常见形式的死锁。每次只有一个事务可以获得资源上的U锁。如果事务修改资源,则U锁将转换为X锁。架构在执行依赖于表架构的操作时使用。架构锁的类型:架构修改(Sch-M)和架构稳定性(Sch-S)。意向建立锁层次结构。最常见的意向锁类型是IS、IU和IX。这些锁指示事务正在处理层次结构中较低级别的某些资源,而不是所有资源。较低级别的资源将具有S、U或X锁。SQLServer的并发控制第31页/共40页

可以锁定的资源SQLServer的并发控制锁说明RID行标识符,用于锁定表内的单个行。KEY索引中的行锁。用于保护可串行事务中的键范围。PAG一个8K的数据页或索引页。TAB整个表,包括所有数据和索引。DB数据库。第32页/共40页

显示锁定信息查看锁信息可以通过系统视图sys.dm_tran_locks进行查看。例如(1)先执行以下语句SQLServer的并发控制USE教学成绩管理数据库GOBEGINTRANSACTIONSELECT学号,姓名FROM学生信息表WHERE班级编号='200301'INSERTINTO学生信息表(学号,姓名,性别)VALUES('110099','黄丽','女')UPDATE学生信息表SET姓名='黄丽丽'WHERE学号='110099'DELETE学生信息表WHERE学号='110099'第33页/共40页

显示锁定信息(2)执行以下SELECT语句来获取锁信息。(3)执行COMMITTRANSCATION语句来提交事务。SQLServer的并发控制SELECTresource_type,resource_associated_entity_id,request_status,request_mode,request_session_id,resource_descriptionFROMsys.dm_tran_locksWHEREresource_database_id=DB_ID(‘教学成绩管理数据库');第34页/共40页

显示锁定信息SQLServer的并发控制查询结果显示,事务执行过程中,数据操作的数据库上存在一个共享锁(request_mode=S),聚集索引的一个键上,存在一个排他锁(X),在其相应的表和页上分别存在一个意向排他锁(IX)。第35页/共40页

并发控制

并发控制概述封锁两段锁协议封锁的粒度

SQLServer的并发控制

小结第36页/共40页小结数据共享与数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论