当前位置:文档之家› DB2和 Oracle的并发控制(锁)比较

DB2和 Oracle的并发控制(锁)比较

DB2和 Oracle的并发控制(锁)比较
DB2和 Oracle的并发控制(锁)比较

1引言

在关系数据库(DB2,Oracle,Sybase,Informix和SQLServer)最小的恢复和交易单位为一个事务(Transactions),事务具有ACID(原子性,一致性,隔离性和永久性)特征。关系数据库为了确保并发用户在存取同一数据库对象时的正确性(即无丢失更新、可重复读、不读"脏"数据,无"幻像"读),数据库中引入了并发(锁)机制。基本的锁类型有两种:排它锁(Exclusivelocks记为X锁)和共享锁(Share locks 记为S锁)。

排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。

共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。

2 DB2多粒度封锁机制介绍

2.1锁的对象

DB2支持对表空间、表、行和索引加锁(大型机上的数据库还可以支持对数据页加锁)来保证数据库的并发完整性。不过在考虑用户应用程序的并发性的问题上,通常并不检查用于表空间和索引的锁。该类问题分析的焦点在于表锁和行锁。

2.2锁的策略

DB2可以只对表进行加锁,也可以对表和表中的行进行加锁。如果只对表进行加锁,则表中所有的行都受到同等程度的影响。如果加锁的范围针对于表及下属的行,则在对表加锁后,相应的数据行上还要加锁。究竟应用程序是对表加行锁还是同时加表锁和行锁,是由应用程序执行的命令和系统的隔离级别确定。

2.2.1 DB2表锁的模式

DB2在表一级加锁可以使用以下加锁方式:

表一:DB2数据库表锁的模式

下面对几种表锁的模式进一步加以阐述:

IS、IX、SIX方式用于表一级并需要行锁配合,他们可以阻止其他应用程序对该表加上排它锁。

如果一个应用程序获得某表的IS锁,该应用程序可获得某一行上的S锁,用于只读操作,同时其他应用程序也可以读取该行,或是对表中的其他行进行更改。

?如果一个应用程序获得某表的IX锁,该应用程序可获得某一行上的X锁,用于更改操作,同时其他应用程序可以读取或更改表中

的其他行。

?如果一个应用程序获得某表的SIX锁,该应用程序可以获得某一行上的X锁,用于更改操作,同时其他应用程序只能对表中其他

行进行只读操作。

S、U、X和Z方式用于表一级,但并不需要行锁配合,是比较严格的表加锁策略。

?如果一个应用程序得到某表的S锁。该应用程序可以读表中的任何数据。同时它允许其他应用程序获得该表上的只读请求锁。如

果有应用程序需要更改读该表上的数据,必须等S锁被释放。

?如果一个应用程序得到某表的U锁,该应用程序可以读表中的任何数据,并最终可以通过获得表上的X锁来得到对表中任何数据

的修改权。其他应用程序只能读取该表中的数据。U锁与S锁的

区别主要在于更改的意图上。U锁的设计主要是为了避免两个应

用程序在拥有S锁的情况下同时申请X锁而造成死锁的。

?如果一个应用程序得到某表上的X锁,该应用程序可以读或修改表中的任何数据。其他应用程序不能对该表进行读或者更改操作。

?如果一个应用程序得到某表上的Z锁,该应用程序可以读或修改表中的任何数据。其他应用程序,包括未提交读程序都不能对该

表进行读或者更改操作。

IN锁用于表上以允许未提交读这一概念。

2.2.2 DB2行锁的模式

除了表锁之外,DB2还支持以下几种方式的行锁。表二:DB2数据库行锁的模式

2.2.3 DB2锁的兼容性

表三:DB2数据库表锁的相容矩阵

表四:DB2数据库行锁的相容矩阵

下表是笔者总结了DB2中各SQL语句产生表锁的情况(假设缺省的隔离级别为CS):

2.3DB2锁的升级

每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级的功能。锁升级是通过对表加上非意图性的表锁,同时释放行锁来减少锁的数目,从而达到减少锁需要的内存开销的目的。锁升级是由数据库管理器自动完成的,有两个数据库的配置参数直接影响锁升级的处理:

locklist--在一个数据库全局内存中用于锁存储的内存。单位为页(4K)。

maxlocks--一个应用程序允许得到的锁占用的内存所占locklist大小

的百分比。

锁升级会在这两种情况下被触发:

?某个应用程序请求的锁所占用的内存空间超出了maxlocks与locklist的乘积大小。这时,数据库管理器将试图通过为提出锁请

求的应用程序申请表锁,并释放行锁来节省空间。

?在一个数据库中已被加上的全部锁所占的内存空间超出了locklist定义的大小。这时,数据库管理器也将试图通过为提出锁

请求的应用程序申请表锁,并释放行锁来节省空间。

?锁升级虽然会降低OLTP应用程序的并发性能,但是锁升级后会释放锁占有内存并增大可用的锁的内存空间。

锁升级是有可能会失败的,比如,现在一个应用程序已经在一个表上加有IX锁,表中的某些行上加有X锁,另一个应用程序又来请求表上的IS锁,以及很多行上的S锁,由于申请的锁数目过多引起锁的升级。数据库管理器试图为该应用程序申请表上的S锁来减少所需要的锁的数目,但S锁与表上原有的IX锁冲突,锁升级不能成功。

如果锁升级失败,引起锁升级的应用程序将接到一个-912的SQLCODE。在锁升级失败后,DBA应该考虑增加locklist的大小或者增大maxlocks的百分比。同时对编程人员来说可以在程序里对发生锁升级

后程序回滚后重新提交事务(例如:ifsqlca.sqlcode=-912 then rollback and retry等)。

3 Oracle多粒度锁机制介绍

根据保护对象的不同,Oracle数据库锁可以分为以下几大类:

