pg_track_optimizer

跟踪规划器决策与实际执行的差距

概览

扩展包名版本分类许可证语言
pg_track_optimizer0.9.2STATMITC
ID扩展名BinLibLoadCreateTrustReloc模式
6270pg_track_optimizer-
相关扩展pg_track_settings pg_show_plans powa pg_stat_statements pg_store_plans auto_explain pg_stat_kcache pg_qualstats

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.9.21817161514pg_track_optimizer-
RPMPIGSTY0.9.21817161514pg_track_optimizer_$v-
DEBPIGSTY0.9.21817161514postgresql-$v-pg-track-optimizer-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
el8.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
el9.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
el9.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
el10.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
el10.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
d12.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
d12.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
PIGSTY MISSPIGSTY MISSPIGSTY MISS

构建

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

pig build pkg pg_track_optimizer         # 构建 RPM / DEB 包

安装

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

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: 通过基数估计误差检测次优查询计划

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_filterJOIN 过滤开销因子
f_scan_filter扫描过滤开销因子

管理统计信息

-- 将统计信息保存到磁盘
SELECT pg_track_optimizer_flush();

-- 清除所有追踪的统计信息
SELECT pg_track_optimizer_reset();

-- 检查扩展状态
SELECT * FROM pg_track_optimizer_status;

配置

参数默认值描述
pg_track_optimizer.modedisableddisablednormalforced
pg_track_optimizer.log_min_error(无)触发 EXPLAIN 日志的误差阈值
pg_track_optimizer.hash_mem(默认)共享内存限制(KB)
pg_track_optimizer.auto_flushon后端关闭时自动保存统计