数据库并发控制精选课件_第1页
数据库并发控制精选课件_第2页
数据库并发控制精选课件_第3页
数据库并发控制精选课件_第4页
数据库并发控制精选课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、数据库并发控制技术数据库并发控制技术10:00,A订票点读出航班目前的机票余额数,设为10张10:02,B订票点读出航班目前的机票余额数,也为10张10:05,A订票点订出6张机票,修改机票余额为10-6=4,并将4写回到数据库中10:06,B订票点订出5张机票,修改机票余额为10-5=5,并将5写回到数据库中10:00,A订票点读出航班目前的机票余额数,设为10张事务事务是数据库处理的一个逻辑工作单元,它由用户定义的一个或多个访问数据库的操作组成,这些操作一般一般包括检索(读)、插入(写)、删除和修改数据。一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。如果事务中的数据库操

2、作仅涉及数据的检索,而不更新数据库,那么这样的事务就称为只读事务;否则,称为读写事务。事务事务是数据库处理的一个逻辑工作单元,它由用户定义的一个或描述事务处理概念的数据库模型一条数据库记录整个磁盘块某个记录的字段(属性)值数据项的粒度-数据项的大小-命名数据项的集合描述事务处理概念的数据库模型一条数据库记录数据项的粒度-数据库访问操作Read_item(X):将数据库项X读取到程序变量Write_item(X):将程序变量的值写入数据库项X中数据库访问操作Read_item(X):将数据库项X读取到程两个事务的示例T1read_item(X);X:=X-N;Write_item(X);Read

3、_item(Y);Y:=Y-N;Write_item(Y)T2Read_item(X);X:=X+M;Write_item(X)两个事务的示例T1T2事务的特性原子性一致性隔离性持久性事务的特性原子性事务状态和附加操作BEGIN_TRANSACTIONREAD或WRITEEND_TRANSACTIONCOMMIT_TRANSACTIONROLLBACK(ABORT)事务状态和附加操作BEGIN_TRANSACTION活动开始事务结束事务部分提交提交部分提交失败撤销终止读、写撤销事务执行状态的状态转换图活动开始事务结束事务部分提交提交部分提交失败撤销终止读、写撤调度n个事务T1,T2,TN的调度

4、S,是这些事务的操作的一个执行顺序。来自不同事务的操作可以在调度S中交替执行。但是,对于参与调度S的事务Ti,Ti出现在调度中S中的操作,必须与它们在Ti中出现的顺序一致,也就是说S中的操作必须是全序的。调度n个事务T1,T2,TN的调度S,是这些事务的操作的操作冲突的条件属于不同的事务访问同一数据项至少有一个操作是write_item(X)操作冲突的条件属于不同的事务并发控制的概念数据库中的数据是可以共享的资源,因此会有很多用户同时使用数据库中的数据。也就是说,在多用户系统中,可能同时运行着多个事务,而事务的运行需要时间,并且事务中的操作需要在一定的数据上完成。当系统中同时有多个事务运行时,

5、特别是当这些事务使用同一段数据时,彼此之间就有可能产生相互干扰。并发控制通过对并发操作进行正确的调度保证事务的ACID特性。并发控制的概念数据库中的数据是可以共享的资源,因此会有很多用并发控制的必要性更新丢失暂时更新(脏读)错误求和不可重复读并发控制的必要性更新丢失项X的值是错误的,因为T1对它的更新丢失了项X的值是错误的,事务T1因故障而必须将X值改变回其旧值,但T2已经读取了X的错误值事务T1因故障而必须将X值T3在X减去N之后读X,而在Y加N之前读Y;因此产生了错误的求和结果T3在X减去N之后读X,而并发控制的加锁技术二进制锁共享/排他锁(读/写锁)并发控制的加锁技术二进制锁二进制锁一个

