Re: Some ExecSeqScan optimizations - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Some ExecSeqScan optimizations
Date
Msg-id h44uho22osw4f5ytet6dr23znwzz3p3jfl54avolptbxnvth7r@j24tuvrmqojg
Whole thread Raw
In response to Re: Some ExecSeqScan optimizations  (Amit Langote <amitlangote09@gmail.com>)
List pgsql-hackers
Hi,

On 2025-07-11 11:22:36 +0900, Amit Langote wrote:
> On Fri, Jul 11, 2025 at 5:55 AM Andres Freund <andres@anarazel.de> wrote:
> > On 2025-07-10 17:28:50 +0900, Amit Langote wrote:
> > > On Thu, Jul 10, 2025 at 8:34 AM Andres Freund <andres@anarazel.de> wrote:
> > > > The performance gain unsurprisingly isn't significant (but seems repeatably
> > > > measureable), but it does cut out a fair bit of unnecessary code.
> > > >
> > > > andres@awork3:/srv/dev/build/postgres/m-dev-optimize$ size executor_nodeSeqscan.c.*o
> > > >    text    data     bss     dec     hex filename
> > > >    3330       0       0    3330     d02 executor_nodeSeqscan.c.assume.o
> > > >    3834       0       0    3834     efa executor_nodeSeqscan.c.o
> > > >
> > > > A 13% reduction in actual code size isn't bad for such a small change, imo.
> > >
> > > Yeah, that seems worthwhile. I had been a bit concerned about code
> > > size growth from having four variant functions with at least some
> > > duplication, so this is a nice offset.
> >
> > I'm rather surprised by just how much the size reduces...
> >
> > I built nodeSeqscan.c with -ffunction-sections and looked at the size with
> > size --format=sysv:
> >
> > Before:
> > .text.SeqRecheck                               6      0
> > .rodata.str1.8                               135      0
> > .text.unlikely.SeqNext                        53      0
> > .text.SeqNext                                178      0
> > .text.ExecSeqScanEPQ                          20      0
> > .text.ExecSeqScanWithProject                 289      0
> > .text.unlikely.ExecSeqScanWithQual            53      0
> > .text.ExecSeqScanWithQual                    441      0
> > .text.unlikely.ExecSeqScanWithQualProject     53      0
> > .text.ExecSeqScanWithQualProject             811      0
> > .text.unlikely.ExecSeqScan                    53      0
> > .text.ExecSeqScan                            245      0
> > .text.ExecInitSeqScan                        287      0
> > .text.ExecEndSeqScan                          33      0
> > .text.ExecReScanSeqScan                       63      0
> > .text.ExecSeqScanEstimate                     88      0
> > .text.ExecSeqScanInitializeDSM               114      0
> > .text.ExecSeqScanReInitializeDSM              34      0
> > .text.ExecSeqScanInitializeWorker             64      0
> >
> > After:
> > .text.SeqRecheck                               6      0
> > .rodata.str1.8                               135      0
> > .text.unlikely.SeqNext                        53      0
> > .text.SeqNext                                178      0
> > .text.ExecSeqScanEPQ                          20      0
> > .text.ExecSeqScanWithProject                 209      0
> > .text.unlikely.ExecSeqScanWithQual            53      0
> > .text.ExecSeqScanWithQual                    373      0
> > .text.unlikely.ExecSeqScanWithQualProject     53      0
> > .text.ExecSeqScanWithQualProject             474      0
> > .text.unlikely.ExecSeqScan                    53      0
> > .text.ExecSeqScan                            245      0
> > .text.ExecInitSeqScan                        287      0
> > .text.ExecEndSeqScan                          33      0
> > .text.ExecReScanSeqScan                       63      0
> > .text.ExecSeqScanEstimate                     88      0
> > .text.ExecSeqScanInitializeDSM               114      0
> > .text.ExecSeqScanReInitializeDSM              34      0
> > .text.ExecSeqScanInitializeWorker             64      0
> >
> >
> > I'm rather baffled that the size of ExecSeqScanWithQualProject goes from 811
> > to 474, just due to those null checks being removed...  But I'll take it.
> 
> Wow, indeed.

Thanks for reviewing. Pushed!

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Paul A Jungwirth
Date:
Subject: Re: Foreign key isolation tests
Next
From: "Matheus Alcantara"
Date:
Subject: Re: SCRAM pass-through authentication for postgres_fdw