pg_store_plans
跟踪所有执行的 SQL 语句的计划统计信息
仓库
ossc-db/pg_store_plans
https://github.com/ossc-db/pg_store_plans
源码
pg_store_plans-1.9.tar.gz
pg_store_plans-1.9.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_store_plans | 1.9 | STAT | BSD 3-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 6250 | pg_store_plans | 否 | 是 | 是 | 是 | 否 | 是 | - |
| 相关扩展 | pg_show_plans auto_explain pg_stat_statements pg_hint_plan pre_prepare pg_stat_monitor explain_ui plprofiler |
|---|
pg18 breaks, fixed by Vonng
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.9 | 1817161514 | pg_store_plans | - |
| RPM | PIGSTY | 1.9 | 1817161514 | pg_store_plans_$v | - |
| DEB | PIGSTY | 1.9 | 1817161514 | postgresql-$v-pg-store-plan | - |
构建
您可以使用 pig build 命令构建 pg_store_plans 扩展的 RPM / DEB 包:
pig build pkg pg_store_plans # 构建 RPM / DEB 包
安装
您可以直接安装 pg_store_plans 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_store_plans; # 当前活跃 PG 版本安装
pig ext install -y pg_store_plans -v 18 # PG 18
pig ext install -y pg_store_plans -v 17 # PG 17
pig ext install -y pg_store_plans -v 16 # PG 16
pig ext install -y pg_store_plans -v 15 # PG 15
pig ext install -y pg_store_plans -v 14 # PG 14
dnf install -y pg_store_plans_18 # PG 18
dnf install -y pg_store_plans_17 # PG 17
dnf install -y pg_store_plans_16 # PG 16
dnf install -y pg_store_plans_15 # PG 15
dnf install -y pg_store_plans_14 # PG 14
apt install -y postgresql-18-pg-store-plan # PG 18
apt install -y postgresql-17-pg-store-plan # PG 17
apt install -y postgresql-16-pg-store-plan # PG 16
apt install -y postgresql-15-pg-store-plan # PG 15
apt install -y postgresql-14-pg-store-plan # PG 14
预加载配置:
shared_preload_libraries = 'pg_store_plans';
创建扩展:
CREATE EXTENSION pg_store_plans;
用法
pg_store_plans 追踪所有 SQL 语句的执行计划统计信息,为 pg_stat_statements 提供计划级别的补充。在 PostgreSQL 14+ 上可通过 queryid 进行关联。
查看计划统计
-- 查看追踪的计划及统计信息
SELECT queryid, planid, plan, calls, total_time, rows
FROM pg_store_plans
ORDER BY total_time DESC;
-- 检查模块状态
SELECT * FROM pg_store_plans_info;
关键视图列
| 列名 | 类型 | 描述 |
|---|---|---|
queryid | bigint | 查询 ID(可与 pg_stat_statements 关联) |
planid | bigint | 计划哈希码 |
plan | text | 代表性计划文本 |
calls | bigint | 执行次数 |
total_time | double precision | 总执行时间(毫秒) |
rows | bigint | 检索/影响的总行数 |
shared_blks_hit | bigint | 共享缓冲区命中数 |
shared_blks_read | bigint | 共享块读取数 |
first_call | timestamptz | 首次执行时间 |
last_call | timestamptz | 最后执行时间 |
函数
-- 重置所有统计信息(仅超级用户)
SELECT pg_store_plans_reset();
-- 转换计划格式
SELECT pg_store_plans_textplan(plan); -- 转为文本
SELECT pg_store_plans_jsonplan(plan); -- 转为 JSON
SELECT pg_store_plans_xmlplan(plan); -- 转为 XML
SELECT pg_store_plans_yamlplan(plan); -- 转为 YAML
-- 计算查询哈希
SELECT pg_store_hash_query('SELECT 1');
配置
| 参数 | 默认值 | 描述 |
|---|---|---|
pg_store_plans.max | 1000 | 最大追踪计划数(仅在服务器启动时) |
pg_store_plans.track | top | top、all、verbose、none |
pg_store_plans.plan_format | text | text、json、xml、yaml、raw |
pg_store_plans.min_duration | 0 | 最小追踪执行时间(毫秒) |
pg_store_plans.log_analyze | off | 包含 EXPLAIN ANALYZE 输出 |
pg_store_plans.log_buffers | off | 包含缓冲区统计 |
pg_store_plans.log_timing | true | 记录实际耗时 |
pg_store_plans.plan_storage | file | 存储方式:file 或 shmem |
pg_store_plans.max_plan_length | 5000 | 计划文本最大字节数 |
pg_store_plans.save | on | 跨重启持久化统计 |