So I am able to see effect of jit_tuple_deforming, and very well, but only if optimization is active. When optimization is not active then jit_tuple_deforming does slowdown.
So maybe a usage of jit_tuple_deforming can be conditioned by jit_optimization?
Can you share the test case and some detail about the hardware and PostgreSQL configuration?
I did very simple test
0.
master branch without asserts, shared buffer to 1GB
select 'insert into wt values(' || (select string_agg((random()*10000)::int::text,',') from generate_series(1,j - j + 100) g(i)) || ')' from generate_series(1,1000000) gg(j) \gexec
insert into wt select * from wt;
commit;
3.
set max_paralel_workers to 0; -- the effect of JIT will be more visible
analyze wt;
\timing
select sum(c99) from wt;
I tested some combination of:
jit: off on
jit_inline_above_cost: 0, 10000000000000
jit_optimize_above_cost: 0, 10000000000000
jit_tuple_deforming: on, off
My primitive tests shows nice possitive effect of jit_tuple_deforming if jit optimization is active. When jit optimization is not active, then jit_tuple_deforming did slowdown in my test.
So there is range of costs between 100000 and 500000 where jit_tuple_deforming didn't work well (without optimization)
I am limmited by small memory of my notebook - when I created table larger than 3GB, then I got IO waits on my crypted disc, and any effect of JIT was eliminated.
Regards
Pavel
regards
-- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services