(1) DML lock(data locks,数据锁):用于保护数据的完整性;

(2) DDL lock(dictionarylocks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);

(3) Internal locks 和latches(内部锁与闩):保护内部数据库结构;

(4) Distributed locks(分布式锁):用于OPS(并行服务器)中;

(5) PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。

在Oracle中最主要的锁是DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)的角度看,OracleDML锁共有两个层次,即行级锁和表级锁。

3.1Oracle的TX锁(行级锁、事务锁)

许多对Oracle不太了解的技术人员可能会以为每一个TX锁代表一条被封锁的数据行,其实不然。TX的本义是Transaction(事务),当一个事务第一次执行数据更改(Insert、Update、Delete)或使用SELECT…FORUPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数据行(在我们用的时候多是启动一个事务,然后SELECT…FOR UPDATE NOWAIT)。

在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle不像DB2那样,建立一个链表来维护每一行被加锁的数据,这样就大大减小了行级锁的维护开销,也在很大程度上避免了类似DB2使用行级锁时经常发生的锁数量不够而进行锁升级的情况。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁。

3.2TM锁(表级锁)

3.2.1 意向锁的引出

表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加S锁,如果表中的一行已被另外的事务加了X锁,那么该锁的申请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了

解决这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就引出了"意向锁"的概念。

意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中每行记录的锁标志位了,系统效率得以大大提高。

3.2.2 意向锁的类型

由两种基本的锁类型(S锁、X锁),可以自然地派生出两种意向锁:

意向共享锁(Intent ShareLock,简称IS锁):如果要对一个数据库对象加S锁,首先要对其上级结点加IS锁,表示它的后裔结点拟(意向)加S锁;

意向排它锁(Intent ExclusiveLock,简称IX锁):如果要对一个数据库对象加X锁,首先要对其上级结点加IX锁,表示它的后裔结点拟(意向)加X锁。

另外,基本的锁类型(S、X)与意向锁类型(IS、IX)之间还可以组合出新的锁类型,理论上可以组合出4种,即:S+IS,S+IX,X+IS,X+IX,但稍加分析不难看出,实际上只有S+IX有新的意义,其它三种组合都

没有使锁的强度得到提高(即:S+IS=S,X+IS=X,X+IX=X,这里的"="指锁的强度相同)。所谓锁的强度是指对其它锁的排斥程度。

这样我们又可以引入一种新的锁的类型:

共享意向排它锁(Shared Intent ExclusiveLock,简称SIX锁):如果对一个数据库对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。例如:事务对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别行(所以要对该表加IX锁)。

这样数据库对象上所加的锁类型就可能有5种:即S、X、IS、IX、SIX。

具有意向锁的多粒度封锁方法中任意事务T要对一个数据库对象加锁,必须先对它的上层结点加意向锁。申请封锁时应按自上而下的次序进行;释放封锁时则应按自下而上的次序进行;具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销。

3.3Oracle的TM锁(表级锁)

Oracle的DML锁(数据锁)正是采用了上面提到的多粒度封锁方法,其行级锁虽然只有一种(即X锁),但其TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁(X锁)、行级共享锁(RS锁)、行级排它锁(RX锁)、共享行级排它锁(SRX锁),与上面提到的S、X、IS、IX、SIX相对应。需要注意的是,由于Oracle在行级只提供X 锁,所以与RS锁(通过SELECT…FORUPDATE语句获得)对应的行

级锁也是X锁(但是该行数据实际上还没有被修改),这与理论上的IS 锁是有区别的。锁的兼容性是指当一个应用程序在表(行)上加上某种锁后,其他应用程序是否能够在表(行)上加上相应的锁,如果能够加上,说明这两种锁是兼容的,否则说明这两种锁不兼容,不能对同一数据对象并发存取。

下表为Oracle数据库TM锁的兼容矩阵(Y=Yes,表示兼容的请求;N=No,表示不兼容的请求;-表示没有加锁请求):

表五:Oracle数据库TM锁的相容矩阵

一方面,当Oracle执行SELECT…FORUPDATE、INSERT、UPDATE、DELETE等DML语句时,系统自动在所要操作的表上申请表级RS锁(SELECT…FORUPDATE)或RX锁(INSERT、UPDATE、DELETE),当表级锁获得后,系统再自动申请TX锁,并将实际锁定的数据行的锁标志位置位(指向该TX锁);另一方面,程序或操作人员也可以通过LOCKTABLE语句来指定获得某种类型的TM锁。下表是笔者总结了Oracle中各SQL语句产生TM锁的情况:

表六:Oracle数据库TM锁小结

我们可以看到,通常的DML操作(SELECT…FORUPDATE、INSERT、UPDATE、DELETE),在表级获得的只是意向锁(RS或RX),其真正的封锁粒度还是在行级;另外,Oracle数据库的一个显著特点是,在缺省情况下,单纯地读数据(SELECT)并不加锁,Oracle通过回滚段(Rollbacksegment)来保证用户不读"脏"数据。这些都提高了系统的并发程度。

由于意向锁及数据行上锁标志位的引入,减小了Oracle维护行级锁的开销,这些技术的应用使Oracle能够高效地处理高度并发的事务请求。

4DB2多粒度封锁机制的监控

在DB2中对锁进行监控主要有两种方式,第一种方式是快照监控,第

二种是事件监控方式。

4.1快照监控方式

当使用快照方式进行锁的监控前,必须把监控锁的开关打开,可以从实例级别和会话级别打开,具体命令如下:

db2 update dbm cfg using dft_mon_lock on(实例级别)

db2 update monitor switches using lock on(会话级别,推荐使用) 当开关打开后,可以执行下列命令来进行锁的监控

db2 get snapshot for locks on ebankdb(可以得到当前数据库中具体锁的详细信息)

db2 get snapshot for locks on ebankdb

