Re: Proposal - Allow extensions to set a Plan Identifier - Mailing list pgsql-hackers

From Andrei Lepikhov
Subject Re: Proposal - Allow extensions to set a Plan Identifier
Date
Msg-id 8ae082b0-0279-44f8-b198-6cff8b3bbb60@gmail.com
Whole thread Raw
In response to Re: Proposal - Allow extensions to set a Plan Identifier  (Michael Paquier <michael@paquier.xyz>)
Responses Re: Proposal - Allow extensions to set a Plan Identifier
List pgsql-hackers
On 3/23/25 01:01, Michael Paquier wrote:
> On Sat, Mar 22, 2025 at 11:50:06PM +0100, Andrei Lepikhov wrote:
>> planId actually looks less controversial than queryId or plan_node_id. At
>> the same time, it is not free from the different logic that extensions may
>> incorporate into this value: I can imagine, for example, the attempt of
>> uniquely numbering plans related to the same queryId, plain hashing of the
>> plan tree, hashing without constants, etc.
> 
> One plan ID should have one single query ID,
I'm not sure I understand what do you mean by that. QueryId reflects 
syntactic structure of the query, but planId - semantics. For example:

SELECT relname FROM pg_class JOIN pg_am USING (oid);
SELECT relname FROM pg_am JOIN pg_class USING (oid);

have different queryIds: -6493293269785547447 and 4243743071053231833

but the same plan:

  Hash Join
    Hash Cond: (pg_class.oid = pg_am.oid)
    ->  Seq Scan on pg_class
    ->  Hash
          ->  Seq Scan on pg_am

You can invent multiple other cases here - remember query tree 
transformations we made before optimisation.

> but the opposite may be
> not necessarily true: a query ID could be associated with multiple
> plan patterns (aka multiple plan IDs).  What this offers is that we
> know about which plan one query is currently using in live, for a
> given query ID.
Okay, as I've said before, it seems practical. I just worry because I 
see that people don't understand that queryId is a more or less 
arbitrary value that may or may not group queries that differ only by 
constants to a single "Query Class". I think the same attitude will be 
paid to planId. It is okay for statistics. However, non-statistical 
extensions need more guarantees and want to put different logic into 
these values.
For now, we have examples of only statistical extensions in open-source 
and may live with a proposed solution.
> 
>> So, it seems that extensions may conflict with the same field. Are we sure
>> that will happen if they are loaded in different orders in neighbouring
>> backends?
> 
> Depends on what kind of computation once wants to do, and surely
> without some coordination across the extensions you are using these
> cannot be shared, but it's no different from the concept of a query
> ID.
Hmm, queryId generation code lies in the core and we already came to 
terms that this field has only a statistical purpose. Do you want to 
commit planId generation code?

-- 
regards, Andrei Lepikhov



pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: query_id: jumble names of temp tables for better pg_stat_statement UX
Next
From: Andrei Lepikhov
Date:
Subject: Re: Proposal - Allow extensions to set a Plan Identifier