数据库系统工程师 · 高频练习

事务前驱图出现环,为什么不是冲突可串行化调度?

中级 单选题 第 825 题 中等 数据库系统工程师前驱图冲突可串行化事务调度并发控制
题目

并发调度 S 对同一数据项 X 的操作顺序为 r1(X)、r2(X)、w1(X)、w2(X)。按冲突操作建立事务前驱图后,对该调度的正确判断是()。

A 只有 T1→T2,因此等价于先 T1 后 T2 的串行调度
B 只有 T2→T1,因此等价于先 T2 后 T1 的串行调度
C 同时存在 T1→T2 和 T2→T1,图中有环,不是冲突可串行化调度
D 两个事务都读取过 X,因此操作之间不存在冲突
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

r1(X) 在 w2(X) 之前,形成 T1→T2;r2(X) 在 w1(X) 之前,形成 T2→T1。前驱图中两个事务互相指向,构成环,因此该调度不是冲突可串行化调度。两次只读操作本身不冲突,但读写和写写操作会产生冲突边。

选项分析

A

错误。除了 T1→T2,还存在由 r2(X) 与 w1(X) 形成的 T2→T1。

B

错误。除了 T2→T1,还存在由 r1(X) 与 w2(X) 形成的 T1→T2。

C

正确。前驱图有环,因此不能通过交换非冲突操作变成某个串行调度。

D

错误。读读不冲突不代表整个调度无冲突,题目中还有跨事务的读写和写写操作。

本题为什么容易错

同学常把“两个读不冲突”扩大成“两个事务不冲突”。判断要看每一对跨事务操作,只要访问同一数据项并且至少一个是写,就要考虑先后关系。

先看结论

简短答案

事务前驱图出现环,为什么不是冲突可串行化调度,正确答案是 C(同时存在 T1→T2 和 T2→T1,图中有环,不是冲突可串行化调度)。r1(X) 在 w2(X) 之前,形成 T1→T2;r2(X) 在 w1(X) 之前,形成 T2→T1。前驱图中两个事务互相指向,构成环,因此该调度不是冲突可串行化调度。两次只读操作本身不冲突,但读写和写写操作会产生冲突边。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
只有 T1→T2,因此等价于先 T1 后 T2 的串行调度 本题干扰项 错误。除了 T1→T2,还存在由 r2(X) 与 w1(X) 形成的 T2→T1。 看到该词不要急着选,先判断是否真正解决题干问题
只有 T2→T1,因此等价于先 T2 后 T1 的串行调度 本题干扰项 错误。除了 T2→T1,还存在由 r1(X) 与 w2(X) 形成的 T1→T2。 看到该词不要急着选,先判断是否真正解决题干问题
同时存在 T1→T2 和 T2→T1,图中有环,不是冲突可串行化调度 本题正确答案 正确。前驱图有环,因此不能通过交换非冲突操作变成某个串行调度。 看到题干核心场景时优先联想到它
两个事务都读取过 X,因此操作之间不存在冲突 本题干扰项 错误。读读不冲突不代表整个调度无冲突,题目中还有跨事务的读写和写写操作。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 只有 T1→T2,因此等价于先 T1 后 T2 的串行调度:错误。除了 T1→T2,还存在由 r2(X) 与 w1(X) 形成的 T2→T1。
  • 只有 T2→T1,因此等价于先 T2 后 T1 的串行调度:错误。除了 T2→T1,还存在由 r1(X) 与 w2(X) 形成的 T1→T2。
  • 两个事务都读取过 X,因此操作之间不存在冲突:错误。读读不冲突不代表整个调度无冲突,题目中还有跨事务的读写和写写操作。
复习

知识点详解

冲突操作必须属于不同事务、访问同一数据项,并且至少一个操作是写。建立前驱图时,如果 Ti 的冲突操作先于 Tj,就添加 Ti→Tj。图无环时可以进行拓扑排序,拓扑序给出一个与原调度冲突等价的串行执行顺序;图有环时,各事务之间的先后约束互相矛盾,无法得到等价串行顺序。冲突可串行化是比一般视图可串行化更强、也更容易判定的条件,考试通常以前驱图无环作为判断抓手。

备考速记

速记:同项访问至少一写就看冲突;先做的指向后做的,有环就过不了。

并发控制在并发控制场景中的作用

并发控制在本题中的核心价值,是解决“并发调度 S 对同一数据项 X 的操作顺序为 r1(X)、r2(X)、w1(X)、w2(X)。按冲突操作建立事务前驱图后,对该调度的正确判断是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出一串 r、w 操作,要求画前驱图并判断是否冲突可串行化。
  • 前驱图无环时,要求写出一个或多个等价串行顺序。
  • 比较冲突可串行化、视图可串行化和两段锁协议的关系。
并发控制在数据库系统工程师软考中的考法

软考选择题通常不会只考概念定义,还会把并发控制放到并发控制场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

不要只盯最后两个写操作。老师会让你按数据项逐对检查:不同事务访问同一数据项,且至少一个是写操作,就存在冲突。r1 在 w2 前给出 T1→T2,r2 在 w1 前又给出 T2→T1,环就形成了。

考点定位

判断冲突可串行化的标准是前驱图是否无环。无环时拓扑序对应等价串行顺序;有环时不存在满足全部冲突次序的串行排列。

易错提醒

  • 只检查写写冲突,漏掉读写和写读冲突。
  • 边的方向写反,应该从先发生操作所属事务指向后发生操作所属事务。
  • 看到图中存在拓扑节点就认为可串行化,没有检查是否存在环。

备考提示

  • 前驱图无环才有拓扑序,有环就不是冲突可串行化。
  • 两段锁协议是保证调度性质的方法之一,前驱图则是拿到具体调度后进行判断的工具,两者不要混成同一个问题。

你可能还想了解

  • 哪些读写操作属于事务冲突?
  • 事务前驱图的边应该指向哪个方向?
  • 前驱图无环时怎样写等价串行顺序?
  • 两段锁协议和前驱图判断有什么区别?

本文小结

r1(X) 在 w2(X) 前形成 T1→T2,r2(X) 在 w1(X) 前形成 T2→T1。前驱图出现环,无法得到拓扑序,因此该调度不是冲突可串行化调度。