From: | David Rowley <dgrowleyml(at)gmail(dot)com> |
---|---|
To: | PostgreSQL Developers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Use appendStringInfoSpaces more |
Date: | 2023-01-19 09:44:36 |
Message-ID: | CAApHDvp_rKkvwudBKgBHniNRg67bzXVjyvVKfX0G2zS967K43A@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
In [1] I noticed a bit of a poor usage of appendStringInfoString which
just appends 4 spaces in a loop, one for each indent level of the
jsonb. It should be better just to use appendStringInfoSpaces and
just append all the spaces in one go rather than appending 4 spaces in
a loop. That'll save having to check enlargeStringInfo() once for each
loop.
I'm aiming this mostly as a cleanup patch, but after looking at the
appendStringInfoSpaces code, I thought it could be done a bit more
efficiently by using memset instead of using the while loop that keeps
track of 2 counters. memset has the option of doing more than a char
at a time, which should be useful for larger numbers of spaces.
It does seem a bit faster when appending 8 chars at least going by the
attached spaces.c file.
With -O1
$ ./spaces
while 0.536577 seconds
memset 0.326532 seconds
However, I'm not really expecting much of a performance increase from
this change. I do at least want to make sure I've not made anything
worse, so I used pgbench to run:
select jsonb_pretty(row_to_json(pg_class)::jsonb) from pg_class;
perf top says:
Master:
0.96% postgres [.] add_indent.part.0
Patched
0.25% postgres [.] add_indent.part.0
I can't really detect a certain enough TPS change over the noise. I
expect it might become more significant with more complex json that
has more than a single indent level.
I could only find 1 other instance where we use appendStringInfoString
to append spaces. I've adjusted that one too.
David
[1] https://postgr.es/m/CAApHDvrrFNSm8dF24tmYOZpvo-R5ZP+0FoqVo2XcYhRftehoRQ@mail.gmail.com
Attachment | Content-Type | Size |
---|---|---|
use_appendStringInfoSpaces_more.patch | text/plain | 1.4 KB |
spaces.c | text/plain | 828 bytes |
From | Date | Subject | |
---|---|---|---|
Next Message | Nitin Jadhav | 2023-01-19 09:56:34 | Re: Improve GetConfigOptionValues function |
Previous Message | Drouvot, Bertrand | 2023-01-19 09:43:27 | Re: Minimal logical decoding on standbys |