pgsentinel
活跃会话历史
仓库
pgsentinel/pgsentinel
https://github.com/pgsentinel/pgsentinel
源码
pgsentinel-1.4.1.tar.gz
pgsentinel-1.4.1.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgsentinel | 1.4.1 | STAT | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 6410 | pgsentinel | 否 | 是 | 是 | 是 | 否 | 是 | - |
| 相关扩展 | system_stats pgnodemx pg_stat_monitor pg_wait_sampling bgw_replstatus pg_profile pg_proctab powa |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.4.1 | 1817161514 | pgsentinel | - |
| RPM | PIGSTY | 1.4.1 | 1817161514 | pgsentinel_$v | - |
| DEB | PGDG | 1.4.1 | 1817161514 | postgresql-$v-pgsentinel | - |
构建
您可以使用 pig build 命令构建 pgsentinel 扩展的 RPM / DEB 包:
pig build pkg pgsentinel # 构建 RPM / DEB 包
安装
您可以直接安装 pgsentinel 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
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 通过定期采样 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_period | 1 | 采样周期(秒) |
pgsentinel_ash.max_entries | 1000 | ASH 环形缓冲区大小 |
pgsentinel.db_name | postgres | 工作进程连接的数据库 |
pgsentinel_ash.track_idle_trans | false | 追踪空闲事务中的会话 |
pgsentinel_pgssh.max_entries | 1000 | pg_stat_statements 历史的环形缓冲区 |
pgsentinel_pgssh.enable | false | 启用 pg_stat_statements 历史 |