Use appendStringInfoSpaces more
| От | David Rowley |
|---|---|
| Тема | Use appendStringInfoSpaces more |
| Дата | |
| Msg-id | CAApHDvp_rKkvwudBKgBHniNRg67bzXVjyvVKfX0G2zS967K43A@mail.gmail.com обсуждение исходный текст |
| Ответы |
Re: Use appendStringInfoSpaces more
|
| Список | 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
Вложения
В списке pgsql-hackers по дате отправления: