Hi all,
I'm trying to analyze a deadlock that I have in one of our environments.
The deadlock message :

06:15:49 EET db 14563  DETAIL:  Process 14563 waits for ShareLock on
transaction 1017405468; blocked by process 36589.
Process 36589 waits for ShareLock on transaction 1017403840; blocked by
process 14563.
Process 14563: delete from tableB where a in (select id from tableA where c
in (....)
Process 36589: delete from tableA where c in (....)
06:15:49 EET db 14563  HINT:  See server log for query details.
06:15:49 EET db 14563  STATEMENT:  delete from tableB where a in (select id
from tableA where c in (....)
06:15:49 EET db 36589  LOG:  process 36589 acquired ShareLock on
transaction 1017403840 after 1110158.778 ms
06:15:49 EET db 36589  STATEMENT:  delete from tableA where c in (....)
06:15:49 EET db 36589  LOG:  duration: 1110299.539 ms  execute <unnamed>:
delete from tableA where c in (...)

tableA : (id int, c int references c(id))
tableB : (id int, a int references a(id) on delete cascade)
tableC(id int...)

One A can have Many B`s connected to (One A to Many B).

deadlock_timeout is set to 5s.

Now I'm trying to understand what might cause this deadlock. I think that
its related to the foreign keys... I tried to do a simulation in my env :

transaction 1 :
delete from a;
<left in the background, no commit yet >

transaction 2 :
delete from b;

but I couldnt recreate the deadlock, I only had some raw exclusive locks :

postgres=# select
locktype,relation::regclass,page,tuple,virtualxid,transactionid,virtualtransaction,mode,granted
from pg_locks where database=12870;
 locktype | relation | page | tuple | virtualxid | transactionid |
virtualtransaction |       mode       | granted
----------+----------+------+-------+------------+---------------+--------------------+------------------+---------
 relation | b        |      |       |            |               |
51/156937          | RowExclusiveLock | t
 relation | a_a_idx  |      |       |            |               |
51/156937          | RowExclusiveLock | t
 relation | a        |      |       |            |               |
51/156937          | RowExclusiveLock | t
 relation | pg_locks |      |       |            |               |
53/39101           | AccessShareLock  | t
 relation | a_a_idx  |      |       |            |               |
52/29801           | AccessShareLock  | t
 relation | a        |      |       |            |               |
52/29801           | AccessShareLock  | t
 relation | b        |      |       |            |               |
52/29801           | RowExclusiveLock | t
 tuple    | b        |    0 |     1 |            |               |
51/156937          | ExclusiveLock    | t
(8 rows)


What do you guys think ?

Reply via email to