Fri Aug 15 15:26:00 JiNan 2004(红色为锁的关键信息)

Database Lock SnapshotDatabase name = DEVDatabase path =

/db2/DEV/db2dev/NODE0000/SQL00001/Input database alias = DEVLocks held = 49Applications currently connected = 38Agents currently waiting on locks = 6Snapshot timestamp = 08-15-2003

15:26:00.951134Application handle =

6Application ID =

*LOCAL.db2dev.030815021007Sequence number

= 0001Application name =

disp+workAuthorization ID = SAPR3Application status = UOW WaitingStatus change time =Application code page = 819Locks held = 0Total wait time (ms) = 0Application handle = 97Application ID =

*LOCAL.db2dev.030815060819Sequence number

= 0001Application name = tpAuthorization ID = SAPR3Application status = Lock-wait Status change time = 08-15-2003

15:08:20.302352Application code page = 819Locks held = 6Total wait time (ms) = 1060648 Subsection waiting for lock = 0 ID of agent holding lock = 100 Application ID holding lock = *LOCAL.db2dev.030815061638 Node lock wait occurred on = 0 Lock object type = Row Lock mode = Exclusive Lock (X) Lock mode requested = Exclusive Lock (X) Name of tablespace holding lock = PSAPBTABD Schema of table holding lock = SAPR3 Name of table holding lock = TPLOGNAMES Lock wait start timestamp = 08-15-2003 15:08:20.302356 Lock is a result of escalation = NOList Of Locks Lock Object Name = 29204 Node number lock is held at = 0 Object Type = Table Tablespace Name = PSAPBTABD Table Schema = SAPR3 Table Name = TPLOGNAMES Mode = IX Status = Granted Lock Escalation = NO

db2 get snapshot for database on dbname |grep -ilocks (UNIX,LINUX平台)

Locks held currently = 7Lock waits = 75Time database waited on locks (ms) = 82302438Lock list memory

in use (Bytes) = 20016Deadlocks detected = 0Lock escalations = 8Exclusive lock escalations = 8Agents currently waiting on locks

= 0Lock Timeouts = 20

db2 get snapshot for database on dbname |find /i"locks"(NT平台) db2 get snapshot for locks for applications agentid45(注:45为

应用程序句柄)

Application handle = 45Application ID = *LOCAL.db2dev.030815021827Sequence number = 0001Application name = tpAuthorization ID = SAPR3Application status = UOW WaitingStatus change time =Application code page = 819Locks held = 7Total wait time (ms) = 0List Of Locks Lock Object Name = 1130185838 Node number lock is held at = 0 Object Type = Key Value Tablespace Name = PSAPBTABD Table Schema = SAPR3 Table Name = TPLOGNAMES Mode = X Status = Granted Lock Escalation = NO Lock Object Name = 14053937 Node number lock is held at = 0 Object Type = Row Tablespace Name = PSAPBTABD Table Schema = SAPR3 Table Name = TPLOGNAMES Mode = X Status = Granted Lock Escalation = NO

也可以执行下列表函数(注:在DB2 V8之前只能通过命令,DB2 V8

后可以通过表函数,推荐使用表函数来进行锁的监控)

db2 select * from table(snapshot_lock('DBNAME',-1)) aslocktable 监控锁信息

db2 select * from table(snapshot_lockwait('DBNAME',-1) aslock_wait_table监控应用程序锁等待的信息

4.2事件监控方式:

当使用事件监控器进行锁的监控时候,只能监控死锁(死锁的产生是因为由于锁请求冲突而不能结束事务,并且该请求冲突不能够在本事务内解决。通常是两个应用程序互相持有对方所需要的锁,在得不到自己所需要的锁的情况下,也不会释放现有的锁)的情况,具体步骤如下:

db2 create event monitor dlock for deadlocks with details writeto file '$HOME/dir'

db2 set event monitor dlock state 1

db2evmon -db dbname -evm dlock看具体的死锁输出(如下图)

Deadlocked Connection ...Deadlock ID: 4Participant no.: 1Participant no. holding the lock: 2Appl Id: G9B58B1E.D4EA.08D387230817Appl Seq number: 0336Appl Id of connection holding the lock:

G9B58B1E.D573.0792********Seq. no. of connection holding the lock: 0126Lock wait start time: 06/08/2005 08:10:34.219490Lock Name : 0x000201350000030E0000000052Lock Attributes : 0x00000000Release

Flags : 0x40000000Lock Count : 1Hold Count : 0Current Mode : NS - Share (and Next Key Share)Deadlock detection time:

06/08/2005 08:10:39.828792Table of lock waited on : ORDERSSchema of lock waited on : DB2INST1Tablespace of lock waited on : USERSPACE1Type of lock: RowMode of lock: NS - Share (and Next Key Share)Mode application requested on lock: X - ExclusiveNode lock

occured on: 0Lock object name: 782Application Handle: 298Deadlocked Statement:Type : DynamicOperation: ExecuteSection : 34Creator : NULLIDPackage : SYSSN300Cursor : SQL_CURSN300C34Cursor was blocking: FALSEText : UPDATE ORDERS SET TOTALTAX = ?, TOTALSHIPPING = ?, LOCKED = ?, TOTALTAXSHIPPING = ?, STATUS = ?, FIELD2 = ?, TIMEPLACED = ?, FIELD3 = ?, CURRENCY = ?, SEQUENCE = ?, TOTALADJUSTMENT = ?, ORMORDER = ?, SHIPASCOMPLETE = ?, PROVIDERORDERNUM = ?, TOTALPRODUCT = ?, DESCRIPTION = ?, MEMBER_ID = ?, ORGENTITY_ID = ?, FIELD1 = ?, STOREENT_ID = ?, ORDCHNLTYP_ID = ?, ADDRESS_ID = ?, LASTUPDATE = ?, COMMENTS = ?, NOTIFICATIONID = ? WHERE ORDERS_ID = ?List of Locks:Lock

Name : 0x000201350000030E0000000052Lock

Attributes : 0x00000000Release Flags :

0x40000000Lock Count : 2Hold Count : 0Lock Object Name : 782Object Type : RowTablespace Name : USERSPACE1Table

Schema : DB2INST1Table Name : ORDERSMode : X - ExclusiveLock

Name : 0x00020040000029B30000000052Lock

Attributes : 0x00000020Release Flags :

0x40000000Lock Count : 1Hold Count : 0Lock Object Name : 10675Object Type : RowTablespace Name : USERSPACE1Table

Schema : DB2INST1Table Name : BKORDITEMMode : X - Exclusive(略去后面信息)

5 Oracle多粒度封锁机制的监控

为了监控Oracle系统中锁的状况,我们需要对几个系统视图有所了解:5.1v$lock视图

v$lock视图列出当前系统持有的或正在申请的所有锁的情况,其主要字段说明如下:

表七:v$lock视图主要字段说明

其中在TYPE字段的取值中,本文只关心TM、TX两种DML锁类型;

5.2v$locked_object视图

v$locked_object视图列出当前系统中哪些对象正被锁定,其主要字段说明如下:

时间戳和乐观控制法并发控制技术

不加锁的并发控制 1. 时间戳的并发控制 调度并发事务的时间戳方法给每个事务分配一个全局惟一的时间戳。时间戳的值产生了一个精确的顺序,事务按照该顺序提交给DBMS。时间戳必须有两个特性:惟一性和单调性.惟一性保证不存在相等的时间戳值,单调性保证时间戳的值是一直增长的。 同一事务中所有的数据库操作(读和写)都必须有相同的时间戳。DBMS按照时间戳顺序执行冲突的事务,因此保证了事务的可串行化。如果两个事务冲突,通常终止其中一个,将其回滚并重新调度,赋予新的时间戳。 存储在数据库中的每个值都要求两个附加的时间戳域:一个是该域最后一次读的时间,另一个是最后一次更新的时间.因此时间戳增加了内存需求和数据库的处理开销.因为有可能导致许多事务被终止,重新调度和重新赋予时间戳,时间戳方法一般需要大量的系统资源. 2. 乐观的并发控制 乐观方法基于这样的假设,数据库操作的大部分都不会发生冲突.乐观方法不要求锁定.作为替换,事务不受限制地被执行,直到它被提交.便用乐观方法,每个事务经过两个或者三个阶段,它们是读、确认、写。 (1) 读阶段,事务读取数据库,执行需要的计算,并对一个私有的数据库值的副本进行更新.事务的所有更新操作都记录在一个临时更新文件中,该文件将不会被剩下的其他事务访问. (2) 确认阶段,对事务进行确认以保证所做的修改不会影响数据库的完整性和一致性.如果确认检查是肯定的,事务进入写阶段;如果确认检查是否定的,则事务回滚,重新启动,所做的修改被抛弃. (3) 写阶段,所做的修改被永久地写入到数据库中.乐观方法对于大多数只有较少更新事务的查询数据库系统来说是可以接受的. 3. 三种并发控制方法的比较 在存储空间上的比较: (1)封锁:锁使用的空间与封锁对象个数成正比. (2)时间戳:每个数据库对象的读时间和写时间都需要空间,不管是否当前被

实验15 事务与并发控制

实验十五事务与并发控制 【实验目的与要求】 1.掌握数据库事务的概念 2.熟悉数据库的四个特性 3.熟练掌握数据库事务的实现方法 【实验内容与步骤】 15.1.SQL Server数据库事务基础知识 1.事务的概念( Transaction ) 所谓事务是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。 关系数据库中,事务可以是一条SQL语句、一组SQL语句。 在SQL语言中,定义事务的语句有三条: Begin Transaction 开始 Commit 结束 Rollback 回滚 2.事务开始:BEGIN TRANSACTION 标记一个显式本地事务的起始点。BEGIN TRANSACTION将@@TRANCOUNT 加1。 语法结构: BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ] 参数说明: transaction_name:是给事务分配的名称。transaction_name 必须遵循标识符规则,但是不允许标识符多于32 个字符。仅在嵌套的https://www.doczj.com/doc/ad10442721.html,MIT 或BEGIN...ROLLBACK 语句的最外语句对上使用事务名。 @tran_name_variable:是用户定义的、含有有效事务名称的变量的名称。必须用char、varchar、nchar 或nvarchar 数据类型声明该变量。 WITH MARK ['description']:指定在日志中标记事务。Description 是描述该标记的字符串。 如果使用了WITH MARK,则必须指定事务名。WITH MARK 允许将事务日志还原到命名标记。 4.事务提交:COMMIT TRANSACTION 标志一个成功的隐性事务或用户定义事务的结束。如果@@TRANCOUNT 为1,COMMIT TRANSACTION 使得自从事务开始以来所执行的所有数据修改成为数据库的永

并发控制课后答案-简述并发控制

第八章并发控制 习题解答和解析 1. 1.在数据库中为什么要并发控制? 答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。 2. 2.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况? 答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。 (1)丢失修改(Lost Update)两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。 (2)不可重复读(Non -Repeatable Read)不可重复读是指事务T1读取数据后,事务T2 执行更新操作,使T1无法再现前一次读取结果。不可重复读包括三种情况:详见《概论》8.1(P266)。 (3)读"脏"数据(Dirty Read)读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。 避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。 3. 3.什么是封锁? 答:封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。 4. 4.基本的封锁类型有几种?试述它们的含义。 答:基本的封锁类型有两种:排它锁(Exclusive Locks, 简称 X 锁 )和共享锁(Share Locks,简称 S 锁)。 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 5.如何用封锁机制保证数据的一致性 ? 答:DBMS在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务T1在对A进行修改之前先对A执行XLock(A),即对A加X锁。这样,当T2请求对A加X锁时就被拒绝,T2只能等待T1释放A上的锁后才能获得对A的X锁,这时它读到的A是T1更新后 的值,再按此新的A值进行运算。这样就不会丢失 T1的更新。

