Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Непонятный deadlock  [new]
Kr_Yury
Member

Откуда: Киев, Украина
Сообщений: 202
Смотрю системный лог. Для каждой из транзакций, участвующих в deadlock указана причина
while locking tuple (529,6) in relation ...
То есть две транзакции спорят за один ресурс (запись таблицы). Какое отношение это вообще имеет к deadlock?
В коде используется
Select ... for update
. Подозреваю, что эту общую запись вообще может удерживать третья транзакция. Но всё-равно никаких причин для deadlock не вижу. Версия Posrtgresql 10.10. Кто-нибудь может объяснить ситуацию?
Может ли это быть связано с тем, что
Select ... for update
выполняется в триггерной функции? В коде есть несколько
Select ... for update
на разных таблицах, но проблемы только с одной.
C Postgresql работаю пол года, но есть 16 лет опыта работы с Oracle и с deadlock в Oracle сталкивался не раз. В Oracle ситуация deadlock соответствует классическому описанию: транзакция 1 владеет ресурсом А и ожидает ресурс Б, транзакция 2 владеет ресурсом Б и ожидает ресурс А.
4 фев 20, 09:48    [22072397]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный deadlock  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4071
Kr_Yury
Смотрю системный лог. Для каждой из транзакций, участвующих в deadlock указана причина
while locking tuple (529,6) in relation ...
То есть две транзакции спорят за один ресурс (запись таблицы). Какое отношение это вообще имеет к deadlock?
В коде используется
Select ... for update
. Подозреваю, что эту общую запись вообще может удерживать третья транзакция. Но всё-равно никаких причин для deadlock не вижу. Версия Posrtgresql 10.10. Кто-нибудь может объяснить ситуацию?
Может ли это быть связано с тем, что
Select ... for update
выполняется в триггерной функции? В коде есть несколько
Select ... for update
на разных таблицах, но проблемы только с одной.
C Postgresql работаю пол года, но есть 16 лет опыта работы с Oracle и с deadlock в Oracle сталкивался не раз. В Oracle ситуация deadlock соответствует классическому описанию: транзакция 1 владеет ресурсом А и ожидает ресурс Б, транзакция 2 владеет ресурсом Б и ожидает ресурс А.


В postgresql deadlocks ровно такие же как и во всем мире...
а более конкретно по тем обрывкам лога что вы прислали - не понять.
Полезно если такое воспроизводимо вылезает - включить полный лог запросов и посмотреть что каждая из 2х транзакций делала и в какой последовательности.... обычно все сразу становится очевидно.
4 фев 20, 16:35    [22072881]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить