MySQL 系列 两段锁协议(2PL)

MySQL 技术内幕:InnoDB存储引擎

Posted by lichao modified on June 22, 2022

两段锁协议规定所有的事务应遵守的准则:

  • 在对任何数据进行读、写操作之前,首先要获得该数据的锁。
  • 在释放一个锁之后,事务不再获取其它任何封锁。

因此把事务的执行分为两个阶段:

  • 第一阶段是获得锁的阶段,称为加锁节点,或者扩展阶段。对任何数据进行读操作之前要获得S锁,在进行写操作之前要获得X锁;如加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。
  • 第二阶段是释放锁的阶段,称为解锁阶段,或者收缩阶段。当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。

结论:

  • 对于遵循两段锁协议的事务,他们的任何调度都是可串行化的。

参考文档

两段锁协议(2PL)