pg_profile

PostgreSQL 数据库负载记录与AWR报表工具

概览

扩展包名版本分类许可证语言
pg_profile4.11STATBSD 2-ClauseC
ID扩展名BinLibLoadCreateTrustReloc模式
6000pg_profile-
相关扩展dblink plpgsql plprofiler pg_stat_kcache powa pg_stat_statements pg_show_plans pg_stat_monitor pg_qualstats pg_store_plans

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED4.111817161514pg_profiledblink, plpgsql
RPMPGDG4.111817161514pg_profile_$v-
DEBPIGSTY4.111817161514postgresql-$v-pg-profile-
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
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
d13.aarch64
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
u22.x86_64
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
u22.aarch64
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
u24.x86_64
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
u24.aarch64
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11
PIGSTY 4.11

构建

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

pig build pkg pg_profile         # 构建 DEB 包

安装

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

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_profile 定期采集 PostgreSQL 统计信息快照,并生成详细的历史性能报告。它依赖 pg_stat_statements,可选使用 pg_stat_kcachepg_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

最后修改 2026-03-14: update extension metadata (953cbd0)