两阶段加锁
两阶段枷锁(two-phase locking,2PL)是近 30 年来数据库唯一一种被广泛使用的串形化算法。 多个事务可以同时读取同一个对象,但只要出现任何写操作(修改或删除),则必须加锁以独占访问。
两阶段包括:
- 事务执行之前要获得锁(第一阶段)
- 事务结束之后要释放锁(第二阶段)
实现⌗
2PL 用于 MySQL(InnoDB)和 SQL Server 中的“可串形化隔离”,以及 DB2 的“可重复读”。
每个对象通过一个「读写锁」隔离读写操作。
- 共享锁进行读取。
- 独占锁进行修改。
- 读取先获取共享锁,如果要修改则升级为独占锁。
- 事务获得锁之后一直持有到事务结束。
性能⌗
慢和死锁
谓词锁⌗
通过对区间条件加谓词锁。