pg_track_optimizer

pg_track_optimizer

pg_track_optimizer : Track planning decisions in comparison with execution reality

Overview

ID Extension Package Version Category License Language
6270
pg_track_optimizer
pg_track_optimizer
0.9.2
STAT
MIT
C
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--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

Type Repo Version PG Major Compatibility Package Pattern Dependencies
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 / PG PG18 PG17 PG16 PG15 PG14
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
Package Version OS ORG SIZE File URL
pg_track_optimizer_18 0.9.2 el8.x86_64 pigsty 35.6 KiB pg_track_optimizer_18-0.9.2-1PIGSTY.el8.x86_64.rpm
pg_track_optimizer_18 0.9.2 el8.aarch64 pigsty 34.8 KiB pg_track_optimizer_18-0.9.2-1PIGSTY.el8.aarch64.rpm
pg_track_optimizer_18 0.9.2 el9.x86_64 pigsty 35.3 KiB pg_track_optimizer_18-0.9.2-1PIGSTY.el9.x86_64.rpm
pg_track_optimizer_18 0.9.2 el9.aarch64 pigsty 35.1 KiB pg_track_optimizer_18-0.9.2-1PIGSTY.el9.aarch64.rpm
pg_track_optimizer_18 0.9.2 el10.x86_64 pigsty 35.3 KiB pg_track_optimizer_18-0.9.2-1PIGSTY.el10.x86_64.rpm
pg_track_optimizer_18 0.9.2 el10.aarch64 pigsty 35.4 KiB pg_track_optimizer_18-0.9.2-1PIGSTY.el10.aarch64.rpm
postgresql-18-pg-track-optimizer 0.9.2 d12.x86_64 pigsty 58.2 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_amd64.deb
postgresql-18-pg-track-optimizer 0.9.2 d12.aarch64 pigsty 57.5 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_arm64.deb
postgresql-18-pg-track-optimizer 0.9.2 d13.x86_64 pigsty 58.5 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~trixie_amd64.deb
postgresql-18-pg-track-optimizer 0.9.2 d13.aarch64 pigsty 57.6 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~trixie_arm64.deb
postgresql-18-pg-track-optimizer 0.9.2 u22.x86_64 pigsty 63.2 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~jammy_amd64.deb
postgresql-18-pg-track-optimizer 0.9.2 u22.aarch64 pigsty 62.5 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~jammy_arm64.deb
postgresql-18-pg-track-optimizer 0.9.2 u24.x86_64 pigsty 60.9 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~noble_amd64.deb
postgresql-18-pg-track-optimizer 0.9.2 u24.aarch64 pigsty 60.3 KiB postgresql-18-pg-track-optimizer_0.9.2-1PIGSTY~noble_arm64.deb
Package Version OS ORG SIZE File URL
pg_track_optimizer_17 0.9.2 el8.x86_64 pigsty 35.6 KiB pg_track_optimizer_17-0.9.2-1PIGSTY.el8.x86_64.rpm
pg_track_optimizer_17 0.9.2 el8.aarch64 pigsty 34.8 KiB pg_track_optimizer_17-0.9.2-1PIGSTY.el8.aarch64.rpm
pg_track_optimizer_17 0.9.2 el9.x86_64 pigsty 35.3 KiB pg_track_optimizer_17-0.9.2-1PIGSTY.el9.x86_64.rpm
pg_track_optimizer_17 0.9.2 el9.aarch64 pigsty 35.0 KiB pg_track_optimizer_17-0.9.2-1PIGSTY.el9.aarch64.rpm
pg_track_optimizer_17 0.9.2 el10.x86_64 pigsty 35.2 KiB pg_track_optimizer_17-0.9.2-1PIGSTY.el10.x86_64.rpm
pg_track_optimizer_17 0.9.2 el10.aarch64 pigsty 35.4 KiB pg_track_optimizer_17-0.9.2-1PIGSTY.el10.aarch64.rpm
postgresql-17-pg-track-optimizer 0.9.2 d12.x86_64 pigsty 58.1 KiB postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_amd64.deb
postgresql-17-pg-track-optimizer 0.9.2 d12.aarch64 pigsty 57.3 KiB postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~bookworm_arm64.deb
postgresql-17-pg-track-optimizer 0.9.2 d13.x86_64 pigsty 58.3 KiB postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~trixie_amd64.deb
postgresql-17-pg-track-optimizer 0.9.2 d13.aarch64 pigsty 57.4 KiB postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~trixie_arm64.deb
postgresql-17-pg-track-optimizer 0.9.2 u22.x86_64 pigsty 69.8 KiB postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~jammy_amd64.deb
postgresql-17-pg-track-optimizer 0.9.2 u22.aarch64 pigsty 69.0 KiB postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~jammy_arm64.deb
postgresql-17-pg-track-optimizer 0.9.2 u24.x86_64 pigsty 60.8 KiB postgresql-17-pg-track-optimizer_0.9.2-1PIGSTY~noble_amd64.deb
postgresql-17-pg-track-optimizer 0.9.2 u24.aarch64 pigsty 60.1 KiB postgresql-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

Metric Description
avg_error Simple average of log-scale errors across plan nodes
rms_error Root Mean Square, emphasizes large errors
twa_error Time-Weighted Average, highlights slow nodes
wca_error Cost-Weighted Average, highlights high-cost nodes
f_join_filter JOIN filtering overhead factor
f_scan_filter Scan 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

Parameter Default Description
pg_track_optimizer.mode disabled disabled, 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_flush on Auto-save stats on backend shutdown
Last updated on