pg_track_optimizer
跟踪规划器决策与实际执行的差距
仓库
danolivo/pg_track_optimizer
https://github.com/danolivo/pg_track_optimizer
源码
pg_track_optimizer-0.9.2.tar.gz
pg_track_optimizer-0.9.2.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_track_optimizer | 0.9.2 | STAT | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 6270 | pg_track_optimizer | 否 | 是 | 是 | 是 | 否 | 是 | - |
| 相关扩展 | pg_track_settings pg_show_plans powa pg_stat_statements pg_store_plans auto_explain pg_stat_kcache pg_qualstats |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.9.2 | 1817161514 | pg_track_optimizer | - |
| RPM | PIGSTY | 0.9.2 | 1817161514 | pg_track_optimizer_$v | - |
| DEB | PIGSTY | 0.9.2 | 1817161514 | postgresql-$v-pg-track-optimizer | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.9.2 el8.x86_64.pg18 : pg_track_optimizer_18 pg_track_optimizer_18-0.9.2-1PIGSTY.el8.x86_64.rpm
| PIGSTY 0.9.2 el8.x86_64.pg17 : pg_track_optimizer_17 pg_track_optimizer_17-0.9.2-1PIGSTY.el8.x86_64.rpm
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| el8.aarch64 | PIGSTY 0.9.2 el8.aarch64.pg18 : pg_track_optimizer_18 pg_track_optimizer_18-0.9.2-1PIGSTY.el8.aarch64.rpm
| PIGSTY 0.9.2 el8.aarch64.pg17 : pg_track_optimizer_17 pg_track_optimizer_17-0.9.2-1PIGSTY.el8.aarch64.rpm
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| el9.x86_64 | PIGSTY 0.9.2 el9.x86_64.pg18 : pg_track_optimizer_18 pg_track_optimizer_18-0.9.2-1PIGSTY.el9.x86_64.rpm
| PIGSTY 0.9.2 el9.x86_64.pg17 : pg_track_optimizer_17 pg_track_optimizer_17-0.9.2-1PIGSTY.el9.x86_64.rpm
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| el9.aarch64 | PIGSTY 0.9.2 el9.aarch64.pg18 : pg_track_optimizer_18 pg_track_optimizer_18-0.9.2-1PIGSTY.el9.aarch64.rpm
| PIGSTY 0.9.2 el9.aarch64.pg17 : pg_track_optimizer_17 pg_track_optimizer_17-0.9.2-1PIGSTY.el9.aarch64.rpm
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| el10.x86_64 | PIGSTY 0.9.2 el10.x86_64.pg18 : pg_track_optimizer_18 pg_track_optimizer_18-0.9.2-1PIGSTY.el10.x86_64.rpm
| PIGSTY 0.9.2 el10.x86_64.pg17 : pg_track_optimizer_17 pg_track_optimizer_17-0.9.2-1PIGSTY.el10.x86_64.rpm
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| el10.aarch64 | PIGSTY 0.9.2 el10.aarch64.pg18 : pg_track_optimizer_18 pg_track_optimizer_18-0.9.2-1PIGSTY.el10.aarch64.rpm
| PIGSTY 0.9.2 el10.aarch64.pg17 : pg_track_optimizer_17 pg_track_optimizer_17-0.9.2-1PIGSTY.el10.aarch64.rpm
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| d12.x86_64 | PIGSTY 0.9.2 d12.x86_64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_amd64.deb
| PIGSTY 0.9.2 d12.x86_64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_amd64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| d12.aarch64 | PIGSTY 0.9.2 d12.aarch64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_arm64.deb
| PIGSTY 0.9.2 d12.aarch64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_arm64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| d13.x86_64 | PIGSTY 0.9.2 d13.x86_64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~trixie_amd64.deb
| PIGSTY 0.9.2 d13.x86_64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~trixie_amd64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| d13.aarch64 | PIGSTY 0.9.2 d13.aarch64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~trixie_arm64.deb
| PIGSTY 0.9.2 d13.aarch64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~trixie_arm64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u22.x86_64 | PIGSTY 0.9.2 u22.x86_64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~jammy_amd64.deb
| PIGSTY 0.9.2 u22.x86_64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~jammy_amd64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u22.aarch64 | PIGSTY 0.9.2 u22.aarch64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~jammy_arm64.deb
| PIGSTY 0.9.2 u22.aarch64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~jammy_arm64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u24.x86_64 | PIGSTY 0.9.2 u24.x86_64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~noble_amd64.deb
| PIGSTY 0.9.2 u24.x86_64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~noble_amd64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u24.aarch64 | PIGSTY 0.9.2 u24.aarch64.pg18 : postgresql-18-pg-track-optimizer postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~noble_arm64.deb
| PIGSTY 0.9.2 u24.aarch64.pg17 : postgresql-17-pg-track-optimizer postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~noble_arm64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
构建
您可以使用 pig build 命令构建 pg_track_optimizer 扩展的 RPM / DEB 包:
pig build pkg pg_track_optimizer # 构建 RPM / DEB 包
安装
您可以直接安装 pg_track_optimizer 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_track_optimizer; # 当前活跃 PG 版本安装
pig ext install -y pg_track_optimizer -v 18 # PG 18
pig ext install -y pg_track_optimizer -v 17 # PG 17
dnf install -y pg_track_optimizer_18 # PG 18
dnf install -y pg_track_optimizer_17 # PG 17
apt install -y postgresql-18-pg-track-optimizer # PG 18
apt install -y postgresql-17-pg-track-optimizer # PG 17
预加载配置:
shared_preload_libraries = 'pg_track_optimizer';
创建扩展:
CREATE EXTENSION pg_track_optimizer;
用法
pg_track_optimizer 通过比较规划器预测与实际执行结果,自动检测具有较差基数估计的查询。它使用对数刻度计算多种误差指标。
启用追踪
-- 生产环境仅追踪有问题的查询
SET pg_track_optimizer.mode = 'normal';
-- 调试时追踪所有查询
SET pg_track_optimizer.mode = 'forced';
-- 当误差超过阈值时记录 EXPLAIN
SET pg_track_optimizer.log_min_error = 2.0;
查看追踪的查询
SELECT queryid, query,
avg_avg, avg_min, avg_max,
rms_avg, rms_min, rms_max,
time_avg, blks_avg, nexecs
FROM pg_track_optimizer
ORDER BY avg_avg DESC
LIMIT 10;
-- 直接使用 RStats 类型
SELECT queryid, query,
wca_error -> 'mean' AS avg_wca_error,
blks_accessed -> 'mean' AS avg_blocks
FROM pg_track_optimizer()
WHERE blks_accessed -> 'mean' > 1000
ORDER BY wca_error -> 'mean' DESC;
误差指标
| 指标 | 描述 |
|---|---|
avg_error | 计划节点对数刻度误差的简单平均值 |
rms_error | 均方根误差,强调大误差 |
twa_error | 时间加权平均,突出慢节点 |
wca_error | 代价加权平均,突出高代价节点 |
f_join_filter | JOIN 过滤开销因子 |
f_scan_filter | 扫描过滤开销因子 |
管理统计信息
-- 将统计信息保存到磁盘
SELECT pg_track_optimizer_flush();
-- 清除所有追踪的统计信息
SELECT pg_track_optimizer_reset();
-- 检查扩展状态
SELECT * FROM pg_track_optimizer_status;
配置
| 参数 | 默认值 | 描述 |
|---|---|---|
pg_track_optimizer.mode | disabled | disabled、normal、forced |
pg_track_optimizer.log_min_error | (无) | 触发 EXPLAIN 日志的误差阈值 |
pg_track_optimizer.hash_mem | (默认) | 共享内存限制(KB) |
pg_track_optimizer.auto_flush | on | 后端关闭时自动保存统计 |