From bbce295626e45d899e93a572d38074c40e8c9335 Mon Sep 17 00:00:00 2001 From: Evdokimov Ilia Date: Wed, 16 Apr 2025 00:53:50 +0300 Subject: [PATCH v8 3/3] Show estimated lookups in EXPLAIN ouput for Memoize Reviewed-by: David Rowley Reviewed-by: Robert Haas Reviewed-by: Andrei Lepikhov Reviewed-by: Tom Lane --- src/backend/commands/explain.c | 4 +++- src/backend/optimizer/plan/createplan.c | 10 +++++++--- src/include/nodes/plannodes.h | 3 +++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 85b22561aa6..6fcfa53a166 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -3633,15 +3633,17 @@ show_memoize_info(MemoizeState *mstate, List *ancestors, ExplainState *es) if (es->format == EXPLAIN_FORMAT_TEXT) { ExplainIndentText(es); - appendStringInfo(es->str, "Estimates: capacity=%u distinct keys=%.0f hit ratio=%.2f%%\n", + appendStringInfo(es->str, "Estimates: capacity=%u distinct keys=%.0f lookups=%.0f hit ratio=%.2f%%\n", ((Memoize *) plan)->est_entries, ((Memoize *) plan)->est_unique_keys, + ((Memoize *) plan)->lookups, ((Memoize *) plan)->hit_ratio * 100.0); } else { ExplainPropertyUInteger("Estimated Capacity", "", ((Memoize *) plan)->est_entries, es); ExplainPropertyFloat("Estimated Distinct Lookup Keys", "", ((Memoize *) plan)->est_unique_keys, 0, es); + ExplainPropertyFloat("Estimated Lookups", "", ((Memoize *) plan)->lookups, 0, es); ExplainPropertyFloat("Estimated Hit Ratio", "", ((Memoize *) plan)->hit_ratio * 100.0, 2, es); } } diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index ccb880158fe..47a092747d5 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -285,7 +285,8 @@ static Memoize *make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations, List *param_exprs, bool singlerow, bool binary_mode, uint32 est_entries, Bitmapset *keyparamids, - double est_unique_keys, double hit_ratio); + double est_unique_keys, double hit_ratio, + double lookups); static WindowAgg *make_windowagg(List *tlist, WindowClause *wc, int partNumCols, AttrNumber *partColIdx, Oid *partOperators, Oid *partCollations, int ordNumCols, AttrNumber *ordColIdx, Oid *ordOperators, Oid *ordCollations, @@ -1705,7 +1706,8 @@ create_memoize_plan(PlannerInfo *root, MemoizePath *best_path, int flags) plan = make_memoize(subplan, operators, collations, param_exprs, best_path->singlerow, best_path->binary_mode, best_path->est_entries, keyparamids, - best_path->est_unique_keys, best_path->hit_ratio); + best_path->est_unique_keys, best_path->hit_ratio, + best_path->calls); copy_generic_path_info(&plan->plan, (Path *) best_path); @@ -6639,7 +6641,8 @@ static Memoize * make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations, List *param_exprs, bool singlerow, bool binary_mode, uint32 est_entries, Bitmapset *keyparamids, - double est_unique_keys, double hit_ratio) + double est_unique_keys, double hit_ratio, + double lookups) { Memoize *node = makeNode(Memoize); Plan *plan = &node->plan; @@ -6659,6 +6662,7 @@ make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations, node->keyparamids = keyparamids; node->est_unique_keys = est_unique_keys; node->hit_ratio = hit_ratio; + node->lookups = lookups; return node; } diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 4354d4f66d3..6eb08866304 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -1072,6 +1072,9 @@ typedef struct Memoize /* Estimated cache hit ratio. Kept for EXPLAIN */ double hit_ratio; + + /* Estimated number of lookups. Kept for EXPLAIN */ + double lookups; } Memoize; /* ---------------- -- 2.34.1