Re: Patch: Show queries of processes holding a lock
Alexey Orlov <aporlov@gmail.com>
From: Alexey Orlov <aporlov@gmail.com>
To: David Rowley <dgrowleyml@gmail.com>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2024-10-03T09:32:59Z
Lists: pgsql-hackers
Attachments
- v-3-0001-Show-queries-in-log_lock_wait_log.patch (text/x-patch) patch 0001
On Thu, Oct 3, 2024 at 3:58 AM David Rowley <dgrowleyml@gmail.com> wrote: > > On Tue, 1 Oct 2024 at 21:04, Alexey Orlov <aporlov@gmail.com> wrote: > > session 1: > > CREATE TABLE foo (val integer); > > INSERT INTO foo (val) VALUES (1); > > BEGIN; > > UPDATE foo SET val = 3; > > > > session 2: > > BEGIN; > > UPDATE TABLE foo SET val = 2; > > > > LOG: process 3133043 still waiting for ShareLock on transaction 758 > > after 1000.239 ms > > DETAIL: Process holding the lock: 3132855. Wait queue: 3133043. > > Process 3132855: update foo SET val = 3; > > CONTEXT: while updating tuple (0,7) in relation "foo" > > STATEMENT: update foo SET val = 2; > > > What do you think? > > Can you explain why the last query executed by the blocking process is > relevant output to show? Are you just hoping that the last statement > to execute is the one that obtained the lock? Wouldn't it be confusing > if the last query to execute wasn't the query which obtained the lock? > > David Thanks for the review! I completely agree with you, relying on chance is wrong. What if I do a small check? I’ll check whether the command string has changed during the DeadLockTimeout. And if so we will see in the log: Process holding the lock: 1057195. Wait queue: 1057550. Process 1057195: <command string has been changed> I have shared updated patch[3] -- Regards, Alexey Orlov!