Agent Skills
返回列表
🔒

先查实时等待锁压,再用 pg_activity 定位瓶颈

IT 运维与安全 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/inspect-live-postgresql-waits-locks-and-pressure-before-guessing-at-the-bottleneck-with-pg-activity

技能介绍

故障排查中的盲目猜测与实时视图的缺失

当 PostgreSQL 数据库遭遇性能突降或连接堆积时,运维工程师往往急于打开 pg_activity 查看当前正在执行的查询。然而,仅看活跃查询无法解释资源耗尽的原因。如果缺乏对全局等待事件、锁竞争和系统压力的实时洞察,很容易将“等待锁的受害会话”误判为“引发阻塞的源头”,从而做出错误的 kill 会话或重启决定。

核心工作流:从全局压力到具体会话

该技能的核心是建立“先观全局,再定局部”的排查范式。介入故障时,它引导你首先拉起实时的 PostgreSQL 活动视图,聚合分散在多个系统视图中的指标。

  • 监控等待与锁竞争:实时捕获 pg_locks 和等待事件,快速识别阻塞后续操作的锁类型(如 RowExclusiveLock)。
  • 评估系统压力:结合后端进程状态,直观呈现数据库面临的瞬时压力点,而非孤立看待单个查询。
  • 交叉验证会话状态:确认全局等待和锁队列后,再回溯到具体会话,结合 pg_activity 数据精准定位引发雪崩的源头。

适用边界与运行前提

使用前需明确其运行边界。目标环境必须具备有效的 PostgreSQL 连接权限及终端访问能力。其次,运行该工具的用户必须与 PostgreSQL 服务进程用户一致(通常是 postgres),否则可能因权限不足无法读取关键的系统级等待状态。它提供的是排查的“视窗”与逻辑框架,而非自动修复脚本,最终决策仍依赖工程师对底层原理的理解。

使用场景

  • 生产环境数据库响应突然变慢时,需快速确认是活跃查询过多还是锁等待导致的积压
  • 处理 PostgreSQL 连接池耗尽告警时,需排查是否存在长时间未释放的锁阻塞后续会话
  • 计划重启或执行 DDL 变更前,需实时检查当前的锁冲突情况以避免引发线上雪崩

适合人员

  • 负责线上数据库运维的工程师,需要在故障发生时避免因误判源头而做出错误的重启决定
  • 参与数据库性能调优的开发者,希望在修改复杂查询前排查全局等待与系统压力点
  • 需要执行数据库架构变更的团队,期望在变更前确认当前会话锁状态以确保操作安全