Re: Re: [pgsql-ru-general] Дедлоки и FOREIGN(pg9.1.2) - Mailing list pgsql-ru-general

From Dmitry E. Oboukhov
Subject Re: Re: [pgsql-ru-general] Дедлоки и FOREIGN(pg9.1.2)
Date
Msg-id 20121221102044.GA8447@vdsl.uvw.ru
Whole thread Raw
In response to Re: [pgsql-ru-general] Дедлоки и FOREIGN (pg9.1.2)  (Sergey Konoplev <gray.ru@gmail.com>)
List pgsql-ru-general
>> orders_logs - имеет FOREIGN на users и orders соответственно (uid,
>> oid)
>>
>> Кронскрипт иногда юзерам обновляет статусы
>>
>> UPDATE
>>     users
>> SET
>>     status = что-то там,
>>     time = NOW()
>> WHERE
>>     id = что-то там
>>
>> а в orders_logs иногда пишутся события:
>>
>> INSERT INTO
>>     "orders_logs"
>>
>>         ("uid", "oid", "time", "event")
>> VALUES
>>     (123, 2345, NOW(), что-то там)
>>
>> и вот обновление статуса у юзера изредка встает в дедлок с инсертом в
>> orders_logs.
>>
>> как такой дедлок можно вылечить?

> Судя по всему инсерты идут пачками в транзакции, так?

> Можно ли отказаться от транзакции, делая отдельные инсерты?

инсерты идут по одному.

но вот дедлочится тот (первый) инсерт который идет в одной транзакции
с вставкой в ордер.

собственно вставка выглядит так:

BEGIN TRANSACTION;

INSERT INTO orders ... RETURNING "id"
INSERT INTO orders_logs
    oid = вставленый_выше id,
    uid = определенный вне транзакции uid,
    comment = 'Заказ такой-то создан'

COMMIT


таблица orders не имеет ссылок ни на какие другие таблицы.
таблица orders_logs имеет ссылки на users и orders

дедлочится это с запросом (вне транзакции)

UPDATE
    users
SET
    status = что-то
WHERE
    id = тот же юзер что и выше


связь я улавливаю, но природу дедлока понять не могу :)

--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment

pgsql-ru-general by date:

Previous
From: Sergey Konoplev
Date:
Subject: Re: [pgsql-ru-general] Дедлоки и FOREIGN (pg9.1.2)
Next
From: Alexey Klyukin
Date:
Subject: Re: [pgsql-ru-general] [pgsql-ru-general] Дедлоки и FOREIGN (pg9.1.2)