面试题答案
一键面试1. PostgreSQL死锁检测机制发现死锁的方式
PostgreSQL采用**等待图(Wait-for Graph,WFG)**算法来检测死锁。等待图是一个有向图,图中的节点是事务,边表示事务之间的等待关系。当事务A等待事务B持有的锁时,就会在等待图中创建一条从A到B的边。如果在等待图中检测到环,就意味着发生了死锁。
2. 事务执行过程中可能触发死锁检测的操作
- 锁获取操作:当事务尝试获取一个已被其他事务持有的锁时,会触发死锁检测。例如,一个事务试图获取行级排他锁(X锁),而该锁已被另一个事务持有,此时就会开始检查等待图是否存在环。
- 锁升级操作:在某些情况下,事务可能会将锁从较低级别升级到更高级别。例如,从共享锁(S锁)升级到排他锁(X锁)。如果在升级过程中,发现需要等待其他事务释放锁,也会触发死锁检测。
3. 死锁检测的频率
死锁检测的频率并不是固定的。每次事务尝试获取锁且该锁被其他事务持有时,就会进行死锁检测。这意味着死锁检测会在锁竞争发生时频繁进行,只要有事务等待锁,就会检查等待图,而不是按照固定的时间间隔去检测。