第八章 并发控制
并发控制概述
封锁
封锁协议
活锁和死锁
并发调度的可串行性
两段锁协议
封锁的粒度
Oracle的并发控制
小结
并发控制-并发控制概述
两段锁协议
两段锁协议的内容
1. 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
2. 在释放一个封锁之后,事务不再获得任何其他封锁。
并发控制-并发控制概述
两段锁协议(续)
“两段”锁的含义
事务分为两个阶段
第一阶段是获得封锁,也称为扩展阶段;
第二阶段是释放封锁,也称为收缩阶段。
并发控制-并发控制概述
两段锁协议(续)
例:
事务1的封锁序列:
Slock A ... Slock B ... Xlock C ... Unlock B ... Unlock A ... Unlock C;
事务2的封锁序列:
Slock A ... Unlock A ... Slock B ... Xlock C ... Unlock C ... Unlock B;
事务1遵守两段锁协议,而事务2不遵守两段协议。
并发控制-并发控制概述
两段锁协议(续)
并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。
所有遵守两段锁协议的事务,其并行执行的结果一定是正确的
事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件
可串行化的调度中,不一定所有事务都必须符合两段锁协议。
并发控制-并发控制概述
两段锁协议(续)
T1
Slock B
读B=2
Y=B
Xlock A
A=Y+1
写回A=3
Unlock B
Unlock A
T2
Slock A
等待
等待
等待
等待
等待
Slock A
读A=3
Y=A
Xlock B
B=Y+1
写回B=4
Unlock B
Unlock A
T1
Slock B
读B=2
Y=B
Unlock B
Xlock A
A=Y+1
写回A=3
Unlock A
T2
Slock A
等待
等待
等待
等待
Slock A
读A=3
X=A
Unlock A
Xlock B
B=X+1
写回B=4
Unlock B
(a) 遵守两段锁协议
(b) 不遵守两段锁协议
T1
Slock B
读B=2
Y=B
Unlock B
Xlock A
A=Y+1
写回A=3
Unlock A
T2
Slock A
读A=2
X=A
Unlock A
Xlock B
等待
Xlock B
B=X+1
写回B=3
Unlock B
(c) 不遵守两段锁协议
并发控制-并发控制概述
两段锁协议(续)
两段锁协议与防止死锁的一次封锁法
一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议
但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁
并发控制-并发控制概述
两段锁协议(续)
遵守两段锁协议的事务发生死锁
T1
Slock B
读B=2
Xlock A
等待
等待
T2
Slock A
读A=2
Xlock A
等待
并发控制-并发控制概述
两段锁协议(续)
两段锁协议与三级封锁协议
两类不同目的的协议
两段锁协议
保证并发调度的正确性
三级封锁协议
在不同程度上保证数据一致性
遵守第三级封锁协议必然遵守两段协议
并发控制-并发控制概述
并发控制-并发控制概述 来自淘豆网m.daumloan.com转载请标明出处.