Hi, On 2022-06-17 14:14:54 +1200, David Rowley wrote: > I've put together the attached patch which removes 4 fields from the > hashedscalararrayop portion of the struct which, once the JSON part is > fixed, will put sizeof(ExprEvalStep) back down to 64 bytes again.
> The attached patch causes some extra pointer dereferencing to perform > a hashed saop step, so I tested the performance on f4fb45d15 (prior to > the JSON patch that pushed the sizeof(ExprEvalStep) up further. I > found: What do you think about the approach prototyped in my patch to move the hash FunctionCallInfo into the element_tab? With a tiny bit more work that should reduce the amount of dereferincing over the state today, while also keeping below the limit? > setup: > create table a (a int); > insert into a select x from generate_series(1000000,2000000) x; > > bench.sql > select * from a where a in(1,2,3,4,5,6,7,8,9,10); > > f4fb45d15 + reduce_sizeof_hashedsaop_ExprEvalStep.patch > drowley@amd3990x:~$ pgbench -n -f bench.sql -T 60 -M prepared postgres > tps = 44.841851 (without initial connection time) > tps = 44.986472 (without initial connection time) > tps = 44.944315 (without initial connection time) > > f4fb45d15 > drowley@amd3990x:~$ pgbench -n -f bench.sql -T 60 -M prepared postgres > tps = 44.446127 (without initial connection time) > tps = 44.614134 (without initial connection time) > tps = 44.895011 (without initial connection time) > > (Patched is ~0.61% faster here) > > So, there appears to be no performance regression due to the extra > indirection. There's maybe even some gains due to the smaller step > size. "smaller step size"? Greetings, Andres Freund