在 PostgreSQL 中,死锁(Deadlock)是指两个或多个事务在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力干涉,它们都将无法继续执行。 PostgreSQL 拥有一套成熟的机制来延迟触发、检测并处理死锁。以下是其底层原理和处理流程的详细解析: --- 1. 触发机制:延迟检测 (Delayed Detection) PostgreSQL 不会在每次发生锁等待时立即进行死锁检测,因为死锁检测(构建图、寻找环)是一个消耗 CPU 和内存的昂贵操作。 依赖参数 : PostgreSQL 使用一个名为 的配置参数(默认值为 1 秒)。 工作原理: 当一个事务请求锁并被阻塞时,它只会安静地等待。只有当等待时间超过了 指定的时间后,PostgreSQL 的死锁检测器才会被唤醒。 设计哲学: 绝大多数的锁等待都会在几毫秒到几十毫秒内解决。等待超过 1 秒(默认值)意味着系统可能出现了死锁,或者出现了严重的性能瓶颈。此时付出代价去检测死锁是值得的。 2. 检测算法:等待图与环路检测 (Wait-For Graph & Cycle Detection) 一旦死锁检测器被唤...