DBAtlas · Atlas de operações de banco de dados

55P03: lock_not_available

PostgreSQL

O que significa?

O lock solicitado não pôde ser adquirido imediatamente. Geralmente acontece quando um lock é solicitado com NOWAIT enquanto outra sessão o mantém, ou quando o lock_timeout expira.

Por que acontece?

A linha/tabela estar bloqueada durante o uso de SELECT ... FOR UPDATE NOWAIT ou LOCK TABLE ... NOWAIT, ou a expiração do lock_timeout. Na maioria das vezes, uma transação longa está mantendo o lock.

Como resolver

Encontre a sessão bloqueadora: faça join de pg_locks e pg_stat_activity (relação de espera/bloqueio). Finalize a transação longa ou, se necessário, encerre-a com pg_terminate_backend(pid). Em vez de NOWAIT, aguarde com um lock_timeout razoável e adicione lógica de retry. Encurte as transações para reduzir o tempo de retenção dos locks.

Abrir no DBAtlas →

Mais entradas deste banco