两阶段锁(2PL)是应用于单个事务还是整个调度?
两阶段锁(2PL)的作用范围:单个事务还是整个调度?
之前在Database Administrators Stack Exchange上看到一个问题,刚好戳中我之前对2PL的误解,索性结合《Database System: The Complete Book》第二版(ISBN 9780131873254)第900-901页的定义来梳理清楚这个问题。
先给大家放上书本里的权威定义:
存在一个名为两阶段锁(或2PL)的特殊条件,在该条件下可确保一致事务的合法调度具备冲突可串行化特性:每个事务中所有加锁操作均先于所有解锁操作……
针对核心问题——2PL是应用于每个事务还是整个调度?,答案很明确:
- 2PL是针对单个事务制定的锁协议,要求每个事务自身必须遵守"先加锁、后解锁"的两阶段规则:事务的生命周期被划分为两个阶段,第一阶段只能执行加锁操作(不能解锁),第二阶段只能执行解锁操作(不能加锁)。
- 而整个调度的冲突可串行化特性,是建立在所有参与调度的事务都遵守2PL规则的基础上的。只有当每个事务都严格遵循2PL时,整个调度才能保证具备冲突可串行化的特性。
内容的提问来源于stack exchange,提问作者isakbob
相关产品推荐
相关产品推荐

