第八章 并发控制_第1页
第八章 并发控制_第2页
第八章 并发控制_第3页
第八章 并发控制_第4页
第八章 并发控制_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

数据库系统概论第八章并发控制章节分配事务的基本概念1并发控制概述2封锁3活锁和死锁4并发调度的可串行化5两段锁协议6掌握事务的四个特性,了解事务和并发控制的关系理解何为并发,掌握并发操作带来的问题掌握并发控制的技术---封锁机制。理解调度的含义以及调度在并发操作中的作用,掌握并发调度的可串行化判断并发操作的理解封锁的理解,可串行化调度的判断。重点难点本章内容并发控制问题的产生

数据库是一个共享资源,可供多个用户或应用程序来使用。这些用户程序可以串行地执行对数据库的存取。

数据库的访问通常是由以下操作完成的.

如果用户程序涉及大量数据的I/O交换,则数据库系统的大部分时间处于闲置状态,为了充分利用数据库资源,允许多个用户并行访问数据库。

数据的读写操作MEMORYDISK数据的读入数据的写出并发操作会带来什么问题呢出现的问题:

会产生用户程序并发存取同一数据的情况,若对并发操作不加控制可能会存取和存储不正确的数据,破会数据库的一致性。解决方法 DBMS必须提供并发控制机制。相关案例

商品的库存数量:在顾客购买该商品期间,其他顾客看到该商品 的数量应是多少呢

如果只有一件商品呢?淘宝网购物:火车订票航空订票银行系统。。。。。。

以上系统都属于多个用户同时使用的数据库系统,当多个用户同时访问时,系统应如何处理呢?类似地:解决上述问题属于数据库并发控制的范围。并发控制的好坏是衡量一个数据库管理系统性能的重要标志之一。DM用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。并发控制是以事务(transaction)为单位进行的。所以应用程序的并行也就是事务的并行。8.1事务的基本概念事务的概念

事务是数据库的逻辑工作单位,它是用户定义的一组操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 一个事务可以是一组SQL语句、一条SQL语句或整个程序。事务的定义事务的特性8.1事务的基本概念事务的定义显示定义BEGINTRANSACTION SQL语句1

SQL语句2

。。。。。

COMMIT或ROLLBACK说明: COMMIT表示提交事务的所有操作(读+更新),即事务中所有对数据库的更新都写到磁盘。事务正常结束。 ROLLBACK表示事务异常终止,事务运行的过程中发生了故障,不能继续执行,撤销事务的所有更新操作,事务滚回到开始时的状态8.1事务的基本概念事务的定义隐式定义 如果用户没有显式地定义事务,则由数据库系统按缺省规定自动划分事务。

8.1事务的基本概念事务的特性原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持续性(Durability)8.1事务的基本概念原子性(Atomicity)原子性保证事务包含的一组更新操作是原子不可分的,也就是说这些操作是一个整体,对数据库而言全做或者全不做,不能部分的完成。8.1事务的基本概念一致性(Consistency)一致性要求事务执行完成后,将数据库从一个一致状态转变到另一个一致状态。一致状态是指数据库中只包含成功事务提交的结果。例如:银行转账从账户A->B转账100保证各个账户金额平衡一致性和原子性是密不可分的。A=A-100B=B+1008.1事务的基本概念隔离性(Isolation)隔离性意味着一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。要求每个成功事务按串行调度执行一样。例如:银行的存取款。看似很简单,在考虑并发的情况下,问题就多了。序号金额帐户余额………………5-700.00

400.00到银行取钱单位发工资①银行读取帐户

余额400元②单位读取帐户

余额400元③单位发工资

2000元

更新帐户余额62000.002400.00④取款100元

更新帐户余额7-100.00

