log_lock_failures

一个控制锁获取失败日志记录的 GUC 参数

log_lock_failures 是一个 配置参数,用于决定当锁获取失败时是否生成详细的日志消息。

log_lock_failuresPostgreSQL 18 中添加。

默认

log_lock_failures 的默认值为:off

用法

截至 PostgreSQL 18,仅记录由于 SELECT ... NOWAIT 导致的锁失败。

按 PostgreSQL 版本详细信息

log_lock_failures (PostgreSQL 19)

设置 off
单位  
类别 报告和日志记录 / 记录什么
简短描述 记录锁失败。
扩展描述  
上下文 superuser
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 off
重置值 off
源文件  
源行  
需要重启 false

文档: log_lock_failures

log_lock_failures (PostgreSQL 18)

设置 off
单位  
类别 报告和日志记录 / 记录什么
简短描述 记录锁失败。
扩展描述  
上下文 superuser
变量类型 bool
来源 默认
最小值  
最大值  
枚举值  
启动值 off
重置值 off
源文件  
源行  
需要重启 false

文档: log_lock_failures

变更历史

示例

一个会话中的 log_lock_failures 的基本用法示例 - 假设以下事务在一个会话中执行

postgres=# BEGIN;
BEGIN

postgres=*# SELECT * FROM foo FOR UPDATE NOWAIT;
 id 
----
  1
(1 row)

同一个事务在另一个会话中会失败

postgres=# BEGIN;
BEGIN
postgres=*# SELECT * FROM foo FOR UPDATE NOWAIT;
ERROR:  could not obtain lock on row in relation "foo"
postgres=!#

并且日志文件将包含类似以下的条目

[2025-03-15 15:44:47 UTC] psql postgres postgres LOG:  00000: process 341755 could not obtain ShareLock on transaction 767
[2025-03-15 15:44:47 UTC] psql postgres postgres DETAIL:  Process holding the lock: 342443, Wait queue: .
[2025-03-15 15:44:47 UTC] psql postgres postgres STATEMENT:  SELECT * FROM foo FOR UPDATE NOWAIT;
[2025-03-15 15:44:47 UTC] psql postgres postgres ERROR:  55P03: could not obtain lock on row in relation "foo"

分类

GUC 配置项, 锁定, 日志记录

另请参阅

log_lock_waits

反馈

提交有关“log_lock_failures”的任何评论、建议或更正,请在此处 提交