mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Collect JIT instrumentation from workers.
Previously, when using parallel query, EXPLAIN (ANALYZE)'s JIT compilation timings did not include the overhead from doing so on the workers. Fix that. We do so by simply aggregating the cost of doing JIT compilation on workers and the leader together. Arguably that's not quite accurate, because the total time spend doing so is spent in parallel - but it's hard to do much better. For additional detail, when VERBOSE is specified, the stats for workers are displayed separately. Author: Amit Khandekar and Andres Freund Discussion: https://postgr.es/m/CAJ3gD9eLrz51RK_gTkod+71iDcjpB_N8eC6vU2AW-VicsAERpQ@mail.gmail.com Backpatch: 11-
This commit is contained in:
@ -48,6 +48,7 @@
|
||||
#include "executor/execdebug.h"
|
||||
#include "executor/nodeSubplan.h"
|
||||
#include "foreign/fdwapi.h"
|
||||
#include "jit/jit.h"
|
||||
#include "mb/pg_wchar.h"
|
||||
#include "miscadmin.h"
|
||||
#include "optimizer/clauses.h"
|
||||
@ -494,6 +495,21 @@ standard_ExecutorEnd(QueryDesc *queryDesc)
|
||||
|
||||
ExecEndPlan(queryDesc->planstate, estate);
|
||||
|
||||
/*
|
||||
* If this process has done JIT, either merge stats into worker stats, or
|
||||
* use this process' stats as the global stats if no parallelism was used
|
||||
* / no workers did JIT.
|
||||
*/
|
||||
if (estate->es_instrument && queryDesc->estate->es_jit)
|
||||
{
|
||||
if (queryDesc->estate->es_jit_combined_instr)
|
||||
InstrJitAgg(queryDesc->estate->es_jit_combined_instr,
|
||||
&queryDesc->estate->es_jit->instr);
|
||||
else
|
||||
queryDesc->estate->es_jit_combined_instr =
|
||||
&queryDesc->estate->es_jit->instr;
|
||||
}
|
||||
|
||||
/* do away with our snapshots */
|
||||
UnregisterSnapshot(estate->es_snapshot);
|
||||
UnregisterSnapshot(estate->es_crosscheck_snapshot);
|
||||
|
Reference in New Issue
Block a user