0002-Trick-to-measure-jumbling.patch.txt
text/plain
Filename: 0002-Trick-to-measure-jumbling.patch.txt
Type: text/plain
Part: 1
From 2211e60a47f8ff926e22c21433f9630bc4580bb6 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Fri, 21 Mar 2025 14:21:56 +0900
Subject: [PATCH 2/2] Trick to measure jumbling
---
src/backend/tcop/postgres.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 0554a4ae3c7b..e2365efe676b 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -873,6 +873,19 @@ pg_rewrite_query(Query *query)
return querytree_list;
}
+#define NANOSEC_PER_SEC 1000000000
+
+#include <time.h>
+
+/* Returns difference between t1 and t2 in nanoseconds */
+static int64
+get_clock_diff(struct timespec *t1, struct timespec *t2)
+{
+ int64 nanosec = (t1->tv_sec - t2->tv_sec) * NANOSEC_PER_SEC;
+ nanosec += (t1->tv_nsec - t2->tv_nsec);
+
+ return nanosec;
+}
/*
* Generate a plan for a single already-rewritten query.
@@ -883,6 +896,8 @@ pg_plan_query(Query *querytree, const char *query_string, int cursorOptions,
ParamListInfo boundParams)
{
PlannedStmt *plan;
+ struct timespec start, end;
+ int64 jumbletime;
/* Utility commands have no plans. */
if (querytree->commandType == CMD_UTILITY)
@@ -896,6 +911,19 @@ pg_plan_query(Query *querytree, const char *query_string, int cursorOptions,
if (log_planner_stats)
ResetUsage();
+ if (IsQueryIdEnabled())
+ {
+ #define JUMBLE_LOOPS 100000
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
+ for (int i = 0; i < JUMBLE_LOOPS; i++)
+ {
+ JumbleQuery(querytree);
+ }
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
+ jumbletime = get_clock_diff(&end, &start);
+ elog(NOTICE, "QueryJumble in %f ms", jumbletime / 1000000.0);
+ }
+
/* call the optimizer */
plan = planner(querytree, query_string, cursorOptions, boundParams);
--
2.49.0