第9章 事务调度与并发控制 9.1事务与事务调度
2 m& ]1 F0 w2 w k" K7 a 9.1.1 事务的概念/ {& f+ n! r! ?. O% A
1、 事务是构成数据库应用中一个独立逻辑工作单元的操作的集合,也是访问并可能更新数据库中各种数据项的一个程序执行单元。数据库系统通过执行各种事务实现对数据库数据的操作,管理和执行事务是DBMS的基本功能。7 U' O' b7 l+ k# P
9.1.2 事务的特性(ACID特性)% y+ t( V9 a5 P) V1 n
1、原子性(Atomicity)1 v6 x1 h, K' V* ~# k: i
一个事务对数据库的所有操作是一个不可分割的工作单元,这些操作要么全部执行,要么一个也不执行。0 E3 ^8 J3 L& o" X/ s0 U: ^+ T/ ]
2、 一致性(Consistency)
( k$ @$ Q/ c: E1 F' _" s8 R 当一个事务独立执行时,其执行结果应维护数据库的一致性,即数据库不会因事务执行而受到破坏。数据库满足全部完整性约束,处于正确的状态;
# L% T; \& K1 r0 A2 w( j* d; d 3、 隔离性(Isolation)
& f5 R" e( J; s) r, G4 [& U 当多个事务并发执行时,系统应保证一个事务的执行结果不受其他事务的干扰,事务并发执行结果与这些事务串行执行时的结果是一样的;& I6 F* u! t1 z& M* Q: F
4、 持久性(Durability)- b3 f: E. q+ {& i# q! H- b
一个事务一旦成功完成全部操作,则它对数据库的所有更新就永久地反映在数据库中,即使以后数据库发生了故障;
! w6 _8 `8 W8 X2 R# { Q! u2 b 9.1.3 事务调度 i& z4 [1 B6 \/ P5 z8 T
1、 一个事务中各操作的执行顺序和执行时机一方面取决于事务自身内部逻辑,另一方面也受DBMS中事务调度机制的控制。当多个事务并发执行时,DBMS必须采用合适的并发调度机制合理安排各个事务执行顺序,以保证事务的ACID特性。. r! o9 w5 l/ n7 U9 ^
2、 调度分为串行调度和并发调度,串行调度的特点是一个事务的所有操作都执行完后才开始执行另一事务,不存在事务操作的交叉执行;不同事务操作的交叉执行称为并发调度,DBMS交叉执行来自多个事务的各个操作,以提高数据库系统的性能。; Y; |1 g/ I/ I7 L M
9.1.4 可串行化调度/ s( A' ?5 y& X$ r/ l0 e
1、 事务的串行调度能够产生正确的结果,但执行效率低,如果并发调度S等价于某一定义在TS上的串行调度,那么S称为可串行化调度;2 j% D+ J, U. a8 q# J
2、 给定两个定义在事务集TS上的的调度S和S’,如果可以通过交换S中一系列非冲突操作的执行顺序将S转换为S’,则称S与S’是冲突等价。3 n/ v1 Z/ g3 f! G
3、 如果定义在事务TS上的并发调度S冲突等价于事务集TS上的某个串行调度S’,则称S是冲突可串行的。
, K0 n3 R: B$ {5 i: W 4、 在引入冲突可串行概念后,判断一个并发调度是否正确可以归结为判断该调度是否冲突可串行的。! d7 G# ^, f3 _3 W# q9 U& b
9.2 基于锁的并发控制技术3 [9 V! [) b- T: H! @$ Y" R3 P
9.2.1 锁的概念
4 A% Y, t* q5 ?2 G, f6 o 1、 对数据库系统中每个可能被多个事务并发访问的数据项设置锁,锁代表了对该数据项的访问权限。即事务T在访问数据项Q前须向DBMS申请获得设置在Q上的锁,如成功,则T获得对Q的访问权,T对Q操作完成后,释放所占用的锁,允许其他事务获得该锁并访问Q,在T释放设置在Q上的锁前,其他事务不能访问Q。' m) @, ^& w$ `* R; s
2、 锁的类型有两种:
* y; s! }0 V9 H$ V0 ?/ j, R7 @2 M (1) 互斥锁(X锁):若T获得Q上的X锁,则T可以对Q读写,其他事务不能再对Q进行任何操作,直到T释放Q上的锁;
r4 D0 w) i5 E, y% F# c& L A5 z (2) 共享锁(S锁):若T获得Q上的S锁,则T可以对Q进行读取操作,但不可以修改,允许其他事务再申请获得Q上的S锁,与T并行读取Q,但在T释放Q上的S锁前,其他事务不能对Q做任何修改; |