DBAtlas · 数据库运维图谱

55P03: lock_not_available

PostgreSQL

含义

无法立即获取所请求的锁。通常发生在他人持有锁时以 NOWAIT 请求该锁,或 lock_timeout 到期时。

原因

使用 SELECT ... FOR UPDATE NOWAIT 或 LOCK TABLE ... NOWAIT 时行/表已被锁定,或 lock_timeout 到期。大多数情况下是某个长事务持有该锁。

解决方法

找出阻塞会话:关联 pg_locks 和 pg_stat_activity(等待/阻塞关系)。结束长事务,必要时用 pg_terminate_backend(pid) 终止它。不使用 NOWAIT,而是以合理的 lock_timeout 等待并添加重试逻辑。缩短事务以减少持锁时间。

在 DBAtlas 中打开 →

同一数据库的其他条目