300.00余额错误8.1事务的基本概念持久性(Durability)系统提供的持久性保证要求一旦事务提交,那么对数据库所做的修改将是持久的,无论发生何种机器和系统故障都不应该对其有任何影响。例如,自动柜员机(ATM)在向客户支付一笔钱时,就不用担心丢失客户的取款记录事务的持久性保证事务对数据库的影响是持久的,即使系统崩溃小结事务是数据库的逻辑工作单位,也是并发控制的基本单位,保证事务ACID四个特性是事务处理的重要任务。事务的ACID四个特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。从而带来了数据的不一致性问题。8.2并发控制概述并发控制机制的任务保证事务的隔离性和一致性对并发操作进行正确的调度。并发操作带来的数据不一致包括:丢失修改不可重复读读“脏”数据在单处理机系统中,事务的并行实际上是这些事务轮流交叉运行,称为“交叉并发方式”,事务并未真正并行运行,但是减少了处理机的空闲时间在多处理机系统中,可以实现多个事务真正的并行运行,即“同时并发方式”。事务的并发需要了解的内容8.2并发控制概述—数据不一致性丢失修改(或丢失更新) 两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。

例如:飞机订票系统中,原有16张票,甲乙两售票员分别售出一张票。读A①②③④A=A-1写回A=15机票余额A

