Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
7933bc0d
Commit
7933bc0d
authored
Nov 24, 2021
by
David Rowley
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Flush Memoize cache when non-key parameters change"
This reverts commit
f94edb06
.
parent
f94edb06
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
3 additions
and
142 deletions
+3
-142
src/backend/executor/nodeMemoize.c
src/backend/executor/nodeMemoize.c
+0
-38
src/backend/nodes/bitmapset.c
src/backend/nodes/bitmapset.c
+0
-2
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/createplan.c
+3
-7
src/backend/optimizer/util/clauses.c
src/backend/optimizer/util/clauses.c
+0
-31
src/include/nodes/execnodes.h
src/include/nodes/execnodes.h
+0
-2
src/include/nodes/plannodes.h
src/include/nodes/plannodes.h
+0
-1
src/include/optimizer/clauses.h
src/include/optimizer/clauses.h
+0
-2
src/test/regress/expected/memoize.out
src/test/regress/expected/memoize.out
+0
-39
src/test/regress/sql/memoize.sql
src/test/regress/sql/memoize.sql
+0
-20
No files found.
src/backend/executor/nodeMemoize.c
View file @
7933bc0d
...
...
@@ -367,37 +367,6 @@ remove_cache_entry(MemoizeState *mstate, MemoizeEntry *entry)
pfree
(
key
);
}
/*
* cache_purge_all
* Remove all items from the cache
*/
static
void
cache_purge_all
(
MemoizeState
*
mstate
)
{
uint64
evictions
=
mstate
->
hashtable
->
members
;
PlanState
*
pstate
=
(
PlanState
*
)
mstate
;
/*
* Likely the most efficient way to remove all items is to just reset the
* memory context for the cache and then rebuild a fresh hash table. This
* saves having to remove each item one by one and pfree each cached tuple
*/
MemoryContextReset
(
mstate
->
tableContext
);
/* Make the hash table the same size as the original size */
build_hash_table
(
mstate
,
((
Memoize
*
)
pstate
->
plan
)
->
est_entries
);
/* reset the LRU list */
dlist_init
(
&
mstate
->
lru_list
);
mstate
->
last_tuple
=
NULL
;
mstate
->
entry
=
NULL
;
mstate
->
mem_used
=
0
;
/* XXX should we add something new to track these purges? */
mstate
->
stats
.
cache_evictions
+=
evictions
;
/* Update Stats */
}
/*
* cache_reduce_memory
* Evict older and less recently used items from the cache in order to
...
...
@@ -1010,7 +979,6 @@ ExecInitMemoize(Memoize *node, EState *estate, int eflags)
* getting the first tuple. This allows us to mark it as so.
*/
mstate
->
singlerow
=
node
->
singlerow
;
mstate
->
keyparamids
=
node
->
keyparamids
;
/*
* Record if the cache keys should be compared bit by bit, or logically
...
...
@@ -1114,12 +1082,6 @@ ExecReScanMemoize(MemoizeState *node)
if
(
outerPlan
->
chgParam
==
NULL
)
ExecReScan
(
outerPlan
);
/*
* Purge the entire cache if a parameter changed that is not part of the
* cache key.
*/
if
(
bms_nonempty_difference
(
outerPlan
->
chgParam
,
node
->
keyparamids
))
cache_purge_all
(
node
);
}
/*
...
...
src/backend/nodes/bitmapset.c
View file @
7933bc0d
...
...
@@ -540,8 +540,6 @@ bms_overlap_list(const Bitmapset *a, const List *b)
/*
* bms_nonempty_difference - do sets have a nonempty difference?
*
* i.e., are any members set in 'a' that are not also set in 'b'.
*/
bool
bms_nonempty_difference
(
const
Bitmapset
*
a
,
const
Bitmapset
*
b
)
...
...
src/backend/optimizer/plan/createplan.c
View file @
7933bc0d
...
...
@@ -280,7 +280,7 @@ static Material *make_material(Plan *lefttree);
static
Memoize
*
make_memoize
(
Plan
*
lefttree
,
Oid
*
hashoperators
,
Oid
*
collations
,
List
*
param_exprs
,
bool
singlerow
,
bool
binary_mode
,
uint32
est_entries
,
Bitmapset
*
keyparamids
);
uint32
est_entries
);
static
WindowAgg
*
make_windowagg
(
List
*
tlist
,
Index
winref
,
int
partNumCols
,
AttrNumber
*
partColIdx
,
Oid
*
partOperators
,
Oid
*
partCollations
,
int
ordNumCols
,
AttrNumber
*
ordColIdx
,
Oid
*
ordOperators
,
Oid
*
ordCollations
,
...
...
@@ -1586,7 +1586,6 @@ static Memoize *
create_memoize_plan
(
PlannerInfo
*
root
,
MemoizePath
*
best_path
,
int
flags
)
{
Memoize
*
plan
;
Bitmapset
*
keyparamids
;
Plan
*
subplan
;
Oid
*
operators
;
Oid
*
collations
;
...
...
@@ -1618,11 +1617,9 @@ create_memoize_plan(PlannerInfo *root, MemoizePath *best_path, int flags)
i
++
;
}
keyparamids
=
pull_paramids
((
Expr
*
)
param_exprs
);
plan
=
make_memoize
(
subplan
,
operators
,
collations
,
param_exprs
,
best_path
->
singlerow
,
best_path
->
binary_mode
,
best_path
->
est_entries
,
keyparamids
);
best_path
->
est_entries
);
copy_generic_path_info
(
&
plan
->
plan
,
(
Path
*
)
best_path
);
...
...
@@ -6422,7 +6419,7 @@ materialize_finished_plan(Plan *subplan)
static
Memoize
*
make_memoize
(
Plan
*
lefttree
,
Oid
*
hashoperators
,
Oid
*
collations
,
List
*
param_exprs
,
bool
singlerow
,
bool
binary_mode
,
uint32
est_entries
,
Bitmapset
*
keyparamids
)
uint32
est_entries
)
{
Memoize
*
node
=
makeNode
(
Memoize
);
Plan
*
plan
=
&
node
->
plan
;
...
...
@@ -6439,7 +6436,6 @@ make_memoize(Plan *lefttree, Oid *hashoperators, Oid *collations,
node
->
singlerow
=
singlerow
;
node
->
binary_mode
=
binary_mode
;
node
->
est_entries
=
est_entries
;
node
->
keyparamids
=
keyparamids
;
return
node
;
}
...
...
src/backend/optimizer/util/clauses.c
View file @
7933bc0d
...
...
@@ -152,7 +152,6 @@ static Query *substitute_actual_srf_parameters(Query *expr,
int
nargs
,
List
*
args
);
static
Node
*
substitute_actual_srf_parameters_mutator
(
Node
*
node
,
substitute_actual_srf_parameters_context
*
context
);
static
bool
pull_paramids_walker
(
Node
*
node
,
Bitmapset
**
context
);
/*****************************************************************************
...
...
@@ -5168,33 +5167,3 @@ substitute_actual_srf_parameters_mutator(Node *node,
substitute_actual_srf_parameters_mutator
,
(
void
*
)
context
);
}
/*
* pull_paramids
* Returns a Bitmapset containing the paramids of all Params in 'expr'.
*/
Bitmapset
*
pull_paramids
(
Expr
*
expr
)
{
Bitmapset
*
result
=
NULL
;
(
void
)
pull_paramids_walker
((
Node
*
)
expr
,
&
result
);
return
result
;
}
static
bool
pull_paramids_walker
(
Node
*
node
,
Bitmapset
**
context
)
{
if
(
node
==
NULL
)
return
false
;
if
(
IsA
(
node
,
Param
))
{
Param
*
param
=
(
Param
*
)
node
;
*
context
=
bms_add_member
(
*
context
,
param
->
paramid
);
return
false
;
}
return
expression_tree_walker
(
node
,
pull_paramids_walker
,
(
void
*
)
context
);
}
src/include/nodes/execnodes.h
View file @
7933bc0d
...
...
@@ -2112,8 +2112,6 @@ typedef struct MemoizeState
* by bit, false when using hash equality ops */
MemoizeInstrumentation
stats
;
/* execution statistics */
SharedMemoizeInfo
*
shared_info
;
/* statistics for parallel workers */
Bitmapset
*
keyparamids
;
/* Param->paramids of expressions belonging to
* param_exprs */
}
MemoizeState
;
/* ----------------
...
...
src/include/nodes/plannodes.h
View file @
7933bc0d
...
...
@@ -801,7 +801,6 @@ typedef struct Memoize
uint32
est_entries
;
/* The maximum number of entries that the
* planner expects will fit in the cache, or 0
* if unknown */
Bitmapset
*
keyparamids
;
/* paramids from param_exprs */
}
Memoize
;
/* ----------------
...
...
src/include/optimizer/clauses.h
View file @
7933bc0d
...
...
@@ -53,6 +53,4 @@ extern void CommuteOpExpr(OpExpr *clause);
extern
Query
*
inline_set_returning_function
(
PlannerInfo
*
root
,
RangeTblEntry
*
rte
);
extern
Bitmapset
*
pull_paramids
(
Expr
*
expr
);
#endif
/* CLAUSES_H */
src/test/regress/expected/memoize.out
View file @
7933bc0d
...
...
@@ -196,45 +196,6 @@ SELECT * FROM strtest s1 INNER JOIN strtest s2 ON s1.t >= s2.t;', false);
(8 rows)
DROP TABLE strtest;
-- Exercise Memoize code that flushes the cache when a parameter changes which
-- is not part of the cache key.
-- Ensure we get a Memoize plan
EXPLAIN (COSTS OFF)
SELECT UNIQUE1 FROM tenk1 t0
WHERE unique1 < 3
AND EXISTS (
SELECT 1 FROM tenk1 t1
INNER JOIN tenk2 t2 ON t1.unique1 = t2.hundred
WHERE t0.ten = t1.twenty AND t0.two <> t2.four OFFSET 0);
QUERY PLAN
----------------------------------------------------------------
Index Scan using tenk1_unique1 on tenk1 t0
Index Cond: (unique1 < 3)
Filter: (SubPlan 1)
SubPlan 1
-> Nested Loop
-> Index Scan using tenk2_hundred on tenk2 t2
Filter: (t0.two <> four)
-> Memoize
Cache Key: t2.hundred
Cache Mode: logical
-> Index Scan using tenk1_unique1 on tenk1 t1
Index Cond: (unique1 = t2.hundred)
Filter: (t0.ten = twenty)
(13 rows)
-- Ensure the above query returns the correct result
SELECT UNIQUE1 FROM tenk1 t0
WHERE unique1 < 3
AND EXISTS (
SELECT 1 FROM tenk1 t1
INNER JOIN tenk2 t2 ON t1.unique1 = t2.hundred
WHERE t0.ten = t1.twenty AND t0.two <> t2.four OFFSET 0);
unique1
---------
2
(1 row)
RESET enable_seqscan;
RESET enable_mergejoin;
RESET work_mem;
...
...
src/test/regress/sql/memoize.sql
View file @
7933bc0d
...
...
@@ -103,26 +103,6 @@ SELECT * FROM strtest s1 INNER JOIN strtest s2 ON s1.t >= s2.t;', false);
DROP
TABLE
strtest
;
-- Exercise Memoize code that flushes the cache when a parameter changes which
-- is not part of the cache key.
-- Ensure we get a Memoize plan
EXPLAIN
(
COSTS
OFF
)
SELECT
UNIQUE1
FROM
tenk1
t0
WHERE
unique1
<
3
AND
EXISTS
(
SELECT
1
FROM
tenk1
t1
INNER
JOIN
tenk2
t2
ON
t1
.
unique1
=
t2
.
hundred
WHERE
t0
.
ten
=
t1
.
twenty
AND
t0
.
two
<>
t2
.
four
OFFSET
0
);
-- Ensure the above query returns the correct result
SELECT
UNIQUE1
FROM
tenk1
t0
WHERE
unique1
<
3
AND
EXISTS
(
SELECT
1
FROM
tenk1
t1
INNER
JOIN
tenk2
t2
ON
t1
.
unique1
=
t2
.
hundred
WHERE
t0
.
ten
=
t1
.
twenty
AND
t0
.
two
<>
t2
.
four
OFFSET
0
);
RESET
enable_seqscan
;
RESET
enable_mergejoin
;
RESET
work_mem
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment