Re: Making aggregate deserialization (and WAL receive) functions slightly faster
David Rowley <dgrowleyml@gmail.com>
From: David Rowley <dgrowleyml@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Amit Kapila <amit.kapila16@gmail.com>,
Michael Paquier <michael@paquier.xyz>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2023-10-12T23:22:54Z
Lists: pgsql-hackers
Attachments
- initstringinfo_changes_v3.patch (text/plain) patch v3
On Wed, 11 Oct 2023 at 08:52, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > David Rowley <dgrowleyml@gmail.com> writes: > > I've attached a slightly more worked on patch that makes maxlen == 0 > > mean read-only. Unsure if a macro is worthwhile there or not. > > A few thoughts: Thank you for the review. I spent more time on this and did end up with 2 new init functions as you mentioned. One for strictly read-only (initReadOnlyStringInfo), which cannot be appended to, and as you mentioned, another (initStringInfoFromString) which can accept a palloc'd buffer which becomes managed by the stringinfo code. I know these names aren't exactly as you mentioned. I'm open to adjusting still. This means I got rid of the read-only conversion code in enlargeStringInfo(). I didn't do anything to try to handle buffer enlargement more efficiently in enlargeStringInfo() for the case where initStringInfoFromString sets maxlen to some non-power-of-2. The doubling code seems like it'll work ok without power-of-2 values, it'll just end up calling repalloc() with non-power-of-2 values. I did also wonder if resetStringInfo() would have any business touching the existing buffer in a read-only StringInfo and came to the conclusion that it wouldn't be very read-only if we allowed resetStringInfo() to do its thing on it. I added an Assert to fail if resetStringInfo() receives a read-only StringInfo. Also, since it's still being discussed, I left out the adjustment to LogicalParallelApplyLoop(). That also allows the tests to pass without the failing Assert that was checking for the NUL terminator. David
Commits
-
Make use of initReadOnlyStringInfo() in more places
- ac7d6f5f831e 17.0 landed
-
Optimize various aggregate deserialization functions, take 2
- 0c882a298881 17.0 landed
-
Introduce the concept of read-only StringInfos
- f0efa5aec193 17.0 landed
-
Revert "Optimize various aggregate deserialization functions"
- 4f3b56eea235 17.0 landed
-
Optimize various aggregate deserialization functions
- 608fd198def5 17.0 landed