文档介绍:第八章并发控制技术
并发控制
为什么要并发执行事务?
为什么要进行并发控制?
如何进行并发控制?
如何解决并发控制可能带来的问题?
如何保证并发控制的灵活性和效率?
为什么要并发执行事务(一)
串行执行方式
T2
T1
Time
Read B (10)
Read A (16)
B = B- 1
(9)
A = A-1
(15)
Write B
Write A
为什么要并发执行事务(二)
并发执行方式
T2
T1
Time
Read B (10)
Read A (16)
B = B- 1
(9)
A = A-1
(15)
Write B
Write A
为什么要并发执行事务(三)
并发执行的优点
一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量,改善系统的资源的利用率。
系统中存在着周期不等的各种事务,串行会导致难以预测的时延。采用并发会减少平均响应时间,特别是改善短事务的响应时间。
并发执行的问题:丢失修改
两个事务T1和T2读入同一数据并修改, T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
T2
T1
Time
C=200
Read C (200)
Read C (200)
C=C-100
(100)
C = C-100
(100)
Write C
C=100
C = 100
Write C
C=100
并发执行的问题:不可重复读
事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读取该数据时,得到与前一次不同的值。
T2
T1
Time
D=1
Read D(1)
Read D (1)
Read D
(0)
Write D
D=0
D=D-1(0)
并发执行的问题:不可重复读之幻影行
事务T1按照一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按照相同条件读取数据时,发现某些记录神秘的消失了。
T1
T2
Time
Select count (*) From SC
o = ‘C1’
返回2行
Delete
S1,C1,80
S2,C1,70
S1,C1,80
S2,C1,70
Select count (*) From SCo=‘C1’
返回1行
并发执行的问题:不可重复读之幻影行
事务T1按照一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按照相同条件读取数据时,发现多了一些记录。
T1
T2
Time
Select count (*) From SCo = ‘C1’
返回2行
Insert
S3,C1,60
S1,C1,80
S2,C1,70
S3,C1,60
S1,C1,80
S2,C1,70
Select count (*) From SCo = ‘C1’
返回3行
并发执行的问题:读“脏”数据
读“脏”数据(Dirty Read) 是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复为原值,T2读到的数据就与数据库中的不一致,则T2读到的数据就为“脏”数据。
T2
T1
Time
C=0
Read C (10000)
Read C (0)
C=C+10000
(10000)
C=10000
Write C
C=0
Rollback
可能执行
错误的操作