pg_stat_plans
pg_stat_plans : Track per-plan call counts, execution times, and example EXPLAIN texts.
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 6050 | pg_stat_plans
|
pg_stat_plans
|
2.1.0 |
STAT
|
PostgreSQL
|
C
|
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--sLd-r
|
No
|
Yes
|
Yes
|
Yes
|
yes
|
no
|
| Relationships | |
|---|---|
| See Also | pg_stat_statements
pg_store_plans
pg_show_plans
pg_stat_kcache
|
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PGDG
|
2.1.0 |
18
17
16
15
14
|
pg_stat_plans |
- |
| RPM | PGDG
|
2.1.0 |
18
17
16
15
14
|
pg_stat_plans_$v |
- |
| DEB | PGDG
|
2.1.0 |
18
17
16
15
14
|
postgresql-$v-pg-stat-plans |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
el8.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
el8.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
el9.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
el9.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
el10.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
el10.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
d12.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
d12.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
d13.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
d13.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
u22.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
u22.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
u24.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
u24.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
u26.x86_64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
u26.aarch64
|
PGDG 2.1.0
|
PGDG 2.1.0
|
PGDG 2.1.0
|
MISS
|
MISS
|
Source
Install
Make sure PGDG repo available:
pig repo add pgdg -u # add pgdg repo and update cacheInstall this extension with pig:
pig install pg_stat_plans; # install via package name, for the active PG version
pig install pg_stat_plans -v 18; # install for PG 18
pig install pg_stat_plans -v 17; # install for PG 17
pig install pg_stat_plans -v 16; # install for PG 16Config this extension to shared_preload_libraries:
shared_preload_libraries = '$libdir/pg_stat_plans';Create this extension with:
CREATE EXTENSION pg_stat_plans;Usage
Sources: README, v2.1.0 release, SQL objects
pg_stat_plans tracks aggregate statistics for PostgreSQL plan shapes. It hashes planned query trees into plan IDs, stores example EXPLAIN text in shared memory, and helps identify when the same query ID is executed with different plans.
Enable
pg_stat_plans requires PostgreSQL 16 or newer and must be loaded at server start:
shared_preload_libraries = 'pg_stat_plans'
pg_stat_plans.compress = 'zstd'CREATE EXTENSION pg_stat_plans;Using pg_stat_statements alongside it is recommended so plan IDs can be correlated with query text.
Query Plans
SELECT *
FROM pg_stat_plans;The view exposes userid, dbid, toplevel, queryid, planid, calls, total_exec_time, and plan. To omit stored plan text for lighter queries:
SELECT *
FROM pg_stat_plans(false);Group by queryid to see multiple plan shapes chosen for one normalized query:
SELECT queryid, planid, calls, total_exec_time / NULLIF(calls, 0) AS avg_exec_time
FROM pg_stat_plans(false)
ORDER BY queryid, avg_exec_time DESC;Running Queries
On PostgreSQL 18 and newer, pg_stat_plans_activity can show plan IDs and example plans for currently running queries:
SELECT *
FROM pg_stat_plans_activity;Reset And Configure
SELECT pg_stat_plans_reset();Important settings include pg_stat_plans.max, pg_stat_plans.max_size, pg_stat_plans.max_plan_memory, pg_stat_plans.track, pg_stat_plans.compress, and pg_stat_plans.plan_advice.
Notes
Statistics use PostgreSQL’s cumulative statistics system, so counters are flushed at transaction end and may be delayed. Plan IDs describe plan shape and can change when partitions, casts, or expression details change.