mirror of
https://github.com/postgres/postgres.git
synced 2025-06-01 00:01:20 -04:00
Add EXPLAIN support for JIT.
This just shows a few details about JITing, e.g. how many functions have been JITed, and how long that took. To avoid noise in regression tests with functions sometimes being JITed in --with-llvm builds, disable display when COSTS OFF is specified. Author: Andres Freund Discussion: https://postgr.es/m/20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de
This commit is contained in:
parent
9370462e9a
commit
1f0c6a9e7d
@ -21,6 +21,7 @@
|
|||||||
#include "commands/prepare.h"
|
#include "commands/prepare.h"
|
||||||
#include "executor/nodeHash.h"
|
#include "executor/nodeHash.h"
|
||||||
#include "foreign/fdwapi.h"
|
#include "foreign/fdwapi.h"
|
||||||
|
#include "jit/jit.h"
|
||||||
#include "nodes/extensible.h"
|
#include "nodes/extensible.h"
|
||||||
#include "nodes/nodeFuncs.h"
|
#include "nodes/nodeFuncs.h"
|
||||||
#include "optimizer/clauses.h"
|
#include "optimizer/clauses.h"
|
||||||
@ -556,6 +557,16 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es,
|
|||||||
if (es->analyze)
|
if (es->analyze)
|
||||||
ExplainPrintTriggers(es, queryDesc);
|
ExplainPrintTriggers(es, queryDesc);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print info about JITing. Tied to es->costs because we don't want to
|
||||||
|
* display this in regression tests, as it'd cause output differences
|
||||||
|
* depending on build options. Might want to separate that out from COSTS
|
||||||
|
* at a later stage.
|
||||||
|
*/
|
||||||
|
if (queryDesc->estate->es_jit && es->costs &&
|
||||||
|
queryDesc->estate->es_jit->created_functions > 0)
|
||||||
|
ExplainPrintJIT(es, queryDesc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Close down the query and free resources. Include time for this in the
|
* Close down the query and free resources. Include time for this in the
|
||||||
* total execution time (although it should be pretty minimal).
|
* total execution time (although it should be pretty minimal).
|
||||||
@ -677,6 +688,54 @@ ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc)
|
|||||||
ExplainCloseGroup("Triggers", "Triggers", false, es);
|
ExplainCloseGroup("Triggers", "Triggers", false, es);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ExplainPrintJIT -
|
||||||
|
* Append information about JITing to es->str.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ExplainPrintJIT(ExplainState *es, QueryDesc *queryDesc)
|
||||||
|
{
|
||||||
|
JitContext *jc = queryDesc->estate->es_jit;
|
||||||
|
|
||||||
|
ExplainOpenGroup("JIT", "JIT", true, es);
|
||||||
|
|
||||||
|
if (es->format == EXPLAIN_FORMAT_TEXT)
|
||||||
|
{
|
||||||
|
es->indent += 1;
|
||||||
|
appendStringInfo(es->str, "JIT:\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
ExplainPropertyInteger("Functions", NULL, jc->created_functions, es);
|
||||||
|
if (es->analyze && es->timing)
|
||||||
|
ExplainPropertyFloat("Generation Time", "ms",
|
||||||
|
1000.0 * INSTR_TIME_GET_DOUBLE(jc->generation_counter),
|
||||||
|
3, es);
|
||||||
|
|
||||||
|
ExplainPropertyBool("Inlining", jc->flags & PGJIT_INLINE, es);
|
||||||
|
|
||||||
|
if (es->analyze && es->timing)
|
||||||
|
ExplainPropertyFloat("Inlining Time", "ms",
|
||||||
|
1000.0 * INSTR_TIME_GET_DOUBLE(jc->inlining_counter),
|
||||||
|
3, es);
|
||||||
|
|
||||||
|
ExplainPropertyBool("Optimization", jc->flags & PGJIT_OPT3, es);
|
||||||
|
if (es->analyze && es->timing)
|
||||||
|
ExplainPropertyFloat("Optimization Time", "ms",
|
||||||
|
1000.0 * INSTR_TIME_GET_DOUBLE(jc->optimization_counter),
|
||||||
|
3, es);
|
||||||
|
|
||||||
|
if (es->analyze && es->timing)
|
||||||
|
ExplainPropertyFloat("Emission Time", "ms",
|
||||||
|
1000.0 * INSTR_TIME_GET_DOUBLE(jc->emission_counter),
|
||||||
|
3, es);
|
||||||
|
|
||||||
|
ExplainCloseGroup("JIT", "JIT", true, es);
|
||||||
|
if (es->format == EXPLAIN_FORMAT_TEXT)
|
||||||
|
{
|
||||||
|
es->indent -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ExplainQueryText -
|
* ExplainQueryText -
|
||||||
* add a "Query Text" node that contains the actual text of the query
|
* add a "Query Text" node that contains the actual text of the query
|
||||||
|
@ -81,6 +81,8 @@ extern void ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into,
|
|||||||
extern void ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc);
|
extern void ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc);
|
||||||
extern void ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc);
|
extern void ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc);
|
||||||
|
|
||||||
|
extern void ExplainPrintJIT(ExplainState *es, QueryDesc *queryDesc);
|
||||||
|
|
||||||
extern void ExplainQueryText(ExplainState *es, QueryDesc *queryDesc);
|
extern void ExplainQueryText(ExplainState *es, QueryDesc *queryDesc);
|
||||||
|
|
||||||
extern void ExplainBeginOutput(ExplainState *es);
|
extern void ExplainBeginOutput(ExplainState *es);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user