数据库总结复习(并发控制二)

发布时间 2023-11-23 23:44:50作者: lmj625

前言

本文为JMU22级数据库原理考前复习而总结归纳,刨除了课本以及课堂上晦涩且长篇大论的文章,以尽量简洁易懂的语句来对知识点进行归纳。

上一篇文章 关于文章末尾提到的“诊断-解除法”接着对并发控制进行归纳总结。
关于并发控制,还会有一篇文章介绍“封锁粒度”的相关内容。



死锁解决方法

超时等待法

先设置规定的时限,一旦有事务超过期限,就认为它处于死锁状态,然后就撤销它。

缺点:如果一个事务过长,会被误判。

等待图法

所有事务作为图节点,如果是事务T1等待事务T2,就画一条T1指向T2的有向边。出现回路就是互相等待,就是死锁。就会撤销。

这两种方法都是撤销代价最小的事务。

串行化

概念

多个事务并行执行的结果如果正确,应该与串行执行操作的结果一样。这样的并行就是可串行化调度。
也可以说可串行性是判断并行调度正确性的准则。

验证串行化

冲突可串行化是串行化的充分条件。(不是必要条件)
冲突是指:不同事务对同一数据对象同时进行写写或读写操作。

判断冲突可串行化

交换不冲突的事务,且保持冲突操作次序不变。如果最后能够变为串行调度,则可串行化,所以存在正确的并发调度方法。

  • 注意,串行化这个词蕴含着,事务各个操作的顺序不能改变。

举例

现有一个调度序列:r1(A)w1(A) r2(A)w2(A) r1(B)w1(B) r2(B)w2(B)
r1(A)代表,事务1对数据对象A进行读操作。
分析该序列,是事务1和2并行对数据对象A和B进行读写操作。
事务1:r1(A)w1(A)r1(B)w1(B)
事务2:r2(A)w2(A)r2(B)w2(B)

 

所以要想办法通过交换不冲突的事务来串行化,注意到事务1在第一位置,所以接下来就尝试按先1后2来串行。所以要把2换到后面。

image

为了保证可串行而出现的封锁协议--两段锁协议

概念

两段锁协议就是事务加锁解锁构成的整个操作序列,一定要是先加锁后解锁,不能加锁和解锁混杂。并且对任何读写操作都要加锁。
两段锁协议是可串行化调度的充分条件(非必要)。

与一次封锁的区别

一次封锁是事务开头全部加锁。导致成为串行。
两段锁是操作之前加锁。有一定程度的并行。