pgsql: Hand code string to integer conversion for performance.

Started by Andres Freundabout 8 years ago4 messagescomitters
Jump to latest
#1Andres Freund
andres@anarazel.de

Hand code string to integer conversion for performance.

As benchmarks show, using libc's string-to-integer conversion is
pretty slow. At least part of the reason for that is that strtol[l]
have to be more generic than what largely is required inside pg.

This patch considerably speeds up int2/int4 input (int8 already was
already using hand-rolled code).

Most of the existing pg_atoi callers have been converted. But as one
requires pg_atoi's custom delimiter functionality, and as it seems
likely that there's external pg_atoi users, it seems sensible to just
keep pg_atoi around.

Author: Andres Freund
Reviewed-By: Robert Haas
Discussion: /messages/by-id/20171208214437.qgn6zdltyq5hmjpk@alap3.anarazel.de

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/86eaf208ea048936df6be77276a246d3f92e9620

Modified Files
--------------
contrib/spi/refint.c | 2 +-
doc/src/sgml/sources.sgml | 2 +-
src/backend/libpq/pqmq.c | 6 +-
.../libpqwalreceiver/libpqwalreceiver.c | 4 +-
src/backend/tsearch/wparser_def.c | 8 +-
src/backend/utils/adt/arrayutils.c | 3 +-
src/backend/utils/adt/int.c | 4 +-
src/backend/utils/adt/int8.c | 1 +
src/backend/utils/adt/numutils.c | 149 +++++++++++++++++++++
src/backend/utils/adt/varlena.c | 4 +-
src/include/utils/builtins.h | 2 +
src/test/regress/expected/int2.out | 14 +-
src/test/regress/expected/select_parallel.out | 2 +-
13 files changed, 176 insertions(+), 25 deletions(-)

#2David Rowley
dgrowleyml@gmail.com
In reply to: Andres Freund (#1)
Re: pgsql: Hand code string to integer conversion for performance.

On 23 July 2018 at 10:30, Andres Freund <andres@anarazel.de> wrote:

Hand code string to integer conversion for performance.

This could do with the attached to silence the compiler warnings from
compilers that don't understand ereport(ERROR) does not return.

--
David Rowley http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Attachments:

silence_compiler_warnings_in_pg_strtoint_funcs.patchapplication/octet-stream; name=silence_compiler_warnings_in_pg_strtoint_funcs.patchDownload+4-0
#3Andres Freund
andres@anarazel.de
In reply to: David Rowley (#2)
Re: pgsql: Hand code string to integer conversion for performance.

On 2018-07-24 22:10:09 +1200, David Rowley wrote:

On 23 July 2018 at 10:30, Andres Freund <andres@anarazel.de> wrote:

Hand code string to integer conversion for performance.

This could do with the attached to silence the compiler warnings from
compilers that don't understand ereport(ERROR) does not return.

Pushed. Not sure if any of those do enough control flow analysis to
even consider those blocks reachable? But anyway, doesn't hurt.

Greetings,

Andres Freund

#4David Rowley
dgrowleyml@gmail.com
In reply to: Andres Freund (#3)
Re: pgsql: Hand code string to integer conversion for performance.

On 25 July 2018 at 05:11, Andres Freund <andres@anarazel.de> wrote:

Pushed. Not sure if any of those do enough control flow analysis to
even consider those blocks reachable? But anyway, doesn't hurt.

Thanks. MSVC was producing a warning.

--
David Rowley http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services