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

两段锁协议为什么能保证冲突可串行化?

中级 单选题 第 473 题 中等 数据库系统工程师两段锁协议并发控制冲突可串行化事务调度
题目

数据库并发控制中,某事务在第一阶段只能申请和获得锁,不能释放锁;一旦开始释放某个锁,就进入第二阶段,此后不能再申请新的锁。该协议通常用于保证并发调度满足哪一类性质?

A 冲突可串行化
B 所有事务都不会等待任何锁
C 所有查询都自动使用哈希索引
D 数据库视图一定可以直接更新原表
题目类型:原创高频考点题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
书木兰刷题练习 适合懒人、小白的刷题通关平台
正确答案
A
答案解析

两段锁协议(2PL)把事务的加锁和解锁过程分成两个阶段:增长阶段只加锁不解锁,收缩阶段只解锁不再加锁。这样可以避免事务一边释放部分资源、一边又申请新资源导致调度顺序难以控制。遵守两段锁协议的并发调度通常能保证冲突可串行化,也就是执行结果等价于某个串行执行顺序。注意,它保证的是可串行化性质,并不保证不会发生等待或死锁。

选项分析

A

正确。遵守两段锁协议的调度通常能保证冲突可串行化。

B

错误。两段锁协议仍可能出现等待,甚至可能发生死锁,需要配合死锁处理机制。

C

错误。哈希索引属于索引结构,与并发调度可串行化不是同一类问题。

D

错误。视图是否可更新取决于视图定义、约束和数据库实现,和两段锁协议无关。

本题为什么容易错

很多同学会把“两段锁能保证可串行化”误听成“两段锁能保证没有死锁”。这是两个层次:可串行化看结果正确性,死锁看事务等待关系会不会卡住。2PL 管前者,不自动消灭后者。

先看结论

简短答案

两段锁协议为什么能保证冲突可串行化,正确答案是 A(冲突可串行化)。两段锁协议(2PL)把事务的加锁和解锁过程分成两个阶段:增长阶段只加锁不解锁,收缩阶段只解锁不再加锁。这样可以避免事务一边释放部分资源、一边又申请新资源导致调度顺序难以控制。遵守两段锁协议的并发调度通常能保证冲突可串行化,也就是执行结果等价于某个串行执行顺序。注意,它保证的是可串行化性质,并不保证不会发生等待或死锁。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
冲突可串行化 本题正确答案 正确。遵守两段锁协议的调度通常能保证冲突可串行化。 看到题干核心场景时优先联想到它
所有事务都不会等待任何锁 本题干扰项 错误。两段锁协议仍可能出现等待,甚至可能发生死锁,需要配合死锁处理机制。 看到该词不要急着选,先判断是否真正解决题干问题
所有查询都自动使用哈希索引 本题干扰项 错误。哈希索引属于索引结构,与并发调度可串行化不是同一类问题。 看到该词不要急着选,先判断是否真正解决题干问题
数据库视图一定可以直接更新原表 本题干扰项 错误。视图是否可更新取决于视图定义、约束和数据库实现,和两段锁协议无关。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 所有事务都不会等待任何锁:错误。两段锁协议仍可能出现等待,甚至可能发生死锁,需要配合死锁处理机制。
  • 所有查询都自动使用哈希索引:错误。哈希索引属于索引结构,与并发调度可串行化不是同一类问题。
  • 数据库视图一定可以直接更新原表:错误。视图是否可更新取决于视图定义、约束和数据库实现,和两段锁协议无关。
复习

知识点详解

事务调度是数据库系统工程师考试中需要结合场景理解的考点。围绕“两段锁协议为什么能保证冲突可串行化”这类题目,复习时要先看题干描述的是概念定义、适用场景、作用效果,还是与其他选项的区别。本题的题干关键词是“数据库并发控制中,某事务在第一阶段只能申请和获得锁,不能释放锁;一旦开始释放某个锁,就进入第二阶段,此后不能再申请新的锁。该协议通常用于保证并发调度满足哪一类性质”,它指向的核心答案是 A(冲突可串行化)。

备考速记

备考速记:题干如果强调“事务调度”中的关键目标,就先联想到 事务调度;如果选项里出现 所有事务都不会等待任何锁、所有查询都自动使用哈希索引、数据库视图一定可以直接更新原表,不要只看名称熟悉,要判断它们是否真正对应题干场景。

事务调度在事务调度场景中的作用

事务调度在本题中的核心价值,是解决“数据库并发控制中,某事务在第一阶段只能申请和获得锁,不能释放锁;一旦开始释放某个锁,就进入第二阶段,此后不能再申请新的锁。该协议通常用于保证并发调度满足哪一类性质”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出事务调度场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查事务调度的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把事务调度和所有事务都不会等待任何锁、所有查询都自动使用哈希索引、数据库视图一定可以直接更新原表放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
事务调度在数据库系统工程师软考中的考法

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

解题思路

这题的题眼是“释放锁以后不能再申请新锁”。老师讲并发控制时会把它说成一条纪律:先把该拿的锁拿齐,再逐步释放,别边放边抢。这个纪律的目标不是让事务完全不等待,而是让并发结果能等价到一个串行顺序。

考点定位

两段锁题要抓住“先增长、后收缩”。它常和封锁、死锁、可串行化放在一起考。2PL 能保证冲突可串行化,但不等于不会死锁。

易错提醒

  • 把增长阶段和收缩阶段顺序记反。
  • 认为只要使用两段锁,就不会发生死锁。
  • 把可串行化和隔离级别名称混在一起,不看题干问的是调度性质还是隔离现象。

备考提示

  • 两段锁记一句:先只加锁,后只解锁。
  • 数据库并发控制建议和脏读、不可重复读、幻读、死锁、封锁协议放在一起复习。
  • 做数据库题时如果遇到“调度是否等价于某个串行顺序”,优先往可串行化方向想。

你可能还想了解

  • 两段锁协议为什么能保证冲突可串行化?
  • 事务调度是什么?
  • 事务调度在数据库系统工程师考试中怎么考?
  • 数据库系统工程师事务调度题怎么理解?
  • 两段锁协议为什么能保证可串行化怎么考?
  • 两段锁协议和死锁区别怎么考?

本文小结

本题核心考点是事务调度在事务调度场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(冲突可串行化)。