Re: JIT performance question - Mailing list pgsql-performance

From Tobias Gierke
Subject Re: JIT performance question
Date
Msg-id cd19a3f0-7c73-34dc-71e2-be2f69266537@code-sourcery.de
Whole thread Raw
In response to Re: JIT performance question  (Andres Freund <andres@anarazel.de>)
Responses Re: JIT performance question
List pgsql-performance
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



pgsql-performance by date:

Previous
From: Andres Freund
Date:
Subject: Re: JIT performance question
Next
From: Andres Freund
Date:
Subject: Re: JIT performance question