Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitac88807

Browse files
committed
jit: Re-allow JIT compilation of execGrouping.c hashtable comparisons.
In the course of5567d12,356687b and317ffdf, I changedBuildTupleHashTable[Ext]'s call to ExecBuildGroupingEqual to not passin the parent node, but NULL. Which in turn prevents the tupleequality comparator from being JIT compiled. While that fixesbug #15486, it is not actually necessary after all of the above commits,as we don't re-build the comparator when using the newBuildTupleHashTableExt() interface (as the content of the hashtableare reset, but the TupleHashTable itself is not).Therefore re-allow jit compilation for callers that useBuildTupleHashTableExt with a separate context for "metadata" andcontent.As in the previous commit, there's ongoing work to make this easier totest to prevent such regressions in the future, but thatinfrastructure is not going to be backpatchable.The performance impact of not JIT compiling hashtable equalitycomparators can be substantial e.g. for aggregation queries thataggregate a lot of input rows to few output rows (when there are a lotof output groups, there will be fewer comparisons).Author: Andres FreundDiscussion:https://postgr.es/m/20190927072053.njf6prdl3vb7y7qb@alap3.anarazel.deBackpatch: 11, just as5567d12
1 parent97e971e commitac88807

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

‎src/backend/executor/execGrouping.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ BuildTupleHashTableExt(PlanState *parent,
166166
TupleHashTablehashtable;
167167
Sizeentrysize=sizeof(TupleHashEntryData)+additionalsize;
168168
MemoryContextoldcontext;
169+
boolallow_jit;
169170

170171
Assert(nbuckets>0);
171172

@@ -210,13 +211,23 @@ BuildTupleHashTableExt(PlanState *parent,
210211
hashtable->tableslot=MakeSingleTupleTableSlot(CreateTupleDescCopy(inputDesc),
211212
&TTSOpsMinimalTuple);
212213

214+
/*
215+
* If the old reset interface is used (i.e. BuildTupleHashTable, rather
216+
* than BuildTupleHashTableExt), allowing JIT would lead to the generated
217+
* functions to a) live longer than the query b) be re-generated each time
218+
* the table is being reset. Therefore prevent JIT from being used in that
219+
* case, by not providing a parent node (which prevents accessing the
220+
* JitContext in the EState).
221+
*/
222+
allow_jit=metacxt!=tablecxt;
223+
213224
/* build comparator for all columns */
214225
/* XXX: should we support non-minimal tuples for the inputslot? */
215226
hashtable->tab_eq_func=ExecBuildGroupingEqual(inputDesc,inputDesc,
216227
&TTSOpsMinimalTuple,&TTSOpsMinimalTuple,
217228
numCols,
218229
keyColIdx,eqfuncoids,collations,
219-
NULL);
230+
allow_jit ?parent :NULL);
220231

221232
/*
222233
* While not pretty, it's ok to not shut down this context, but instead

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp