pgsentinel

活跃会话历史

概览

扩展包名版本分类许可证语言
pgsentinel1.4.1STATPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
6410pgsentinel-
相关扩展system_stats pgnodemx pg_stat_monitor pg_wait_sampling bgw_replstatus pg_profile pg_proctab powa

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED1.4.11817161514pgsentinel-
RPMPIGSTY1.4.11817161514pgsentinel_$v-
DEBPGDG1.4.11817161514postgresql-$v-pgsentinel-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
u22.x86_64
u22.aarch64
u24.x86_64
u24.aarch64

构建

您可以使用 pig build 命令构建 pgsentinel 扩展的 RPM / DEB 包:

pig build pkg pgsentinel         # 构建 RPM / DEB 包

安装

您可以直接安装 pgsentinel 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pgsentinel;          # 当前活跃 PG 版本安装
pig ext install -y pgsentinel -v 18  # PG 18
pig ext install -y pgsentinel -v 17  # PG 17
pig ext install -y pgsentinel -v 16  # PG 16
pig ext install -y pgsentinel -v 15  # PG 15
pig ext install -y pgsentinel -v 14  # PG 14
dnf install -y pgsentinel_18       # PG 18
dnf install -y pgsentinel_17       # PG 17
dnf install -y pgsentinel_16       # PG 16
dnf install -y pgsentinel_15       # PG 15
dnf install -y pgsentinel_14       # PG 14
apt install -y postgresql-18-pgsentinel   # PG 18
apt install -y postgresql-17-pgsentinel   # PG 17
apt install -y postgresql-16-pgsentinel   # PG 16
apt install -y postgresql-15-pgsentinel   # PG 15
apt install -y postgresql-14-pgsentinel   # PG 14

预加载配置

shared_preload_libraries = 'pgsentinel';

创建扩展

CREATE EXTENSION pgsentinel;

用法

pgsentinel: PostgreSQL 活动会话历史

pgsentinel 通过定期采样 pg_stat_activity 来记录活动会话历史,并将活动与 pg_stat_statements 查询统计进行关联。

活动会话历史

SELECT ash_time, datname, usename, pid, state,
       wait_event_type, wait_event, query, queryid
FROM pg_active_session_history
ORDER BY ash_time DESC;

pg_stat_activity 外的关键列:

列名描述
ash_time采样时间戳
top_level_query顶层语句(用于 PL/pgSQL)
query包含实际参数值的语句
cmdtype语句类型:SELECT、UPDATE、INSERT、DELETE、UTILITY、UNKNOWN、NOTHING
queryid关联到 pg_stat_statements
blockers阻塞进程数量
blockerpid阻塞进程的 PID
blocker_state阻塞进程的状态

查询统计历史

启用后,pgsentinel 还会同时采样 pg_stat_statements

SELECT ash_time, queryid, calls, total_exec_time, rows,
       shared_blks_hit, shared_blks_read
FROM pg_stat_statements_history
ORDER BY ash_time DESC;

示例:等待分析

-- 最近一小时的热点等待事件
SELECT wait_event_type, wait_event, count(*)
FROM pg_active_session_history
WHERE ash_time > now() - interval '1 hour'
  AND wait_event IS NOT NULL
GROUP BY 1, 2
ORDER BY 3 DESC;

-- 阻塞分析
SELECT blockerpid, blocker_state, count(*)
FROM pg_active_session_history
WHERE blockers > 0
GROUP BY 1, 2
ORDER BY 3 DESC;

配置

参数默认值描述
pgsentinel_ash.sampling_period1采样周期(秒)
pgsentinel_ash.max_entries1000ASH 环形缓冲区大小
pgsentinel.db_namepostgres工作进程连接的数据库
pgsentinel_ash.track_idle_transfalse追踪空闲事务中的会话
pgsentinel_pgssh.max_entries1000pg_stat_statements 历史的环形缓冲区
pgsentinel_pgssh.enablefalse启用 pg_stat_statements 历史