Re: reducing the footprint of ScanKeyword (was Re: Large writable variables)

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: John Naylor <jcnaylor@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Robert Haas <robertmhaas@gmail.com>, Andrew Gierth <andrew@tao11.riddles.org.uk>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2018-12-31T01:48:01Z
Lists: pgsql-hackers
Hi,

On 2018-12-29 16:59:52 -0500, John Naylor wrote:
> I think 0001 with complete keyword lookup replacement is in decent
> enough shape to post. Make check-world passes. A few notes and
> caveats:

I tried to take this for a spin, an for me the build fails because various
frontend programs don't have KeywordOffsets/Strings defined, but reference it
through various functions exposed to the frontend (like fmtId()).  That I see
that error but you don't is probably related to me using -fuse-ld=gold in
CFLAGS.

I can "fix" this by including kwlist_d.h in common/keywords.c
regardless of FRONTEND. That also lead me to discover that the build
dependencies somewhere aren't correctly set-up, because I need to
force a clean rebuild to trigger the problem again, just changing
keywords.c back doesn't trigger the problem.

Greetings,

Andres Freund


Commits

  1. Use perfect hashing, instead of binary search, for keyword lookup.

  2. Reduce the size of the fmgr_builtin_oid_index[] array.

  3. Replace the data structure used for keyword lookup.