数据库实验报告:事务与并发控制

1.实验七:事务与并发控制 1.1.实验目的 1.掌握事务机制,学会创建事务。 2.理解事务并发操作所可能导致的数据不一致性问题,用实验展现四种数据不一致性 问题:丢失修改、读脏数据、不可重复读以及幻读现象。 3.理解锁机制,学会采用锁与事务隔离级别解决数据不一致的问题。 4.了解数据库的事务日志。 1.2.实验内容 假设学校允许学生将银行卡和校园卡进行绑定,在student数据库中有如下的基本表,其中校园卡编号cardid即为学生的学号: icbc_card(studcardid,icbcid,balance) //校园卡ID,工行卡ID,银行卡余额campus_card(studcardid,balance) //校园卡ID,校园卡余额 数据创建的代码: use student createtable campus_card ( studcardid Char(8), balance Decimal(10,2)) createtable icbc_card ( studcardid Char(8), icbcid Char(10), balance Decimal(10,2) )

insertinto campus_card values('20150031', 30) insertinto campus_card values('20150032', 50) insertinto campus_card values('20150033', 70) insertinto icbc_card values('20150031','2015003101', 1000) insertinto icbc_card values('20150032','2015003201', 1000) insertinto icbc_card values('20150033','2015003301', 1000) 针对以上数据库按照要求完成下列实验: 1.编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银 行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分)settransactionisolationlevel repeatableread

基于封锁的事务并发控制概述

基于封锁的事务并发控制概述 发表时间: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也在事务表中维护着每个事务的描述信息项,该记录中包含一个指向事务拥有的锁列表 的指针。在请求锁之前要检查这个列表,以确定不会对同一个锁请求两次。 加锁表中的每一项针对某个数据对象(可以是一页,一条记录等等),它包括下面的信息:拥有数据对象锁的事务数目,锁的属性 (共享锁、互斥锁等)和一个指向加锁请求队列的指针。

事务调度与并发控制

四级数据库第八章-事务调度与并发控制8.1 并发控制概述 在第七章中己经讲到,事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。为了保证事务的隔离性更一般,为了保证数据库的一致性,DBMS需要对并发操作进行正确调度。这些就是数据库管理系统中并发控制机制的责任。 下面先来看一个例子,说明并发操作带来的数据的不一致性问题。 考虑飞机订票系统中的一个活动序列: ①甲售票点(甲事务)读出某航班的机票余额A,设A=16; ②乙售票点(乙事务)读出同一航班的机票余额A,也为16; ③甲售票点卖出一张机票,修改余额A A-l,所以A为15,把A写回数据库; ④乙售票点也卖出一张机票,修改余额A A-l,所以A为15,把A写回数据库。结果明明卖出两张机票,数据库中机票余额只减少1。 这种情况称为数据库的不一致性。这种不一致性是由并发操作引起的。在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。若按上面的调度序列执行,甲事务的修改就被丢失。这是由于第④步中乙事务修改A并写回后覆盖了甲事务的修改。 仔细分析并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据,如图8.1所示。 1.丢失修改(Lost Update) 两个事务T1和T2。读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失,如图8.1(a)所示。上面飞机订票例子就属此类。

图8.1 2.不可重复读(Non-Repeatable Read) 不可重复读是指事务T1读取数据后,重复T2执行更新操作,使T1无法再现前一次读 取结果。具体地讲,不可重复读包括三种情况: (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。例如在图8.1(b)中,T1读取B=100进行运算,T2读取同一数据B对其进行修改后将B=200写回数据库。T1为了对读取值校对重读B,B己为200,与第1次读取值不一致。 (2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。 (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影(Phantom Row)现象。

浅谈分布式并发控制

浅谈分布式并发控制 摘要:本文首先介绍了分布式系统的基本概念和并发控制的原理及目的方法。着重描述了几种基本的分布式并发控制的技术,例如基于锁的并发控制技术、基于时间戳的并发控制技术和基于事务的并发控制技术,等等。 关键字:分布式并发控制,基于锁的并发控制,基于时间戳的并发控制,基于事务的并发控制技术 0.引言 计算机现在一般不再单独使用,办公室工作站常与远程打印机、文件服务器、数据库相联。家庭计算机也可通过调制解调器访问电子信息,如电子邮件、公告板、web节点等。大的公司和企业有成百上千乃至上万台计算机通过网络连接起来,协同控制诸如汽车生产、石油提炼、钢铁冶炼、食品生产、电站运行以及商品的设计、开发、销售等。分布式计算已经成为必不可少的技术。 1.分布式系统 分布式计算机系统是一种计算机硬件的配置方式和相应的功能配置方式。它是一种多处理器的计算机系统,各处理器通过互连网络构成统一的系统。系统采用分布式计算结构,即把原来系统内中央处理器处理的任务分散给相应的处理器,实现不同功能的各个处理器相互协调,共享系统的外设与软件。这样就加快了系统的处理速度,简化了主机的逻辑结构,特别适合于工业生产线自动控制和企事业单位的管理,成本低,易于维护,成为计算机在应用领域发展的一个重要方向。 分布式处理系统是一个紧密耦合的系统。并且,分布式处理系统一般有比较复杂的互连网络。它和网络的区别是:计算机网络虽然与分布式计算机系统有相同之处,但二者并不等同。分布式系统的最大特点是整个系统中的各计算机和系统资源对用户都是透明的,也就是说,用户通过键入命令就可以运行程序,由操作系统为用户选择一台最合适的计算机来运行他的程序,并把运行结果传到合适的地方,而这些都不需要用户的干预。网络则一般不对用户透明,对数据的处理需要有用户的参予。一般,分布式系统是计算机网络的一个特例。 分布式系统常常意味着各组成部分之间相当严格的同步以达到协同操作、远程过程调用(rpc:remoteproce durecall)或消息传送,而网络系统则意味基于消息的通信、可能很长的延迟(在收发消息之间)、松散的同步性以及没有全局的目标。事实上,在网络和分布式系统之间并没有很清晰的界限。但人们一般认为分布式处理的主要特征为:各部件是合作、

数据库原理习题与答案 第9章数据库系统恢复和并发控制技术

第九章.数据库系统恢复和并发控制技术 习题: 一.填空题 1.数据库保护包含数据的。 2.是DBMS的基本单位,它是用户定义的一组逻辑一致的程序序列。 3.DBMS的并发控制的主要方法是机制。 4.有两种基本的锁,它们是和。 5.对并发操作若不加以控制,可能带来的不一致性有、和。 6.数据库系统在运行过程中,可能会发生故障,故障主要有、、介质故障和四类。 7.数据库系统是利用存储在外存上其他地方的来重建被破坏的数据库,它主要有两种:和。 二.选择题 1.下面哪个不是数据库系统必须提供的数据控制功能。 A.安全性 B.可移植性 C.完整性 D.并发控制 2.事务的原子性是指。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对数据库的改变是永久的 C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 3.多用户的数据库系统的目标之一是使它的每个用户好像面对着一个单用户的数据库一样使用它,为此数据库系统必须进行。 A.安全性控制 B.完整性控制 C.并发控制 D.可靠性控制 4.设有两个事务T1、T2,其并发操作如下图所示,下面评价正确的是________。 T1 T2 ①读A=10 ②读A=10 ③A=A-5写回 ④A=A-8写回

A该操作不存在问题B该操作丢失修改 C该操作不能重复读D该操作读“脏”数据 5.若事务T对数据R已加X锁,则其他对数据R 。 A.可以加S锁,不能加X锁 B.不能加S锁,可以加X锁 C.可以加S锁,也可以加X锁 D.不能加任何锁 6.对并发控制不加以控制,可能会带来。 A.不安全 B.死锁 C.死机 D.不一致 7.用来记录对数据库中数据进行的每一次更新操作。 A.后援副本 B.日志文件 C.数据库 D.缓冲区 三.简答题 1.试述事务的概念和事务的四个特性。 2.数据库中为什么要有恢复子系统,它的功能是什么? 3.数据库运行中可能发生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据? 4.数据库恢复的基本技术有哪些? 5.登记日志文件时,为什么必须先写日志文件,后写数据库? 6.在数据库中为什么要并发控制? 7.什么是封锁? 8.基本的封锁有哪几种?试述它们的含义。 9.不同封锁协议与系统一致性级别的关系是什么? 10.请给出预防死锁的若干方法。 11.什么样的并发调度是正确的调度? 12.试述两段锁协议的概念。

事务并发控制中的两段锁和可串行化冲突图的对比

文章编号:1000-2375(2005)01-0019-05 事务并发控制中的两段锁和 可串行化冲突图的对比 金 蓉,李跃新 (湖北大学数学与计算机科学学院,湖北武汉430062) 摘 要:数据库中并发操作一般分为数据级和事务级两种,由于资源的竞争可能引起数据级的冲突和事 务级的冲突,因此需要对并发执行的事务转化为某个可串行化调度,从而确保数据库的一致性.目前并发控制的方法有很多,从锁和非锁机制两个方面分析了两段锁和可串行化冲突图两种并发控制的规则和数据结构及分类,并从事务的冲突可串行化方面和结构上分析了各自的性能和优缺点. 关键词:锁;两段锁协议;可串行化冲突图 中图分类号:TP311 文献标志码:A 收稿日期:2004-03-25 作者简介:金 蓉(1979-  ),女,硕士生1 引 言 数据库中的并发操作一般分为数据级和事务级两种,一方面在微观数据级上有数据对象的读(Read )操作和写(Write )操作,另一方面在宏观事务级上有事务的操作原语:终止(Abort ),开始(Begin ),提交(C ommit ),结束(End ),实质上事务中包含着对一系列数据对象的操作,因为一个事务系统主要由3个部分构成:数据项集、对数据项集的操作和控制事务存取数据的管理器(我们称为事务管理器T M ).并发控制的作用是正确协调同一时间里多个事务对数据库的并发操作,解决资源竞争问题以保证数据库的一致性和完整性. 并发控制是通过调度来确保事务的并发执行的效果等同于没有并发执行时的执行效果,也就是使事务的并发执行调度等价于事务的某个可串行化调度,从而确保数据库的一致性.可串行化简单的说就是一个并发操作等效于某个串行执行的效果,也即有相同的输出结果,与串行操作对数据库有同样的效果. 冲突有数据级的冲突和事务级的冲突,数据间的冲突体现在数据库中同时对相同的数据对象操作,事务间的冲突是由事务的数据相关性及在共享数据对象上的交互作用而引起的,通常用事务的“冲突关系”来表示. 定义1 数据对象d 上的两个操作p 、q 是“冲突”的,记为CT (d ,p ,q ),当且仅当S (S (s ,p ),q )≠S (S (s ,q ),p )∨R (s ,p )≠R (S (s ,q ),p )∨R (s ,q )≠R (S (s ,p ),q ).其中,S (s ,p )和R (s ,p )分别表示操作p 对d 的给定状态s 所产生的结果状态和结果输出(返回). 由定义可知,两个或多个数据操作产生冲突的条件是1)它们属于不同的事务;2)都访问数据库中相同的数据对象;3)并且至少有一个是写操作否则就不会产生冲突. 定义2 两个事务t 1、t 2是“冲突”的,记为t 1CR t 2,是指它们包含了(至少)一对冲突操作.即对于任何t 1≠t 2,t 1CR t 2,当且仅当?d 、?p ,q (p (d )∈t 1∧q (d )∈t 2∧CT (d ,p ,q ). 事务间的冲突归根结底集中在数据操作的冲突上,因此解决冲突最初的方法是对数据对象采用锁机制,而锁可以分为读锁和写锁,当数据对象加了读锁后可以再加读锁但不能加写锁,因此读锁是共享的,当数据对象加了写锁后就不能加其他任何锁,因此写锁是排它的,显然读锁较写锁的并发度高. 第27卷第1期2005年3月湖北大学学报(自然科学版)Journal of Hubei University (Natural Science ) V ol.27 N o.1 Mar.,2005

Informix的事务、并发控制、锁机制、隔离级别

Informix的事务、并发控制、锁机制、隔离级别 1、事务 事务是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。数据库服务器保证在事务范围内执行的操作完整且正确地提交至磁盘,否则数据库会复原至事务启动之前的状态。 一个逻辑工作单元要成为事务,必须满足所谓的ACID属性。ACID的具体含义如下: 1)A(Atomicity):操作序列要么完整的执行,否则什么都不做; 2)C(Consistency):一致性,事务执行后,保证数据库从一个一致性状态到另外一个一致性状态; 3)I(Isolation):隔离,一个事务的中间状态对其他事务不可见,即每个用户都感觉他们在单独使用数据库。隔离级别用来定义多大程度的隔离多个不同的事务; 4)D(Durability):持久性,事务的有效性,不会应用硬件或软件的失败而丢失。 2、并发控制 1)相关概念 i)隔离(+一致性) => 并发控制; ii)多个事务可以访问或修改相同的资源; iii)只要多个进程共享资源,就需要对访问进程进行排队控制; iv)在进行并发控制时,数据库内部将生成多个并发事务访问资源的操作序列表,并且每一个事务内部的各个操作都需要序列化。 2)串行调度存在的问题 在串行调度中,采用操作序列,一个事务完成了再完成另外一个,即使两个事务T1、T2更新的是数据库中不同的对象。此种方式从并发和性能角度考虑,都不能很好的利用计算机资源。 为了改善性能,需要采用非串行调度,即允许事务并发执行,即一个事务内的操作可以在其他事务提交前开始执行。 3)并发调度的常见问题 i)脏读:事务T2读取到了事务T1没有提交的结果 例如如下的操作序列会导致脏读: 事务T1读取记录,然后更新记录; 事务T2读取了更新后的记录;

