跳到主内容
培训资料专业资料更新于 2026-07-286 分钟阅读

PostgreSQL 锁等待怎么查:pg_blocking_pids 脱敏脚本与阻塞链手册

下载经过 PostgreSQL 14-18 隔离验证的只读脚本,用 pg_stat_activity 与 pg_blocking_pids 形成不含 query、身份或对象名的等待链快照。

摘要

面向 PostgreSQL DBA、数据平台和应用团队,用可执行SQL、证据表、时间窗口和反证形成候选阻塞链,再由负责人决定巡检或单独授权的修复。

适用对象

PostgreSQL DBA数据平台团队应用负责人值班工程师
核心结论
  • 可下载SQL已在PostgreSQL 14.20、15.18、16.14、17.10与18.4隔离合成锁等待中通过。
  • 先固定问题时间窗、数据库、应用和业务影响,再保存等待进程、阻塞进程、事务与查询起点。
  • `pg_locks`展示当前锁状态快照,需要结合`pg_stat_activity`、时间窗口和应用行为判断。
  • 候选头部阻塞者只是需要继续核验的对象;一次快照不能说明事务用途、持续时间或终止后的回滚影响。
  • 工作表只保存脱敏标识和只读摘要;不得仅凭一次快照自动终止会话或修改事务。
01搜索问题

怎样用只读证据找到锁等待链

把锁快照与活动会话、时间窗口和应用行为关联起来,而不是只盯住一个 pid。

先为等待进程记录`wait_event_type`、`wait_event`、事务起点、查询起点和脱敏query_id,再核对它正在等待的锁类型、对象以及候选阻塞进程。所有时间都要带时区并落在同一问题窗口。

应用名称、发布窗口和业务影响可以说明为什么这个等待重要;未受影响的数据库、应用或时间段则是反证。二者都应保留,防止把偶发快照写成确定根因。

阻塞链首轮证据
证据组填写内容可以帮助判断不能单独证明
问题窗口版本、时区、开始/结束、数据库、业务影响现象和证据是否处于同一窗口不能定位具体阻塞者
活动会话脱敏pid、状态、事务/查询起点、等待事件哪些进程正在等待以及持续边界等待不一定来自锁
锁与对象阻塞pid、锁类型、relation、granted候选等待关系和对象范围一次快照不能证明长期链路
应用与变更脱敏应用、发布、批处理、连接行为是否存在共同时间线时间相关不等于因果
反证与结论未受影响范围、替代解释、证据缺口结论是否经得住反向核对不能自动授权生产动作
02执行工作流

从等待进程到候选头部阻塞者的五步复核

每一步都只记录最小必要信息。若权限不足或快照已经消失,应标记“缺失”而不是补写推测;若需要增加采集、取消查询、终止进程或修改事务,应进入单独的风险评审。

PostgreSQL锁等待只读复核

  1. 01

    01

    固定窗口

    记录版本、时区、数据库、应用、现象和业务影响。

  2. 02

    02

    记录等待者

    保存脱敏pid、状态、事务/查询起点和等待事件。

  3. 03

    03

    关联锁快照

    记录锁类型、对象、granted和候选阻塞pid。

  4. 04

    04

    核对应用行为

    对照发布、批处理、连接管理和未受影响范围。

  5. 05

    05

    人工决定

    写明候选头部阻塞者、反证、缺口和下一步权限。

一次快照只用于形成候选解释,不自动触发取消查询、终止进程、提交或回滚事务。

03可用交付物

下载PostgreSQL锁等待只读SQL与证据表

SQL只输出快照内`wait-N`与`block-N`代号、等待类型、等待事件、状态、事务年龄区间和阻塞者数量,不输出真实pid、query、库名、用户名、应用名、对象名或地址。CSV可补充问题窗口、业务影响与反证;无权采集的字段写“缺失”或“需授权”。若首轮材料仍无法分级,可进入B-HC固定范围服务。发布后第14天看资料到自查或服务的有效动作,第30天看有效线索,第90天才决定是否调整页面;下载、点击和QA不算商业结果。

本节判断

  • 适用PostgreSQL 14-18;13及更早版本、生产和客户环境未验证。
  • 缺少`pg_read_all_stats`或等价可见性时返回`insufficient_visibility`,不误写为没有锁等待。
  • 记录`pg_locks`与`pg_stat_activity`采集时间,不把不同快照拼成确定链路。
  • 同时保存候选头部阻塞者、反证和证据缺口。
  • B-HC不包含自动终止会话、修改事务、生产改库或恢复效果承诺。

参考依据

以下来源用于确认市场趋势、政策背景和术语边界;具体落地方案仍以客户的数据范围、权限和交付目标为准。

常见问题

pg_locks看到未授予的锁后是否就能终止阻塞进程?

不能。还要确认阻塞链、事务用途、持续时间、业务责任、回滚影响和审批权限。单次快照只能支持进一步核验。

为什么要同时看pg_stat_activity?

pg_locks描述锁状态,pg_stat_activity补充会话状态、事务和查询起点、等待事件及应用信息。两者结合才能把锁与当前活动关联。

快照已经消失还能得出结论吗?

只能记录现象和已有证据,不能补写确定根因。需要复现或增加采集时,应评估权限、数据敏感性和生产负载后另行授权。