Re: pg_stat_statements: faster search by queryid - Mailing list pgsql-hackers

From Sami Imseih
Subject Re: pg_stat_statements: faster search by queryid
Date
Msg-id CAA5RZ0tPKjX4NWJztQqL2kAzPkBLhRQpXDo+EZam4SY9aLS_Mg@mail.gmail.com
Whole thread Raw
In response to Re: pg_stat_statements: faster search by queryid  (Karina Litskevich <litskevichkarina@gmail.com>)
List pgsql-hackers
> > My initial thought is that this patch does not remove the issue of
> > loading the entire query text (just to return one or a few entries).
>
> This patch is not intended to address the issue of loading the file
> with query texts. We only try to avoid forming and handling tuples
> that we don't really need. Forming a tuple in
> pg_stat_statements_internal() includes calling CStringGetTextDatum(),
> which allocates memory and copies the query text. Avoiding that for
> queries we don't need makes a big difference already.

Yes, but my point is, if someone repeatedly lookup up pg_stat_statements
with filters, they will end up loading the query text multiple times.

for example:
````
select * from pg_stat_statements where query_id in (10000, 20000, 30000);
```

will only load the query text once to retrieve these 3 query IDs.

If I instead do this, with the proposed patch:

```
select * from pg_stat_statements(true, queryid=>10000);
select * from pg_stat_statements(true, queryid=>20000);
select * from pg_stat_statements(true, queryid=>30000);

or
select * from pg_stat_activity a, pg_stat_statements(true, queryid=>a.query_id);

```
I will have to load the query text file into memory for every invocation of
pg_stat_statements.


> > For what it is worth, I have been thinking about what it would take to
> > move query texts into shared memory, which could make this type of
> > filtering more practical.
>
> As far as I can tell, pg_stat_statements is storing query texts in an
> external file to not have problems with long query texts. Here is a
> quote from the docs:
>
> > The representative query texts are kept in an external disk file, and
> > do not consume shared memory. Therefore, even very lengthy query texts
> > can be stored successfully.

pg_stat_statements_internal must load the file when showtext = true, which
is the default.

```
qbuffer = qtext_load_file(&qbuffer_size);
```

--
Sami Imseih
Amazon Web Services (AWS)



pgsql-hackers by date:

Previous
From: jian he
Date:
Subject: Re: someone else to do the list of acknowledgments
Next
From: Corey Huinker
Date:
Subject: Re: someone else to do the list of acknowledgments