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

40P01: deadlock_detected

PostgreSQL

O que significa?

Duas ou mais transações entraram em deadlock, cada uma aguardando locks mantidos pela outra. O PostgreSQL detecta o ciclo e cancela uma das transações.

Por que acontece?

Locks adquiridos em ordens diferentes, atualizações cruzadas das mesmas linhas, transações longas, ou locks conflitantes obtidos durante verificações de foreign key.

Como resolver

O detalhe do deadlock no log do servidor mostra as consultas em conflito. Acesse tabelas/linhas na mesma ordem em todas as transações. Mantenha as transações curtas. Capture a transação cancelada na aplicação e tente novamente. Faça join de pg_locks com pg_stat_activity para examinar os locks. Se necessário, torne a ordem dos locks explícita com SELECT ... FOR UPDATE.

Abrir no DBAtlas →

Mais entradas deste banco