Re: Change GUC hashtable to use simplehash?
От | John Naylor |
---|---|
Тема | Re: Change GUC hashtable to use simplehash? |
Дата | |
Msg-id | CANWCAZY7Cr-GdUhrCLoR4+JGLChTb0pQxq9ZPi1KTLs+_KDFqg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Change GUC hashtable to use simplehash? (Jeff Davis <pgsql@j-davis.com>) |
Ответы |
Re: Change GUC hashtable to use simplehash?
Re: Change GUC hashtable to use simplehash? |
Список | pgsql-hackers |
On Mon, Nov 20, 2023 at 5:54 AM Jeff Davis <pgsql@j-davis.com> wrote: > > Attached are a bunch of tiny patches and some perf numbers based on > simple test described here: > > https://www.postgresql.org/message-id/04c8592dbd694e4114a3ed87139a7a04e4363030.camel%40j-davis.com I tried taking I/O out, like this, thinking the times would be less variable: cat bench.sql select 1 from generate_series(1,500000) x(x), lateral (SELECT inc_ab(x)) a offset 10000000; (with turbo off) pgbench -n -T 30 -f bench.sql -M prepared master: latency average = 643.625 ms 0001-0005: latency average = 607.354 ms ...about 5.5% less time, similar to what Jeff found. I get a noticeable regression in 0002, though, and I think I see why: guc_name_hash(const char *name) { - uint32 result = 0; + const unsigned char *bytes = (const unsigned char *)name; + int blen = strlen(name); The strlen call required for hashbytes() is not free. The lack of mixing in the (probably inlined after 0001) previous hash function can remedied directly, as in the attached: 0001-0002 only: latency average = 670.059 ms 0001-0002, plus revert hashbytes, add finalizer: latency average = 656.810 ms -#define SH_EQUAL(tb, a, b) (guc_name_compare(a, b) == 0) +#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0) Likewise, I suspect calling out to the C library is going to throw away some of the gains that were won by not needing to downcase all the time, but I haven't dug deeper.
Вложения
В списке pgsql-hackers по дате отправления: