文档介绍:数据库系统概论王珊chp11
第十一章 并发控制
并发控制概述
封锁
活锁和死锁
并发调度的可串行性
两段锁协议
封锁的粒度
小
③ROLLBACK
C恢复为100
例如
读“脏”数据
T1将C值修改为200,T2读到C为200
T1由于某种原因撤销,其修改作废,C恢复原值100
这时T2读到的C为200,与数据库内容不一致,就是“脏”数据
An Introduction to Database System
并发控制概述(续)
数据不一致性:由于并发操作破坏了事务的隔离性
并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性
An Introduction to Database System
并发控制概述(续)
并发控制的主要技术
有封锁(Locking)
时间戳(Timestamp)
乐观控制法
商用的DBMS一般都采用封锁方法
An Introduction to Database System
第十一章 并发控制
并发控制概述
封锁
活锁和死锁
并发调度的可串行性
两段锁协议
封锁的粒度
小结
An Introduction to Database System
封锁
什么是封锁
基本封锁类型
锁的相容矩阵
An Introduction to Database System
什么是封锁
封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
An Introduction to Database System
基本封锁类型
一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。
基本封锁类型
排它锁(Exclusive Locks,简记为X锁)
共享锁(Share Locks,简记为S锁)
An Introduction to Database System
排它锁
排它锁又称为写锁
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
保证其他事务在T释放A上的锁之前不能再读取和修改A
An Introduction to Database System
共享锁
共享锁又称为读锁
若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改
An Introduction to Database System
锁的相容矩阵
Y=Yes,相容的请求
N=No,不相容的请求
T1 T2
X
S
-
X
N
N
Y
S
N
Y
Y
-
Y
Y
Y
An Introduction to Database System
锁的相容矩阵(续)
在锁的相容矩阵中:
最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线表示没有加锁。
最上面一行表示另一事务T2对同一数据对象发出的封锁请求。
T2的封锁请求能否被满足用矩阵中的Y和N表示
Y表示事务T2的封锁要求与T1已持有的锁相容,封锁请求可以满足
N表示T2的封锁请求与T1已持有的锁冲突,T2的请求被拒绝
An Introduction to Database System
使用封锁机制解决丢失修改问题
T1
T2
① Xlock A
② R(A)=16
Xlock A
③ A←A-1
等待
W(A)=15
等待
Commit
等待
Unlock A
等待
④
获得Xlock A
R(A)=15
A←A-1
⑤
W(A)=14
Commit
Unlock A
例:
事务T1在读A进行修改之前先对A加X锁
当T2再请求对A加X锁时被拒绝
T2只能等待T1释放A上的锁后T2获得对A的X锁
这时T2读到的A已经是T1更新过的值15
T2按此新的A值进行运算,并将结果值A=14送回到磁盘。避免了丢失T1的更新。
没有丢失修改
An Introduction to Database System
使用封锁机制解决不可重复读问题
T1
T2
①