数据库并发控制

数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间处于闲置状态。因此,为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一。 DM用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。 一、并发控制的预备知识 (一) 并发控制概述 并发控制是以事务(transaction)为单位进行的。 1. 并发控制的单位――事务 事务是数据库的逻辑工作单位,它是用户定义的一组操作序列。一个事务可以是一组SQL 语句、一条SQL语句或整个程序。 事务的开始和结束都可以由用户显示的控制,如果用户没有显式地定义事务,则由数据库系统按缺省规定自动划分事务。 事务应该具有4种属性:原子性、一致性、隔离性和持久性。 (1)原子性 事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说这些操作是一个整体,对数据库而言全做或者全不做,不能部分的完成。这一性质即使在系统崩溃之后仍能得到保证,在系统崩溃之后将进行数据库恢复,用来恢复和撤销系统崩溃处于活动状态的事务对数据库的影响,从而保证事务的原子性。系统对磁盘上的任何实际数据的修改之前都会将修改操作信息本身的信息记录到磁盘上。当发生崩溃时,系统能根据这些操作记录当时该事

数据库并发控制练习和答案

第八章数据库并发控制 一、选择题 1.为了防止一个用户的工作不适当地影响另一个用户,应该采取()。 A. 完整性控制 B. 访问控制 C. 安全性控制 D. 并发控制 2. 解决并发操作带来的数据不一致问题普遍采用()技术。 A. 封锁 B. 存取控制 C. 恢复 D. 协商 3.下列不属于并发操作带来的问题是()。 A. 丢失修改 B. 不可重复读 C. 死锁 D. 脏读 4.DBMS普遍采用()方法来保证调度的正确性。 A. 索引 B. 授权 C. 封锁 D. 日志 5.事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放, 这是()。 A. 一级封锁协议 B. 二级封锁协议 零级封锁协议 C. 三级封锁协议D. Q()。6.如果事务T获得了数据项Q上的排他锁,则T对 B. 只能写不能读 A. 只能读不能写 C. 既可读又可写D. 不能读也不能写进行操作,可能有如下几种情况,7.设事务T1和T2,对数据库中地数据A)请问哪一种不会发生冲突操作(。 A. T1正在写A,T2要读A ,正在写AT2也要写A B. T1要写A ,C. T1正在读AT2,D. T1正在读AT2也要读A )。同时对数据库中同一数据进行操作,8.如果有两个事务,不会引起冲突的操作是(,一个是A. 一个是DELETESELECT B. DELETE 一个是SELECT,一个是两个都是UPDATE C. D. 两个都是SELECT 在数据库系统中,死锁属于(9.)。事务故障B. A. 系统故障 D. C. 介质故障程序故障 二、简答题 1. 在数据库中为什么要并发控制 答:数据库是共享资源,通常有许多个事务同时在运行。 当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。 2. 并发操作可能会产生哪几类数据不一致用什么方法能避免各种不一致的情况 数据。”脏“并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读答:(1)丢失修改(Lost Update) 两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。 (2)不可重复读(Non-Repeatable Read) 不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。

事务管理与并发控制学习笔记数据库的三种日志详解

6、事务管理与并发控制学习笔记——数据库的三种日志详解 6.1、概念:acid性质、共享锁、排它锁 6.1.1 事务的ACID特性 A:表示事务的原子性(Atomicity),即事务完全执行或完全不执行 –事务中包含的所有操作要么全做,要么全不做原子性由恢复机制实现 C:表示一致性(Consistency),所有数据库都有一致性约束,或关于数据之间联系的预期状态 –事务的隔离执行必须保证数据库的一致性。事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。 –数据库的一致性状态由用户来负责,由并发控制机制实现。如银行转帐,转帐前后两个帐户金额之和应保持不变 I:表示隔离(Isolation),即表面看起来,每个事务都是在没有其它事务同时执行的情况下执行的 –系统必须保证事务不受其它并发执行事务的影响。对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行 –隔离性通过并发控制机制实现 D:表示持久性(Durability),即一旦事务完成了,事务对数据库的影响就不会丢失 –一个事务一旦提交之后,它对数据库的影响必须是永久的 –系统发生故障不能改变事务的持久性。持久性通过恢复机制实现这里大家要知道,事务是我们对数据库操作的执行单位。我们要注意事务的整体性,即原子性,事务是绝对不能做一半的,否则很难保证数据库的一致性。而对于数据库来说,必须要保证一致性,因为一个数据库如果没有一致性,那么这个数据库是失败的!隔离性是数据库并发处理性能的体现,当然如果数据库没有很好的并发性那么你还是改用Excel吧,呵呵,开个玩笑而已。 6.2、三种日志例题 系统是很可能崩溃的,但是崩溃后我们不能坐以待毙,我们要保证事务的原子性,进而保证数据库的一致性和持久性。那么我们就应该考虑怎样建立一个合理的运行机制,让系统崩溃后能够通过一系列办法将那些不能确定是否真正写盘的事务回滚或者重做,哪怕数据库回到之前好久的状态。还好,高手们很有正事,他们研究出来一些针对故障的恢复机制!也就是我们下面要说到的日志系统!6.2.1 日志与故障恢复 数据库系统(例如Oracle)一般都有一个日志系统,它由日志管理服务和日志文件组成,这个如果大家有兴趣复习一下Oracle的体系架构,这里就不多说了。这个日志文件中存储的是一些文本行,当我们对一个数据库中的数据进行操作时,数据库系统首先按照一定的规则将你的操作命令和一些附加参数记录到这些日志文件中,(注意记录的只是命令语句、参数和一些标记等等)。然后再对数据库中的数据进行操作,最后完成所有操作后,再写一些标志到日志文件中。 根据对日志文件的管理规则的不同(对应的恢复机制也不同。),我们现在常用的是Undo、Redo还有Undo/Redo三种日志模式。 注意:在故障恢复里我们只对数据库的写操作感兴趣,因为读操作根本不会

并发控制

Character 16 Concurrency Control 本章术语: Concurrengcy control 并发控制 Lock types锁类型 Shared-mode(s)lock 共享型锁(S) Exclusive-mode(x)lock 排他型锁(X) Lock 锁 Compatibility 相容性 Request 申请 Wait 等待 Grant 授予 Deadlock 死锁 Starvation 饿死 Locking protocol 封锁协议 Legal schedule 合法调度 Two-phase locking protocol 两阶段封锁协议 Growing phase 增长阶段 Shrinking phase 缩减阶段 Lock point 封锁点 Srict two-phase locking严格两阶段封锁 Rigorous two-phase locking 强两阶段封锁 Lock concersion 锁转换 Upgrade 升级 Downgrade 降级 Graph-based protocols 基于图的协议 Tree protocol 树形协议 Commit dependency 提交依赖 Timestamp-based protocols 基于时间戳的协议Timestamp 时间戳 System clok 系统时钟 Logical counter 逻辑计数器 W-timestamp(Q) R-timestamp(Q) Timestamp-ordering protocol 时间戳排序协议 Thomas'write rule Thomas 写规则 Validation-based protocols 基于有效性检查的协议

第十一章 并发控制

数据库系统原理
李瑞轩 华中科技大学计算机学院

第十一章 并发控制
11.1 并发控制概述 11.2 并发调度的可串行性 11.3 封锁 11.4 活锁和死锁 11.5 两段锁协议 11.6 封锁的粒度
2

? 学习目标
理解并掌握并发控制的基本概念及其必要性 理解并掌握并发调度的可串行性原则 理解并基本掌握基于封锁的并发控制方法
3

11.1 并发控制概述
11.1.1 问题的提出
T1 read(A) A:=A-50 write(A) read(B) B:=B-10 write(B) T2 初始值: A = 100 B = 100
read(B) B:=B+50 write(B) commit T1
read(A) A:=A+10 write(A) commit T2
4

11.1.1 问题的提出 (续)
事务并发执行的必然性 System throughput Response time 不正确的并发控制的后果 读“脏”数据(W-R conflict) 不可重复读(R-W conflict) 丢失更新(W-W conflict)
5

读“脏”数据(W-R conflict)
1. 定义 读修改后未提交的随后又被撤消(Rollback)的数据。
T1 T2
read(A) write(A) read(A) read(B) write(B) Commit T2 read(B) write(B) Abort T1
6

基于封锁的事务并发控制概述

基于封锁的事务并发控制概述 摘要:叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。详细介绍了事务的串行化调度方法中的锁技术和锁协议,并深入讨论了锁的 管理、死锁处理、幻影问题和其它加锁过程中可能出现的一些问题。 关键词:数据库管理系统;事务;并发控制;封锁 中图分类号: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 locki ng techniques of the transaction concurrency control are investigated in detail, and the approach t o avoiding phantom problem as well as the way for handling dead-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读到的数据就为脏数据。 三、基于封锁的事务并发控制机制

相关主题
文本预览
相关文档 最新文档