On Sat, 2023-12-09 at 18:52 +0700, John Naylor wrote: > > I tested using the new hash function APIs for my search path cache, > > and > > there's a significant speedup for cases not benefiting from > > a86c61c9ee. > > It's enough that we almost don't need a86c61c9ee. So a definite +1 > > to > > the new APIs. > > Do you have a new test?
Still using the same basic test here: https://www.postgresql.org/message-id/04c8592dbd694e4114a3ed87139a7a04e4363030.camel%40j-davis.com What I did is: a. add your v5 patches b. disable optimization in a86c61c9ee c. add attached patch to use new hash APIs I got a slowdown between (a) and (b), and then (c) closed the gap about halfway. It started to get close to test noise at that point -- I could get some better numbers out of it if it's helpful. Also, what I'm doing in the attached path is using part of the key as the seed. Is that a good idea or should the seed be zero or come from somewhere else? Regards, Jeff Davis
From a30e5f0ea580fb5038eb90e862f697b557627f32 Mon Sep 17 00:00:00 2001 From: Jeff Davis <j...@j-davis.com> Date: Fri, 8 Dec 2023 12:14:27 -0800 Subject: [PATCH v1] Use new hash APIs for search path cache --- src/backend/catalog/namespace.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index 5027efc91d..af815a889d 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -42,6 +42,7 @@ #include "catalog/pg_type.h" #include "commands/dbcommands.h" #include "common/hashfn.h" +#include "common/hashfn_unstable.h" #include "funcapi.h" #include "mb/pg_wchar.h" #include "miscadmin.h" @@ -247,11 +248,18 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames, static inline uint32 spcachekey_hash(SearchPathCacheKey key) { - const unsigned char *bytes = (const unsigned char *) key.searchPath; - int blen = strlen(key.searchPath); + const char *buf = key.searchPath; + fasthash64_state hs; - return hash_combine(hash_bytes(bytes, blen), - hash_uint32(key.roleid)); + fasthash64_init(&hs, key.roleid); + + while (*buf) + { + fasthash64_accum_byte(&hs, *buf); + buf++; + } + + return fasthash64_final32(&hs); } static inline bool -- 2.34.1