Re: Add “FOR UPDATE NOWAIT” lock details to the log.

Поиск
Список
Период
Сортировка
От Seino Yuki
Тема Re: Add “FOR UPDATE NOWAIT” lock details to the log.
Дата
Msg-id bf311da15bdcfaea95deb636f9089888@oss.nttdata.com
обсуждение исходный текст
Ответ на Re: Add “FOR UPDATE NOWAIT” lock details to the log.  (Fujii Masao <masao.fujii@oss.nttdata.com>)
Ответы Re: Add “FOR UPDATE NOWAIT” lock details to the log.
Список pgsql-hackers
Thank you for Review.

> Could you explain how to reproduce this? In my quick test,
> lock waits canceled by lock_timeout didn’t report either xid or PID,
> so I might be missing something.
It seems to be outputting on my end, how about you?
===== Console =====
postgres=# SHOW log_lock_waits;
  log_lock_waits
----------------
  on
(1 row)

postgres=# SHOW lock_timeout;
  lock_timeout
--------------
  2s
(1 row)

(tx1) postgres=# BEGIN;
       BEGIN
       postgres=*# SELECT aid FROM pgbench_accounts WHERE aid = 1 FOR 
UPDATE;
        aid
       -----
          1
       (1 row)
(tx2) postgres=# SELECT aid FROM pgbench_accounts WHERE aid = 1 FOR 
UPDATE;
       ERROR:  canceling statement due to lock timeout
       CONTEXT:  while locking tuple (0,1) in relation "pgbench_accounts"

===== Log Output =====
# lock start
2024-10-17 17:49:58.157 JST [1443346] LOG:  process 1443346 still 
waiting for ShareLock on transaction 770 after 1000.096 ms
2024-10-17 17:49:58.157 JST [1443346] DETAIL:  Process holding the lock: 
1443241. Wait queue: 1443346.
2024-10-17 17:49:58.157 JST [1443346] CONTEXT:  while locking tuple 
(0,1) in relation "pgbench_accounts"
2024-10-17 17:49:58.157 JST [1443346] STATEMENT:  SELECT * FROM 
pgbench_accounts WHERE aid = 1 FOR UPDATE;
# lock timeout
2024-10-17 17:49:59.157 JST [1443346] ERROR:  canceling statement due to 
lock timeout
2024-10-17 17:49:59.157 JST [1443346] CONTEXT:  while locking tuple 
(0,1) in relation "pgbench_accounts"
2024-10-17 17:49:59.157 JST [1443346] STATEMENT:  SELECT * FROM 
pgbench_accounts WHERE aid = 1 FOR UPDATE;


> I think NOWAIT is often used for lock waits that can fail frequently.
> Logging detailed information for each failed NOWAIT lock wait could
> lead to excessive and potentially noisy log messages for some users.
> 
> On the other hand, I understand that even with NOWAIT, we might want
> to investigate why a lock wait failed. In such cases,
> detailed information about the locking process would be useful.
> 
> Considering both points, I’m leaning toward adding a new GUC parameter
> to control whether detailed logs should be generated for failed
> NOWAIT locks (and possibly for those canceled by lock_timeout).
> Alternatively, if adding a new GUC is not ideal, we could extend
> log_lock_waits to accept a new value like 'error,' which would trigger
> detailed logging when a lock wait fails due to NOWAIT, lock_timeout,
> or cancellation.
That's a good idea. I'll try that.

> I got the following compiler errors;
thank you. I missed it.

Regards,
--
Yuki Seino
NTT DATA CORPORATION



В списке pgsql-hackers по дате отправления: