Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf48b4f8

Browse files
committed
Correct Memoize's estimated cache hit ratio calculation
As demonstrated by David Johnston, the Memoize cache hit ratio calculationwasn't quite correct.This change only affects the estimated hit ratio when the estimated numberof entries to cache is estimated not to fit inside the cache. Forexample, if we expect 2000 distinct cache key values and only expect to beable to cache 1000 of those at once due to memory constraints, with anestimate of 10000 calls, if we could store all entries then the hit ratioshould be 80% to account for the first 2000 of the 10000 calls to be acache miss due to the value not being cached yet. If we can only store1000 entries for each of the 2000 distinct possible values at once thenthe 80% should be reduced by half to make the final estimate of 40%.Previously, the calculation would have produced an estimated hit ratio of30%, which wasn't correct.Apply to master only so as not to destabilize plans in the back branches.Reported-by: David G. JohnstonDiscussion:https://postgr.es/m/CAKFQuwZEmcNk3YQo2Xj4EDUOdY6qakad31rOD1Vc4q1_s68-Ew@mail.gmail.comDiscussion:https://postgr.es/m/CAApHDvrV44LwiF4W_qf_RpbGYWSgp1kF=cZr+kTRRaALUfmXqw@mail.gmail.com
1 parentb0d8f2d commitf48b4f8

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

‎src/backend/optimizer/path/costsize.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2558,11 +2558,10 @@ cost_memoize_rescan(PlannerInfo *root, MemoizePath *mpath,
25582558
* must look at how many scans are estimated in total for this node and
25592559
* how many of those scans we expect to get a cache hit.
25602560
*/
2561-
hit_ratio=1.0 /ndistinct*Min(est_cache_entries,ndistinct)-
2562-
(ndistinct /calls);
2561+
hit_ratio=((calls-ndistinct) /calls)*
2562+
(est_cache_entries /Max(ndistinct,est_cache_entries));
25632563

2564-
/* Ensure we don't go negative */
2565-
hit_ratio=Max(hit_ratio,0.0);
2564+
Assert(hit_ratio >=0&&hit_ratio <=1.0);
25662565

25672566
/*
25682567
* Set the total_cost accounting for the expected cache hit ratio. We

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp