v11-0007-Add-bench-for-pgstat.patch
application/x-patch
Filename: v11-0007-Add-bench-for-pgstat.patch
Type: application/x-patch
Part: 2
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v11-0007
Subject: Add bench for pgstat
| File | + | − |
|---|---|---|
| contrib/bench_hash/bench_hash--1.0.sql | 9 | 0 |
| contrib/bench_hash/bench_hash.c | 66 | 0 |
From 3a2bee493bb30f3c2f253ab27a715d3ca1262111 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@postgresql.org>
Date: Tue, 26 Dec 2023 12:18:22 +0700
Subject: [PATCH v11 7/8] Add bench for pgstat
---
contrib/bench_hash/bench_hash--1.0.sql | 9 ++++
contrib/bench_hash/bench_hash.c | 66 ++++++++++++++++++++++++++
2 files changed, 75 insertions(+)
diff --git a/contrib/bench_hash/bench_hash--1.0.sql b/contrib/bench_hash/bench_hash--1.0.sql
index b3a5747432..43ce946bf6 100644
--- a/contrib/bench_hash/bench_hash--1.0.sql
+++ b/contrib/bench_hash/bench_hash--1.0.sql
@@ -19,3 +19,12 @@ RETURNS int
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
+CREATE FUNCTION bench_pgstat_hash(int4)
+RETURNS int
+AS 'MODULE_PATHNAME'
+LANGUAGE C STRICT;
+
+CREATE FUNCTION bench_pgstat_hash_FH(int4)
+RETURNS int
+AS 'MODULE_PATHNAME'
+LANGUAGE C STRICT;
diff --git a/contrib/bench_hash/bench_hash.c b/contrib/bench_hash/bench_hash.c
index 9c9dba93f0..017cf333ce 100644
--- a/contrib/bench_hash/bench_hash.c
+++ b/contrib/bench_hash/bench_hash.c
@@ -21,6 +21,7 @@ PG_MODULE_MAGIC;
#include "common/hashfn_unstable.h"
#include "miscadmin.h"
#include "utils/memutils.h"
+#include "utils/pgstat_internal.h"
PG_FUNCTION_INFO_V1(bench_string_hash);
@@ -101,3 +102,68 @@ bench_cstring_hash_aligned(PG_FUNCTION_ARGS)
PG_RETURN_INT32(hash);
}
+
+static inline uint32
+pgstat_hash_hash_key_orig(const void *d, size_t size, void *arg)
+{
+ const PgStat_HashKey *key = (PgStat_HashKey *) d;
+ uint32 hash;
+
+ Assert(size == sizeof(PgStat_HashKey) && arg == NULL);
+
+ hash = murmurhash32(key->kind);
+ hash = hash_combine(hash, murmurhash32(key->dboid));
+ hash = hash_combine(hash, murmurhash32(key->objoid));
+
+ return hash;
+}
+
+static inline uint32
+pgstat_hash_hash_key_FH(const void *d, size_t size, void *arg)
+{
+ const PgStat_HashKey *key = (PgStat_HashKey *) d;
+
+ Assert(size == sizeof(PgStat_HashKey) && arg == NULL);
+
+ return fasthash32((const char *) key, size, 0);
+}
+
+PG_FUNCTION_INFO_V1(bench_pgstat_hash);
+Datum
+bench_pgstat_hash(PG_FUNCTION_ARGS)
+{
+ int32 count = PG_GETARG_INT32(0);
+ uint32 hash = 0;
+
+ while (count-- > 0)
+ {
+ for (int i=0; i< SCANKEYWORDS_NUM_KEYWORDS - 3; i++)
+ {
+ int idx = word_offsets[i];
+ hash += pgstat_hash_hash_key_orig((const void *) &aligned_words[idx], sizeof(PgStat_HashKey), NULL);
+ }
+ CHECK_FOR_INTERRUPTS();
+ }
+
+ PG_RETURN_INT32(hash);
+}
+
+PG_FUNCTION_INFO_V1(bench_pgstat_hash_fh);
+Datum
+bench_pgstat_hash_fh(PG_FUNCTION_ARGS)
+{
+ int32 count = PG_GETARG_INT32(0);
+ uint32 hash = 0;
+
+ while (count-- > 0)
+ {
+ for (int i=0; i< SCANKEYWORDS_NUM_KEYWORDS - 3; i++)
+ {
+ int idx = word_offsets[i];
+ hash += pgstat_hash_hash_key_FH((const void *) &aligned_words[idx], sizeof(PgStat_HashKey), NULL);
+ }
+ CHECK_FOR_INTERRUPTS();
+ }
+
+ PG_RETURN_INT32(hash);
+}
--
2.43.0