Re: Add “FOR UPDATE NOWAIT” lock details to the log.
Fujii Masao <masao.fujii@oss.nttdata.com>
From: Fujii Masao <masao.fujii@oss.nttdata.com>
To: Yuki Seino <seinoyu@oss.nttdata.com>,
Jelte Fennema-Nio <postgres@jeltef.nl>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2025-02-18T16:08:45Z
Lists: pgsql-hackers
On 2025/02/18 18:33, Yuki Seino wrote: > > On 2025/02/13 2:31, Jelte Fennema-Nio wrote: >> On Wed, 12 Feb 2025 at 12:32, Fujii Masao<masao.fujii@oss.nttdata.com> wrote: >>>> What do you think if we simply don't log anything for SKIP LOCKED? >>> Implementing both NOWAIT and SKIP LOCKED could take time and make the patch >>> more complex. I'm fine with focusing on the NOWAIT case first as an initial patch. >> I think that makes sense. It's a fairly common pattern to use SKIP >> LOCKED to implement a concurrent job queue. Having such a usecase >> suddenly create lots of logs seems undesirable, especially since it >> created no logs at all before. Since NOWAIT already results in an >> error (and thus a log), having it add some additional info seems >> totally reasonable. > > Thank you for the advice. For now, my goal is to output only NOWAIT. Since lock.c cannot reference LockWaitPolicy, I believe we need to extend the IF conditions in LockAcquire, LockAcquireExtended, and their higher-level functions. This could be a pretty significant modification. I’ll think about whether there’s a better approach. I welcome any good ideas from everyone too. Just an idea, but how about updating ConditionalXactLockTableWait() to do the followings? - Use LockAcquireExtended() instead of LockAcquire() to retrieve the LOCALLOCK value. - Generate a log message about the lock holders, from the retrieved the LOCALLOCK value. - Return the generated log message to the caller (heap_lock_tuple()), allowing it to log the message. Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION
Commits
-
Rename log_lock_failure GUC to log_lock_failures for consistency.
- 73bdcfab35ec 18.0 landed
-
Add GUC option to log lock acquisition failures.
- 6d376c3b0d1e 18.0 landed
-
Split ProcSleep function into JoinWaitQueue and ProcSleep
- 3c0fd64fec8e 18.0 cited