On Fri, Feb 25, 2022 at 04:16:01PM +0100, Magnus Hagander wrote:
> + {
> + {"jit_warn_above_fraction", PGC_SUSET, LOGGING_WHEN,
> + gettext_noop("Sets the fraction of query time spent on
> JIT before writing"
> + "a warning to the log."),
> + gettext_noop("Write a message tot he server log if more
> than this"
> + "fraction of the query runtime
> is spent on JIT."
> + "Zero turns off the warning.")
> + },
> + &jit_warn_above_fraction,
> + 0.0, 0.0, 1.0,
> + NULL, NULL, NULL
> + },
Should be PGC_USERSET ?
+ gettext_noop("Write a message tot he server log if more
than this"
to the
+ if (jit_enabled && jit_warn_above_fraction > 0)
+ {
+ int64 jit_time =
+
INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.generation_counter)
+
+
INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.inlining_counter)
+
+
INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.optimization_counter)
+
+
INSTR_TIME_GET_MILLISEC(portal->queryDesc->estate->es_jit->instr.emission_counter);
+
+ if (jit_time > msecs * jit_warn_above_fraction)
+ {
+ ereport(WARNING,
+ (errmsg("JIT time was %ld ms of %d ms",
+ jit_time, msecs)));
+ }
+ }
I think it should be a NOTICE (or less?)
Is it more useful if this is applied combined with log_min_duration_statement ?
It's easy to imagine a query for which the planner computes a high cost, but
actually runs quickly. You might get a bunch of WARNINGs that the query took
10 MS and JIT was 75% of that, even if you don't care about queries that take
less than 10 SEC.
I should say that this is already available by processing the output of
autoexplain.
--
Justin
