Re: Some ExecSeqScan optimizations
amit <amitlangote09@gmail.com>
From: Amit Langote <amitlangote09@gmail.com>
To: David Rowley <dgrowleyml@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>,
Junwang Zhao <zhjwpku@gmail.com>
Date: 2025-01-10T09:22:13Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Refactor ExecScan() to allow inlining of its core logic
- fb9f955025f7 18.0 landed
Attachments
- v3-0002-Break-ExecScanExtended-into-variants-based-on-qua.patch (application/octet-stream) patch v3-0002
- v3-0001-Refactor-ExecScan-to-inline-scan-filtering-and-pr.patch (application/octet-stream) patch v3-0001
On Fri, Jan 10, 2025 at 1:06 PM David Rowley <dgrowleyml@gmail.com> wrote:
> On Fri, 10 Jan 2025 at 02:46, Amit Langote <amitlangote09@gmail.com> wrote:
> >
> > On Mon, Jan 6, 2025 at 10:18 PM David Rowley <dgrowleyml@gmail.com> wrote:
> > > I've attached my workings of what I was messing around with. It seems
> > > to perform about the same as your version. I think maybe we'd need
> > > some sort of execScan.h instead of where I've stuffed the functions
> > > in.
> >
> > I've done that in the attached v2.
>
> I think 0001 looks ok, aside from what the attached fixes. (at least
> one is my mistake)
Oops, thanks for the fixes. Attaching an updated version.
> Did you test the performance of 0002? I didn't look at it hard enough
> to understand what you've done.
I reran the test suite I used before and I don't see a consistent
improvement due to 0002 or perhaps rather degradation. I've saved the
results in the sheet named 2025-01-10 in the spreadsheet at [1].
Comparing the latency for the query `select count(*) from test_table
where <first_column> = <nonexistant_value>` (where test_table has 30
integer columns and 1 million rows in it) between v17, master, and the
patched (0001 or 0001+0002) shows an improvement of close to 10% with
the patch.
-- v17
select count(*) from test_table where a_1 = 1000000;
count
-------
0
(1 row)
Time: 286.618 ms
-- master
select count(*) from test_table where a_1 = 1000000;
count
-------
0
(1 row)
Time: 283.564 ms
-- patched (0001+0002)
select count(*) from test_table where a_1 = 1000000;
count
-------
0
(1 row)
Time: 260.547 ms
Note that I turned off Gather for these tests, because then I find
that the improvements to ExecScan() are better measurable.
> I can look if performance tests show
> that it might be worthwhile considering.
Sure, that would be great.
--
Thanks, Amit Langote