Re: algo for canceling a deadlocked transaction - Mailing list pgsql-general

From Thomas Poty
Subject Re: algo for canceling a deadlocked transaction
Date
Msg-id CAN_ctnjHP8BSs6xf-S3NoNcf7usFksDkNcaVYnCdkzjhTWe79A@mail.gmail.com
Whole thread Raw
In response to Re: algo for canceling a deadlocked transaction  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
Hello Tom,

Thank you for the clarification!

Regards, 
 Thomas 

Le lun. 9 avr. 2018 à 17:04, Tom Lane <tgl@sss.pgh.pa.us> a écrit :
Christophe Pettus <xof@thebuild.com> writes:
>> On Apr 9, 2018, at 07:33, Thomas Poty <thomas.poty@gmail.com> wrote:
>> ok, and long  answer ? is it random?

> It's not literally random, but from the application point of view, it's not predictable.  For example, it's not always the one that opened first, or any other consistent measure.

It's whichever one runs the deadlock detector first after the circular
wait becomes established.  For instance:

* Process A takes lock L1

* Process B takes lock L2

* Process A tries to take lock L2, blocks

* Process B tries to take lock L1, blocks (now a deadlock exists)

Process A will run the deadlock detector one deadlock_timeout after
blocking.  If that happens before B has blocked, then A will see
no deadlock and will go back to waiting.  In that case, when B's
own deadlock_timeout expires and it runs the deadlock detector,
it will see the deadlock and fix it by canceling its own wait.
On the other hand, if B started to wait less than one deadlock_timeout
after A did, then A will be first to observe the deadlock and it will
cancel itself, not B.

So you can't predict it unless you have a lot of knowledge about
the timing of events.  You could probably make it more predictable
by making deadlock_timeout either very short or very long, but
neither of those are desirable things to do.

                        regards, tom lane

pgsql-general by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: How to monitor logical replication initial sync?
Next
From: "Daniel Verite"
Date:
Subject: Re: Conflict between JSON_AGG and COPY