adjust_memoize_hit_ratio_calculation.patch
application/octet-stream
Filename: adjust_memoize_hit_ratio_calculation.patch
Type: application/octet-stream
Part: 0
Message:
Adjust Memoize hit_ratio calculation
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/optimizer/path/costsize.c | 3 | 4 |
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 2c257a35fd..db187d4a1f 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -2557,11 +2557,10 @@ cost_memoize_rescan(PlannerInfo *root, MemoizePath *mpath, * must look at how many scans are estimated in total for this node and * how many of those scans we expect to get a cache hit. */ - hit_ratio = 1.0 / ndistinct * Min(est_cache_entries, ndistinct) - - (ndistinct / calls); + hit_ratio = ((calls - ndistinct) / calls) * + (est_cache_entries / Max(ndistinct, est_cache_entries)); - /* Ensure we don't go negative */ - hit_ratio = Max(hit_ratio, 0.0); + Assert(hit_ratio >= 0 && hit_ratio <= 1.0); /* * Set the total_cost accounting for the expected cache hit ratio. We