读AA=A-1写回A=15事务甲事务乙=16=161516分析: 飞机票数应该剩余14张,但由于事务乙的修改结果覆盖了甲的修改,使剩余票数变为15张。1516不可重复读 不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。 具体分为以下三种情况:(1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。

例如:计算A、B之和,A、B初始值分别为60、100.8.2并发控制概述—数据不一致性15168.2并发控制概述—数据不一致性读A=60读B①②③读A=60读B=B值

读B事务T1事务T2=100=10015100求和=160B=B*2写回B=200200200求和260验算与第一次结果不同!分析:事务T2将修改后的值写回数据库,造成再读取B值与前次不同。不可重复读

(2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失了(3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种不可重复读有时也称为“幻影”现象8.2并发控制概述—数据不一致性编号姓名年龄特长职位1白展堂30葵花点穴手安保2郭芙蓉25排山倒海服务生3李大嘴30烹饪厨子4吕秀才27算术会计5莫小贝10null跑堂读取员工表

21员工表①②③deletefrom员工表Whereage<20读取员工表编号姓名年龄特长职位1白展堂30葵花点穴手安保2郭芙蓉25排山倒海服务生3李大嘴30烹饪厨子4吕秀才27算术会计5莫小贝10null跑堂事务T1事务T2不可重复读

(3)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种不可重读有时也称为“幻影”现象、(3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种不可重复读有时也称为“幻影”现象8.2并发控制概述—数据不一致性读“脏”数据 一个事务读取了另一个未提交的并行事务写的数据。

即:事务T1修改某一数据,并将其写回磁盘事务T2读取同一数据后,T1由于某种原因被撤销这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致T2读到的数据就为“脏”数据,即不正确的数据8.2并发控制概述—数据不一致性回忆事务的结束有两种情况:正常提交commit,异常终止rollback15168.2并发控制概述—数据不一致性读B①②③rollbackB恢复为100B值

读B事务T1事务T2=100=20015100B=B*2写回B=200200分析:事务T2读到的数据已经不存在了,所以读到的是脏数据。数据不一致性:由于并发操作破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性并发控制的主要技术封锁(悲观方法)时间戳乐观控制法目前DBMS一般都采用封锁方法

8.2并发控制概述—小结封锁

锁定系统阻止用户以影响其它用户的方式修改数据。如果用户执行的操作导致应用了某个锁,则直到这个锁的所有者释放该锁,其它用户才能执行与该锁冲突的操作。该方法主要用在数据争夺激烈的环境中,以及出现并发冲突时用锁保护数据的成本比回滚事务的成本低的环境中,因此称该方法为悲观并发控制

时间戳 在乐观并发控制中,用户读数据时不锁定数据。在执行更新时,系统进行检查,查看另一个用户读过数据后是否更改了数据。如果另一个用户更新了数据,将产生一个错误。一般情况下,接收错误信息的用户将回滚事务并重新开始。该方法主要用在数据争夺少的环境内,以及偶尔回滚事务的成本超过读数据时锁定数据的成本的环境内,因此称该方法为乐观并发控制乐观控制法: 时标和封锁技术之间的基本区别是封锁是使一组事务的并发执行(即交叉执行)同步,使用它等价于这些事务的某一串行操作;时标法也是使用一组事务的交叉执行同步,但是使它等价于这些事务的一个特定的串行执行,即由时标的时序所确定的一个执行。如果发生冲突,是通过撤销并重新启动一个事务解决的。事务重新启动,则赋予新的时标各种并发控制方法简介(了解)8.3封锁

什么是封锁: 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

8.3封锁

封锁的三个环节:

即当条件成熟时,系统允许事务对数据进行加锁,从而事务获得数据的控制权事务在操作前要对它将使用的数据提出加锁申请完成操作后事务放弃数据的控制权申请加锁获得锁释放锁8.3封锁

一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。加锁时要约定并执行一些规则和协议,其中包括何时申请锁,保持锁的时间以及何时释放,这些规则就是封锁协议。

8.3封锁

基本封锁类型:

排他锁(ExclusiveLocks,简称X锁)

共享锁(ShareLocks,简称S锁)

数据对象ATT’读A修改A读A修改A数据对象ATT’读A修改A读A修改A8.3封锁

三级封锁协议(解决数据的不一致性):

三级封锁协议二级封锁协议一级封锁协议防止丢失更新防止读脏数据保证可重复读8.3封锁

一级封锁协议: 事务T在修改数据R之前必须先对其加X锁,直到事务结束(commit或rollback)才释放。 例如:飞机订票系统

读A①②③④A=A-1写回A=15机票余数A

读AA=A-1写回A=15事务甲事务乙=16=1615168.3封锁

在事务甲对A修改之前加排他锁。

读A①②③④A=A-1写回A=15机票余数A

读AA=A-1写回A=14事务甲事务乙=16=151516Xlock(A)Xlock(A)Wait..Unlock(A)Xlock(A)14Unlock(A)8.3封锁

二级封锁协议: 在一级封锁协议基础上加上事务T在读取数据之前必须先对其加S锁,读完后即释放S锁。

1516读B①②③rollbackB恢复为100B值

读B事务T1事务T2=100=200100B=B*2写回B=200200读到了脏数据8.3封锁

修改数据之前加X锁,读数据之前加S锁

1516读B①②③④rollbackB恢复为100B值

读B事务T1事务T2=100=100100B=B*2写回B=200200Xlock(B)Slock(B)Wait…Unlock(B)Slock(B)Unlock(B)8.3封锁

三级封锁协议:

1级封锁协议加上事务T在读取数据之前必须先对其加S锁,直到事务结束才释放。

1516读A=60读B①②③读A=60读B=B值

读B事务T1事务T2=100=10015100求和=160B=B*2写回B=200200200求和260验算与第一次结果不同!8.3封锁

1516读A=60读B①②③④读A=60读B=B值

读B事务T1事务T2=100=100100求和=160B=B*2写回B=200200100求和160Slock(B)Xlock(B)Wait…Unlock(B)Xlock(B)Unlock(B)8.3封锁

三级封锁协议:

防止丢失更新和不脏读数据外,还进一步防止了不可重复读和幻想读

8.3封锁

封锁协议小结:

X锁S锁一致性保证操作结束释放事务结束释放操作结束释放事务结束释放不丢失更新不脏读可重复读1级封锁协议√√2级封锁协议√√√√3级封锁协议√√√√√序号金额帐户余额………………5-700.00

400.00到银行取钱单位发工资①银行读取帐户

余额400元②单位读取帐户

余额400元③单位发工资

2000元

更新帐户余额62000.002400.00④取款100元

更新帐户余额7-100.00

300.00余额错误案例分析:某银行的存取款并发问题序号金额帐户余额………………5-700.00

400.00到银行取钱单位发工资①银行读取帐户

余额400元④单位读取帐户

余额300元⑤单位发工资

2000元

更新帐户余额72000.002300.00③取款100元

更新帐户余额6-100.00

300.00余额正确xx②等待…等待…等待…x丢失更新问题---采用一级封锁协议除了并发问题,还有其他问题如何读取帐户余额?

SELECTTOP1帐户余额 FROM帐户明细 ORDERBY序号DESC存在的问题:在并发场景下你怎么确定它一定是最后一行?随着数据量增大越来越没效率(因为需要排序)帐号户名帐户余额帐号序号金额帐户余额0001张三¥400.0000011¥1,000.00¥1,000.0000012¥-500.00¥500.0000013¥200.00¥700.0000014¥400.00¥1,100.0000015¥-700.00¥400.00AccountAccountDetail冗余数据该数据库账户需要设计两张表为什么引入冗余数据?确保帐户余额在唯一的地方进行存储避免了读取帐户余额时访问大量数据并排序新问题:我们无法直接对数据库进行锁操作必须通过合理的事务隔离级别完成并发控制8.4并发操作的调度调度的正确性

事务串行调度的结果是正确的。 对于并发的事务而言,如果执行结果等价于串行调度,那么这样的调度是正确的。

1516读A=60读B①②③④读A=60读B=B值

读B事务T1事务T2=100=100100求和=160B=B*2写回B=200200100求和160Slock(B)Xlock(B)Wait…Unlock(B)Xlock(B)Unlock(B)封锁保证并发调度等价于串行调度8.4并发操作的调度—可串行化调度可串行化调度

多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化调度。举例:现在有两个事务,分别包含以下操作:事务1:读B;A=B+1;写回A;(A和B的初值都为2)事务2:读A;B=A+1;写回B;读B=2A=B+1写回A=3

读A=3B=A+1

写回B=4 读A=2B=A+1

写回B=3读B=3A=B+1写回A=4

串行调度1串行调度2√√请看如下两个并发的调度

读B=2

读A=2A=B+1写回A=3B=A+1

写回B=3Slcok(B)读B=2Unlock(B)Xlock(A)slock(A) wait……A=B+1写回A=3Unlock(A)

读A=3Unlock(A)Xlock(B)

B=A+1

写回B=4Unlock(B)T1T2T3T4×√不可串行化的调度可串行化的调度可串行化调度小结可串行化是并发事务是正确调度的准则。一个给定的并发调度,当且仅当它是可串行化的,才认为是正确的调度。

DBMS的并发控制机制目的避免数据的不一致并发操作的正确性并发调度的可串行化封锁技术实现8.4并发操作的调度—冲突可串行化调度判断一个并行调度是可串行化调度的条件是什么? Read(A);A←A+100;Write(A);Read(B);B←B+100;Write(B);Read(A);A←A×2;Write(A);Read(B);B←B×2;Write(B);AB3030130130260260串行调度1T1T2OKRead(A);A←A+100;Write(A);Read(B);B←B×2;Write(B);AB3030130130260260并行调度2T1T2OKRead(A);A←A×2;Write(A);Read(B);B←B+100;Write(B);→可串行化调度从以上例子可以得出: 如果一个并行调度可以通过交换事务的操作而得到一个串行调度,那么这个并行调度的结果就是正确的。

※在交换操作的时候是有条件的,即不冲突的操作才可交换冲突操作:冲突操作是指不同的事务对同一个数据的读写操作和写写操作:Ri(x)与Wj(x)/*事务Ti读x,Tj写x*/Wi(x)与Wj(x)/*事

温馨提示

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

评论

0/150

提交评论