基于封锁的事务并发控制概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于封锁的事务并发控制概述
发表时间:2010-05-14T10:46:24.013Z 来源:《计算机光盘软件与应用》2010年第4期供稿作者:卢成浪,徐湖鹏
[导读] 叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。
卢成浪,徐湖鹏
(温州大学瓯江学院,温州 325035)
摘要:叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。详细介绍了事务的串行化调度方法中的锁技术和锁
协议,并深入讨论了锁的管理、死锁处理、幻影问题和其它加锁过程中可能出现的一些问题。
关键词:数据库管理系统;事务;并发控制;封锁
中图分类号:TP311.131 文献标识码:A 文章编号:1007-9599 (2010) 04-0000-03
Lock-Based Transaction Concurrency Control Overview
Lu Chenglang,Xu Hupeng
(Wenzhou University,Oujiang College,Wenzhou 325035,China)
Abstract:An overview on the management of lock-
based concurrency control of transactions is presented in this paper.The locking protocols and locking techniques of the locking are discussed in depth.
Keywords:Database management systems;Transaction;Concurrency control;Lock
一、引言
事务是用户定义的一组数据库操作序列。事务的执行结果将使数据库从一个一致性状态转变到另一个一致性状态。为了提高吞吐量,
系统中常常是多个事务并发执行。这会产生多个事务同时存取同一数据的情况,从而破坏数据库的一致性。所以数据库管理系统
(Database Management System,DBMS)必须提供并发控制机制,使得并发的事务在冲突的时候被串行化执行。这种调度称为可串行化
调度。其中基于封锁的并发控制机制是一种被广泛应用于商业DBMS中的并发控制机制。
二、事务的特性和并发的数据不一致性
事务具有ACID特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持续性(Durability)。原子性指:事
务包含的所有操作要么全部被执行,要么都不被执行;一致性指:事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状
态;隔离性指:在事务被提交以前,其操作结果对于其他事务不可见;持续性指:一旦事务成功提交,其对数据库中数据的改变是永久
的。事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务。然而,事务的并发执行可能会破坏事务的ACID特性,而导
致数据的不一致性:
(一)Write-Write冲突,丢失更新。它是由于事务之间的写冲突造成的。两个事务T1和T2同时读入同一数据并修改,T2的提交破坏
了T1的提交结果,导致T1的修改丢失。
(二)Read-Write冲突,也称不一致读。不一致读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。它
包括三种情况:1.T1读取某一数据后, T2对其做了修改,当T1再次读取该数据时,得到与前一次不同的值;2.T1按一定的条件从数据库
中读取了某些记录后,T2删除其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘的消失了;3.T1按一定的条件从数据库
中读取了某些记录后,T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种情况也称幻影现象。
(三)Write-Read冲突,也称读脏数据。读脏数据指事务T1修改某数据,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已
修改过的数据恢复原值,T2读到的数据就与数据中的数据不一致,则称T2读到的数据就为脏数据。
三、基于封锁的事务并发控制机制
(一)锁的类型
封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表,记录等操作之前,先向系统发出请求,对
其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它之前,其他事务不能更新该数据对象。下面介绍DBMS涉及的锁:
1.互斥锁(Exclusive Lock):用于写操作,又称写锁或者排他锁,记做X锁。若事务T对数据对象A加上X锁,则只允许T读写A,其他
事务都不能对A加任何锁,直到T释放A上的锁。
2.共享锁(Shared Lock):用于读操作,又称读锁,记做S锁。若事务T对数据对象A加上S锁,则T可读A但不能写A,其他事务只能对
A加S锁,而不能加X锁,直到T释放锁。
3.更新锁(Update Lock):用于更新操作。等价于先加共享锁,在真正执行更新操作时,将共享锁升级为互斥锁。大部分DMBS 都
不使用这种锁。
4.增量锁(Increment Lock):用于增量操作,如果一个对象被上了增量锁,除增量操作以外任何读写操作都是被禁止的。即增量锁
之间不排斥。因同时对某一对象的数值进行加一或者减一操作时,其结果与操作先后顺序是无关的,可以交换。这种锁使用并不广泛。
5.意向锁(Intention Lock):它是因为引入多粒度对象而产生的,又可
细分为:意向共享锁,意向排他锁和共享意向排他锁。
在DBMS 中被广泛使用的是共享锁,互斥锁和意向锁。为了保证写操作的互
斥性,不同事务对同一数据对象加锁时需要进行冲突检测。检测可以借助锁的相
容矩阵来判断,如图1(a)所示。从中可以发现5种锁的强度偏序关系,如图1
(b)所示。
(二)加锁管理和锁转换
DBMS中处理事务加锁事宜的部分被称为锁管理器。锁管理器维护着一个锁
表,这是一个以数据对象标志为码的哈希表。DBMS也在事务表中维护着每个事务的描述信息项,该记录中包含一个指向事务拥有的锁列表
的指针。在请求锁之前要检查这个列表,以确定不会对同一个锁请求两次。
加锁表中的每一项针对某个数据对象(可以是一页,一条记录等等),它包括下面的信息:拥有数据对象锁的事务数目,锁的属性
(共享锁、互斥锁等)和一个指向加锁请求队列的指针。