On 06.03.19 18:42, Andres Freund wrote:
>
> It's hard to know precisely without running a profile of the
> workload. My suspicion is that the bottleneck in this query is the use
> of numeric, which has fairly slow operations, including aggregation. And
> they're too complicated to be inlined.
>
> Generally there's definitely advantage in JITing aggregation.
>
> There's a lot of further improvements on the table with better JIT code
> generation, I just haven't gotten around implementing those :(
Thanks for the quick response ! I think you're onto something with the
numeric type. I replaced it with bigint and repeated my test and now I
get a nice 40% speedup (I'm again intentionally ignoring the costs for
JIT'ting here as I assume a future PostgreSQL version will have some
kind of caching for the generated code):
Without JIT:
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=1395000.49..1395000.50 rows=1 width=6240) (actual
time=6023.436..6023.436 rows=1 loops=1)
Buffers: shared hit=256 read=399744
I/O Timings: read=475.135
-> Seq Scan on test (cost=0.00..420000.00 rows=2000000 width=1560)
(actual time=0.035..862.424 rows=2000000 loops=1)
Buffers: shared hit=256 read=399744
I/O Timings: read=475.135
Planning Time: 0.574 ms
Execution Time: 6024.298 ms
(8 rows)
With JIT:
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=1395000.49..1395000.50 rows=1 width=6240) (actual
time=4840.064..4840.064 rows=1 loops=1)
Buffers: shared hit=320 read=399680
I/O Timings: read=493.679
-> Seq Scan on test (cost=0.00..420000.00 rows=2000000 width=1560)
(actual time=0.090..847.458 rows=2000000 loops=1)
Buffers: shared hit=320 read=399680
I/O Timings: read=493.679
Planning Time: 1.414 ms
JIT:
Functions: 3
Options: Inlining true, Optimization true, Expressions true,
Deforming true
Timing: Generation 19.747 ms, Inlining 10.281 ms, Optimization
222.619 ms, Emission 362.862 ms, Total 615.509 ms
Execution Time: 4862.113 ms
(12 rows)
Cheers,
Tobias