Re: Custom explain options

Поиск
Список
Период
Сортировка
От Konstantin Knizhnik
Тема Re: Custom explain options
Дата
Msg-id d4c6048e-f97d-4c16-9dd4-13e3195c0804@garret.ru
обсуждение исходный текст
Ответ на Re: Custom explain options  (Andrei Lepikhov <a.lepikhov@postgrespro.ru>)
Ответы Re: Custom explain options  (Andrei Lepikhov <a.lepikhov@postgrespro.ru>)
Re: Custom explain options  (Andrei Lepikhov <a.lepikhov@postgrespro.ru>)
Список pgsql-hackers
On 30/11/2023 5:59 am, Andrei Lepikhov wrote:
> On 21/10/2023 19:16, Konstantin Knizhnik wrote:
>> EXPLAIN statement has a list of options (i.e. ANALYZE, BUFFERS, 
>> COST,...) which help to provide useful details of query execution.
>> In Neon we have added PREFETCH option which shows information about 
>> page prefetching during query execution (prefetching is more critical 
>> for Neon
>> architecture because of separation of compute and storage, so it is 
>> implemented not only for bitmap heap scan as in Vanilla Postgres, but 
>> also for seqscan, indexscan and indexonly scan). Another possible 
>> candidate  for explain options is local file cache (extra caching 
>> layer above shared buffers which is used to somehow replace file 
>> system cache in standalone Postgres).
>>
>> I think that it will be nice to have a generic mechanism which allows 
>> extensions to add its own options to EXPLAIN.
>
> Generally, I welcome this idea: Extensions can already do a lot of 
> work, and they should have a tool to report their state, not only into 
> the log.
> But I think your approach needs to be elaborated. At first, it would 
> be better to allow registering extended instruments for specific node 
> types to avoid unneeded calls.
> Secondly, looking into the Instrumentation usage, I don't see the 
> reason to limit the size: as I see everywhere it exists locally or in 
> the DSA where its size is calculated on the fly. So, by registering an 
> extended instrument, we can reserve a slot for the extension. The 
> actual size of underlying data can be provided by the extension routine.
>
Thank you for review.

I agree that support of extended instruments is desired. I just tried to 
minimize number of changes to make this patch smaller.

Concerning limiting instrumentation size, may be I missed something, but 
I do not see any goo way to handle this:

```

./src/backend/executor/nodeMemoize.c1106:        si = 
&node->shared_info->sinstrument[ParallelWorkerNumber];
./src/backend/executor/nodeAgg.c4322:        si = 
&node->shared_info->sinstrument[ParallelWorkerNumber];
./src/backend/executor/nodeIncrementalSort.c107: 
instrumentSortedGroup(&(node)->shared_info->sinfo[ParallelWorkerNumber].groupName##GroupInfo, 
\
./src/backend/executor/execParallel.c808: InstrInit(&instrument[i], 
estate->es_instrument);
./src/backend/executor/execParallel.c1052: 
InstrAggNode(planstate->instrument, &instrument[n]);
./src/backend/executor/execParallel.c1306: 
InstrAggNode(&instrument[ParallelWorkerNumber], planstate->instrument);
./src/backend/commands/explain.c1763:            Instrumentation 
*instrument = &w->instrument[n];
./src/backend/commands/explain.c2168:            Instrumentation 
*instrument = &w->instrument[n];
```

In all this cases we are using array of `Instrumentation` and if it 
contains varying part, then it is not clear where to place it.
Yes, there is also code which serialize and sends instrumentations 
between worker processes  and I have updated this code in my PR to send 
actual amount of custom instrumentation data. But it can not help with 
the cases above.





В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alena Rybakina
Дата:
Сообщение: Re: Implement missing join selectivity estimation for range types
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: proposal: possibility to read dumped table's name from file