Re: track generic and custom plans in pg_stat_statements
Andrei Lepikhov <lepihov@gmail.com>
From: Andrei Lepikhov <lepihov@gmail.com>
To: Sami Imseih <samimseih@gmail.com>
Cc: Greg Sabino Mullane <htamfids@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>,
Nikolay Samokhvalov <nik@postgres.ai>,
Ilia Evdokimov <ilya.evdokimov@tantorlabs.com>
Date: 2025-07-17T07:48:55Z
Lists: pgsql-hackers
On 17/7/2025 00:58, Sami Imseih wrote: >> this for better tracking. By adding a CachedPlanSource::cplan link, we >> can establish a connection to the entire PlanCache entry instead of only >> CachedPlan within a queryDesc and, consequently, make it accessible from >> the executor. This would give an access to statistics on costs and the >> number of replannings. > > This maybe out of scope for this patch, but can you elaborate on what you mean > by "CachedPlanSource::cplan link" ? You need to introduce a 'status' field, right? - to allow someone to identify the plan's type, which was previously somewhat complicated. However, it may be implemented in a slightly different way, by adding CachedPlanSource::cplan (meaning 'Current Plan') and a trivial convention: 'cplan' references the gplan field or it refers a custom plan. Instead of the CachedPlan, we may provide the executor with a link to more stable and informative CachedPlanSource entry. That's the main idea. As I see it, CachedPlan doesn't make sense without plancache and a CachedPlanSource entry. So, it is at least a valid solution. With that link, you can access various statistics: num_custom_plans, num_generic_plans, total_custom_cost, and generic_cost. It would also be possible to clear the *_cost fields and allow Postgres to make a new attempt at choosing the plan type - who knows, maybe the previous decision is already outdated? My point is that we can address one of the common issues with generic plans in a more extensible way, enabling modules to access the CachedPlanSource data at the time they have access to the execution instrumentation. It seems impractical to me to invent one more patch: since you've already modified the CreateQueryDesc interface and introduced a plan type identification logic, why do it twice? -- regards, Andrei Lepikhov
Commits
-
pg_stat_statements: Add counters for generic and custom plans
- 3357471cf9f5 19 (unreleased) landed
-
Rename CachedPlanType to PlannedStmtOrigin for PlannedStmt
- e125e360020a 19 (unreleased) landed
-
Introduce field tracking cached plan type in PlannedStmt
- 719dcf3c4226 19 (unreleased) landed