Re: Normalization of utility queries in pg_stat_statements - Mailing list pgsql-hackers

From Drouvot, Bertrand
Subject Re: Normalization of utility queries in pg_stat_statements
Date
Msg-id 0e067034-e92c-302b-24ed-492bca228e26@gmail.com
Whole thread Raw
In response to Re: Normalization of utility queries in pg_stat_statements  (Michael Paquier <michael@paquier.xyz>)
Responses Re: Normalization of utility queries in pg_stat_statements
List pgsql-hackers
Hi,

On 2/16/23 1:34 AM, Michael Paquier wrote:
> While wondering about this stuff about the last few days and
> discussing with bertrand, I have changed my mind on the point that
> there is no need to be that aggressive yet with the normalization of
> the A_Const nodes, because the query string normalization of
> pg_stat_statements is not prepared yet to handle cases where a A_Const
> value uses a non-quoted value with whitespaces.  The two cases where I
> saw an impact is on the commands that can define an isolation level:
> SET TRANSACTION and BEGIN.
> 
> For example, applying normalization to A_Const nodes does the
> following as of HEAD:
> 1) BEGIN TRANSACTION READ ONLY, READ WRITE, DEFERRABLE, NOT DEFERRABLE;
> BEGIN TRANSACTION $1 ONLY, $2 WRITE, $3, $4 DEFERRABLE
> 2) SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
> SET TRANSACTION ISOLATION LEVEL $1 COMMITTED
> 
> On top of that, specifying a different isolation level may cause these
> commands to be grouped, which is not really cool.  All that could be
> done incrementally later on, in 17~ or later depending on the
> adjustments that make sense.
> 

Thanks for those patches!

Yeah, agree about the proposed approach.


> 0002 has been
> completed with a couple of commands to track all the commands with
> A_Const, so as we never lose sight of what happens.  0004 is what I
> think could be done for PG16, where normalization affects only Const.
> At the end of the day, this reflects the following commands that use
> Const nodes because they use directly queries, so the same rules as
> SELECT and DMLs apply to them:
> - DECLARE
> - EXPLAIN
> - CREATE MATERIALIZED VIEW
> - CTAS, SELECT INTO
> 

0001:

I like the idea of splitting the existing tests in dedicated files.

What do you think about removing:

"
SET pg_stat_statements.track_utility = FALSE;
SET pg_stat_statements.track_planning = TRUE;
"

In the new pg_stat_statements.sql? That way pg_stat_statements.sql would always behave
with default values for those (currently we are setting both of them as non default).

Then, with the default values in place, if we feel that some tests are missing we could add them in
utility.sql or planning.sql accordingly.

0002:

Produces:
v2-0002-Add-more-test-for-utility-queries-in-pg_stat_stat.patch:834: trailing whitespace.
CREATE VIEW view_stats_1 AS
v2-0002-Add-more-test-for-utility-queries-in-pg_stat_stat.patch:838: trailing whitespace.
CREATE VIEW view_stats_1 AS
warning: 2 lines add whitespace errors.

+-- SET TRANSACTION ISOLATION
+BEGIN;
+SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
+SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
+SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

What about adding things like "SET SESSION CHARACTERISTICS AS TRANSACTION..." too?

0003 and 0004:
Thanks for keeping 0003 that's useful to see the impact of A_Const normalization.

Looking at the diff they produce, I also do think that 0004 is what
could be done for PG16.

Regards,

-- 
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com



pgsql-hackers by date:

Previous
From: Richard Guo
Date:
Subject: Re: wrong query result due to wang plan
Next
From: Richard Guo
Date:
Subject: Re: wrong query result due to wang plan