先查实时等待锁压,再用 pg_activity 定位瓶颈
将以下提示词粘贴到你的 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 变更前,需实时检查当前的锁冲突情况以避免引发线上雪崩
适合人员
- 负责线上数据库运维的工程师,需要在故障发生时避免因误判源头而做出错误的重启决定
- 参与数据库性能调优的开发者,希望在修改复杂查询前排查全局等待与系统压力点
- 需要执行数据库架构变更的团队,期望在变更前确认当前会话锁状态以确保操作安全