pg_profile
PostgreSQL 数据库负载记录与AWR报表工具
仓库
zubkov-andrei/pg_profile
https://github.com/zubkov-andrei/pg_profile
源码
pg_profile-4.11.tar.gz
pg_profile-4.11.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_profile | 4.11 | STAT | BSD 2-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 6000 | pg_profile | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | dblink plpgsql plprofiler pg_stat_kcache powa pg_stat_statements pg_show_plans pg_stat_monitor pg_qualstats pg_store_plans |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 4.11 | 1817161514 | pg_profile | dblink, plpgsql |
| RPM | PGDG | 4.11 | 1817161514 | pg_profile_$v | - |
| DEB | PIGSTY | 4.11 | 1817161514 | postgresql-$v-pg-profile | - |
构建
您可以使用 pig build 命令构建 pg_profile 扩展的 DEB 包:
pig build pkg pg_profile # 构建 DEB 包
安装
您可以直接安装 pg_profile 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_profile; # 当前活跃 PG 版本安装
pig ext install -y pg_profile -v 18 # PG 18
pig ext install -y pg_profile -v 17 # PG 17
pig ext install -y pg_profile -v 16 # PG 16
pig ext install -y pg_profile -v 15 # PG 15
pig ext install -y pg_profile -v 14 # PG 14
dnf install -y pg_profile_18 # PG 18
dnf install -y pg_profile_17 # PG 17
dnf install -y pg_profile_16 # PG 16
dnf install -y pg_profile_15 # PG 15
dnf install -y pg_profile_14 # PG 14
apt install -y postgresql-18-pg-profile # PG 18
apt install -y postgresql-17-pg-profile # PG 17
apt install -y postgresql-16-pg-profile # PG 16
apt install -y postgresql-15-pg-profile # PG 15
apt install -y postgresql-14-pg-profile # PG 14
创建扩展:
CREATE EXTENSION pg_profile CASCADE; -- 依赖: dblink, plpgsql
用法
pg_profile 定期采集 PostgreSQL 统计信息快照,并生成详细的历史性能报告。它依赖 pg_stat_statements,可选使用 pg_stat_kcache 和 pg_wait_sampling 获取额外指标。
采集快照
需要定期采集快照(例如通过 cron)。每次快照会捕获当前的统计信息状态:
SELECT profile.take_sample();
生成报告
通过指定两个快照 ID 来生成区间性能分析报告:
-- 生成快照 1 到 2 之间的常规报告
SELECT profile.get_report(1, 2);
-- 生成比较两个区间的差异报告
SELECT profile.get_diffreport(1, 2, 3, 4);
管理服务器
pg_profile 可以从远程集群采集统计信息:
-- 定义远程服务器
SELECT profile.create_server('remote', 'host=remote_host dbname=postgres');
-- 列出已定义的服务器
SELECT * FROM profile.show_servers();
-- 启用/禁用服务器
SELECT profile.enable_server('remote');
SELECT profile.disable_server('remote');
基线
基线可以保护快照范围不被自动清理:
-- 创建基线,保留快照 10 到 20
SELECT profile.create_baseline('incident_2024', 10, 20);
-- 列出基线
SELECT * FROM profile.show_baselines();
-- 删除基线
SELECT profile.drop_baseline('incident_2024');
保留策略
控制快照的保留时长:
-- 将本地服务器的保留期设置为 7 天
SELECT profile.set_server_max_sample_age('local', 7);
快照信息
-- 查看可用快照
SELECT * FROM profile.show_samples();
-- 查看快照采集耗时(需要 pg_profile.track_sample_timings = on)
SELECT * FROM v_sample_timings;
推荐配置
track_activities = on
track_counts = on
track_io_timing = on
track_wal_io_timing = on # PG 14+
track_functions = all