pg_profile
1. 概述
pg_profile 是一个用于 PostgreSQL 数据库性能分析的扩展工具,主要用于统计目标数据库中的资源密集型活动,帮助用户深入了解数据库运行状态、找出性能瓶颈并进行优化。它的报告本质上是“两个采样点的差量分析”,得出采样间隔内的增量负载,采样点序号从 1 开始计数。
pg_profile 硬依赖 dblink 与 plpgsql(其自身完全由 SQL 和 PL/pgSQL 编写,无需任何外部库或软件);此外,建议安装 pg_stat_statements 扩展,以便在报告中获取 SQL 语句级别的统计信息。pg_profile 的版本与 PostgreSQL 的版本强相关,当前最高支持到 PG 18,具体的版本支持情况请查看 pg_profile 官方 github 仓库的 README.
IvorySQL 的 PG 模式和 Oracle 兼容模式都已经适配 pg_profile。
开源协议:PostgreSQL License
2. 安装启用
2.1. 源码编译
执行源码编译和安装:
# 构建并安装 pg_profile 及其依赖扩展 make -C contrib/dblink install make -C contrib/pg_stat_statements install make -C contrib/pg_profile install
安装产物为 pg_profile.control 与 pg_profile—4.11.sql。
2.2. 修改配置
pg_profile 依赖的 pg_stat_statements 必须通过 shared_preload_libraries 在服务启动时加载。
编辑 ivorysql.conf ,在 shared_preload_libraries 配置项末尾追加 pg_stat_statements:
# ivorysql.conf shared_preload_libraries = 'liboracle_parser, ivorysql_ora, pg_stat_statements'
2.4. 安装扩展
PG 模式与 Oracle 模式会话下命令相同:
CREATE SCHEMA profile; CREATE SCHEMA dblink; CREATE SCHEMA statements; CREATE EXTENSION dblink SCHEMA dblink; CREATE EXTENSION pg_stat_statements SCHEMA statements; CREATE EXTENSION pg_profile SCHEMA profile; SELECT extname, extversion FROM pg_extension WHERE extname = 'pg_profile'; extname | extversion ------------+------------ pg_profile | 4.11
3. 使用流程
3.1. 创建样本
-- 第一次采样 SELECT * FROM profile.take_sample(); server | result | elapsed --------+--------+------------- local | OK | 00:00:01.34 -- ……业务负载运行一段时间后,再次采样 SELECT * FROM profile.take_sample();
生产环境通常用定时任务周期采样(如 30 分钟一次),可配合 pg_cron 或外部 crontab:
*/30 * * * * psql -c 'SELECT profile.take_sample()' >/dev/null