pg_track_optimizer

pg_track_optimizer

pg_track_optimizer : Track planning decisions in comparison with execution reality

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
6270
pg_track_optimizer
pg_track_optimizer
0.9.2
STAT
MIT
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--sLd-r
No
Yes
Yes
Yes
yes
no
Relationships
See Also
pg_track_settings
pg_show_plans
powa
pg_stat_statements
pg_store_plans
auto_explain
pg_stat_kcache
pg_qualstats

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PIGSTY
0.9.2
18
17
16
15
14
pg_track_optimizer-
RPM
PIGSTY
0.9.2
18
17
16
15
14
pg_track_optimizer_$v-
DEB
PIGSTY
0.9.2
18
17
16
15
14
postgresql-$v-pg-track-optimizer-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
el8.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
el9.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
el9.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
el10.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
el10.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
d12.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
d12.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
d13.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
d13.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
u22.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
u22.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
u24.x86_64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
u24.aarch64
PIGSTY 0.9.2
PIGSTY 0.9.2
MISS
MISS
MISS
PackageVersionOSORGSIZEFile URL
pg_track_optimizer_180.9.2el8.x86_64pigsty35.6 KiBpg_track_optimizer_18-0.9.2-1PIGSTY.el8.x86_64.rpm
pg_track_optimizer_180.9.2el8.aarch64pigsty34.8 KiBpg_track_optimizer_18-0.9.2-1PIGSTY.el8.aarch64.rpm
pg_track_optimizer_180.9.2el9.x86_64pigsty35.3 KiBpg_track_optimizer_18-0.9.2-1PIGSTY.el9.x86_64.rpm
pg_track_optimizer_180.9.2el9.aarch64pigsty35.1 KiBpg_track_optimizer_18-0.9.2-1PIGSTY.el9.aarch64.rpm
pg_track_optimizer_180.9.2el10.x86_64pigsty35.3 KiBpg_track_optimizer_18-0.9.2-1PIGSTY.el10.x86_64.rpm
pg_track_optimizer_180.9.2el10.aarch64pigsty35.4 KiBpg_track_optimizer_18-0.9.2-1PIGSTY.el10.aarch64.rpm
postgresql-18-pg-track-optimizer0.9.2d12.x86_64pigsty58.2 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_amd64.deb
postgresql-18-pg-track-optimizer0.9.2d12.aarch64pigsty57.5 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_arm64.deb
postgresql-18-pg-track-optimizer0.9.2d13.x86_64pigsty58.5 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~trixie_amd64.deb
postgresql-18-pg-track-optimizer0.9.2d13.aarch64pigsty57.6 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~trixie_arm64.deb
postgresql-18-pg-track-optimizer0.9.2u22.x86_64pigsty63.2 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~jammy_amd64.deb
postgresql-18-pg-track-optimizer0.9.2u22.aarch64pigsty62.5 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~jammy_arm64.deb
postgresql-18-pg-track-optimizer0.9.2u24.x86_64pigsty60.9 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~noble_amd64.deb
postgresql-18-pg-track-optimizer0.9.2u24.aarch64pigsty60.3 KiBpostgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pg_track_optimizer_170.9.2el8.x86_64pigsty35.6 KiBpg_track_optimizer_17-0.9.2-1PIGSTY.el8.x86_64.rpm
pg_track_optimizer_170.9.2el8.aarch64pigsty34.8 KiBpg_track_optimizer_17-0.9.2-1PIGSTY.el8.aarch64.rpm
pg_track_optimizer_170.9.2el9.x86_64pigsty35.3 KiBpg_track_optimizer_17-0.9.2-1PIGSTY.el9.x86_64.rpm
pg_track_optimizer_170.9.2el9.aarch64pigsty35.0 KiBpg_track_optimizer_17-0.9.2-1PIGSTY.el9.aarch64.rpm
pg_track_optimizer_170.9.2el10.x86_64pigsty35.2 KiBpg_track_optimizer_17-0.9.2-1PIGSTY.el10.x86_64.rpm
pg_track_optimizer_170.9.2el10.aarch64pigsty35.4 KiBpg_track_optimizer_17-0.9.2-1PIGSTY.el10.aarch64.rpm
postgresql-17-pg-track-optimizer0.9.2d12.x86_64pigsty58.1 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_amd64.deb
postgresql-17-pg-track-optimizer0.9.2d12.aarch64pigsty57.3 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_arm64.deb
postgresql-17-pg-track-optimizer0.9.2d13.x86_64pigsty58.3 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~trixie_amd64.deb
postgresql-17-pg-track-optimizer0.9.2d13.aarch64pigsty57.4 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~trixie_arm64.deb
postgresql-17-pg-track-optimizer0.9.2u22.x86_64pigsty69.8 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~jammy_amd64.deb
postgresql-17-pg-track-optimizer0.9.2u22.aarch64pigsty69.0 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~jammy_arm64.deb
postgresql-17-pg-track-optimizer0.9.2u24.x86_64pigsty60.8 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~noble_amd64.deb
postgresql-17-pg-track-optimizer0.9.2u24.aarch64pigsty60.1 KiBpostgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~noble_arm64.deb

Source

pig build pkg pg_track_optimizer;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install pg_track_optimizer;		# install via package name, for the active PG version

pig install pg_track_optimizer -v 18;   # install for PG 18
pig install pg_track_optimizer -v 17;   # install for PG 17

Config this extension to shared_preload_libraries:

shared_preload_libraries = 'pg_track_optimizer';

Create this extension with:

CREATE EXTENSION pg_track_optimizer;

Usage

pg_track_optimizer: detect suboptimal query plans via cardinality estimation errors

pg_track_optimizer automatically detects queries with poor cardinality estimates by comparing planner predictions to actual execution results. It calculates multiple error metrics using logarithmic scale.

Enable Tracking

-- Track only problematic queries in production
SET pg_track_optimizer.mode = 'normal';

-- Track all queries during debugging
SET pg_track_optimizer.mode = 'forced';

-- Log EXPLAIN for queries exceeding error threshold
SET pg_track_optimizer.log_min_error = 2.0;

Viewing Tracked Queries

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;

-- Using the RStats type directly
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;

Error Metrics

MetricDescription
avg_errorSimple average of log-scale errors across plan nodes
rms_errorRoot Mean Square, emphasizes large errors
twa_errorTime-Weighted Average, highlights slow nodes
wca_errorCost-Weighted Average, highlights high-cost nodes
f_join_filterJOIN filtering overhead factor
f_scan_filterScan filtering overhead factor

Managing Statistics

-- Save statistics to disk
SELECT pg_track_optimizer_flush();

-- Clear all tracked statistics
SELECT pg_track_optimizer_reset();

-- Check extension status
SELECT * FROM pg_track_optimizer_status;

Configuration

ParameterDefaultDescription
pg_track_optimizer.modedisableddisabled, normal, forced
pg_track_optimizer.log_min_error(none)Error threshold for logging EXPLAIN
pg_track_optimizer.hash_mem(default)Shared memory limit in KB
pg_track_optimizer.auto_flushonAuto-save stats on backend shutdown
Last updated on