6、二进制锁可以有两个状态或值:已加锁和未加锁(或简化记为1和0)。每个数据项X都与一个不同的锁相关联。Lock_item(X)unlock_item(X)二进制锁一个二进制锁可以有两个状态或值:已加锁和未加锁(图二进制锁的加锁和解锁操作图二进制锁的加锁和解锁操作二进制锁的实现二进制变量LOCK关联于数据库中的每个数据项X包含三个字段的记录队列存放等待访问该项的事务系统维护锁表,仅存放当前已加锁的数据项的相应记录二进制锁的实现二进制变量LOCK关联于数据库中的每个数据项X规则事务T在执行其任何read_item(X)或write_item(X)操作之前,必须先发出一个lock_item(X)操作事

7、务T中所有read_item(X)和write_item(X)操作执行完之后,都必须发出一个unlock_item(X)操作规则事务T在执行其任何read_item(X)或write_共享/排他(读/写)锁Read_lock(X)Write_lock(X)解锁(释放):Unlock(X)共享/排他(读/写)锁Read_lock(X)图共享/排他的加锁和解锁操作图共享/排他的加锁和解锁操作共享/排他锁的实现包含四个字段的记录变量LOCK关联于数据库中的每个数据项X,存放读锁定/写锁定/未锁定相应的编码Locking_transaction中存放持有锁的一个事务或列表No_of_reads中存放当

8、前对该数据项进行读操作的事务数量队列存放等待访问该项的事务系统维护锁表,仅存放当前已加锁的数据项的相应记录共享/排他锁的实现包含四个字段的记录规则事务T在执行其任何read_item(X)操作之前,必须先发出read_lock(X)或write_lock(X)操作事务T在执行其任何write_item(X)操作之前,必须先发出write_lock(X)操作事务T中所有read_item(X)和write_item(X)操作执行完之后,都必须发出unlock(X)操作规则事务T在执行其任何read_item(X)操作之前,必须死锁事务T1对数据R1封锁之后,又要求对数据R2封锁而事务T2已经获得

9、对数据R2的封锁之后,又要求对数据R1封锁这两个事务处于互相等待状态,发生死锁事务T1时间事务T21。对R1加锁t12。t2对R2加锁3。请求对R2加锁t3等待4。等待t4请求对R1加锁等待等待死锁事务T1对数据R1封锁之后,又要求对数据R2封锁事务T1死锁的诊断 方法一.等待图法数据库周期性地生成事务等待关系有向图,若图中存在有向回路,则表明产生死锁,如:死锁的诊断 方法一.等待图法方法二.超时法 若一个事务的等待时间超过了规定的时限,则系统认为产生了死锁缺点: 规定时限设置过短,则容易误判; 设置过长,则不能及时处理死锁。方法二.超时法 若一个事务的等待时间超过了规定的时限,破除死锁方法

10、某些事务必须回滚以破除死锁,一般选择回滚 带来代价最小的事务,释放该事务所持有的全部锁,并撤销其对数据的修改操作。破除死锁方法 某些事务必须回滚以破除死锁,一般选择回滚 死锁的预防方法一. 一次性封锁法 每个事务执行时,一次性对其要使用到的数据项全部加锁,否则不能继续执行(缺一不可,只要有一个锁不能加锁,则释放已经加好的锁,继续等待)例子: 如果T1将R1和R2一次性全部加锁, 则T2要加锁时只能等待直到T1释放锁 事务T1时间事务T21。对R1加锁t12。t2对R2加锁3。请求对R2加锁t3等待4。等待t4请求对R1加锁等待等待死锁的预防方法一. 一次性封锁法例子:事务T1时间事务T21方法

11、二.顺序加锁法预先对数据项规定一个加锁排序,所以加锁操作都要按顺序,释放锁时按照逆序例子: 如果规定加锁顺序先R1再R2, 则T2要对R2加锁之前,需要先对R1加锁,即T2需要等待T1先释放R2再释放R1事务T1时间事务T21。对R1加锁t12。t2对R2加锁3。请求对R2加锁t3等待4。等待t4请求对R1加锁等待等待方法二.顺序加锁法预先对数据项规定一个加锁排序,所以加锁操作时间戳方法基于时间戳排序的并发控制时间戳方法基于时间戳排序的并发控制时间戳概念每个事物开始执行时,系统会给“他/她”分配一个时间戳,通常是基于系统时钟的。越晚启动的事务其时间戳数值越大。每个数据库项 X 也有2个时间戳:

12、读和写: read_TS(X) = TS(T最晚读),即T最晚读为成功读取X的最晚的事务; write_TS(X) = TS(T最晚写),即T最晚写为成功写入X的最晚的事务;时间戳概念每个事物开始执行时,系统会给“他/她”分配一个时间时间戳排序(1)写:当事物T1发出write_item(X)操作,需检查: a.若read_TS(X) TS(T1), 或者write_TS(X) TS(T1), 则拒绝write操作,撤销并回滚T1, 原因:这说明某个时间戳大于T1的事物T2(比T1晚启动),在T1要写X之前,T2已经读或写了X的数据; 时间戳排序(1)写: 如果是T2先写,则T1的写操作将覆盖

13、了较晚启动的T2的写操作,即T2写操作无效 无效 如果是T2先写,则T1的写操作将覆盖了较晚启动的T2的写 如果是T2先读,则T2读的是未经T1修改写入的数据,但实际上较晚启动的T2读的应该是T1修改后的数据。 对: 错: X未经T1修改 如果是T2先读,则T2读的是未经T1修改写入的数据,但实以上都违反了时间戳顺序。b.若以上(a)中的条件没有发生,则执行T1的写操作,并将write_TS(X)的值设置为TS(T1).以上都违反了时间戳顺序。(2)读:当事务T1发出read_item(X)操作,需检查: a.若write_TS(X) TS(T1),则拒绝read操作,撤销并回滚T1,(2)读

14、:原因:说明在T1要读X之前,比T1晚启动的T2已经修改了X的数据,所以X已经不再是T1启动时的数据值了。 对: 错:X被T2修改X被T2修改 b. 若(a)中的条件没有发生,则执行T1的读操作, 并将read_TS(X)的值设置为TS(T1)和当前的read_TS(X) 中的最大值。 这是因为在T1读X前后,其他事务(如T2)都可以读X。 b. 若(a)中的条件没有发生,则执行T1的读操作,乐观 的并发控制方法提取和修改检验提交和写回乐观 的并发控制方法提取和修改事务T将数据X从数据库中提取出来,保存在临时副本中事务T对数据X所做的所有修改都保存在临时副本中提取和修改事务T将数据X从数据库中提取出来,保存在临时

温馨提示

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

最新文档

评论

0/150

提交评论