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

Commitaa901a3

Browse files
committed
Fix possible Assert failure in cost_memoize_rescan
In cost_memoize_rescan(), when calculating the hit_ratio using the callsand ndistinct estimations, if the value that was set inMemoizePath.calls had not been processed through clamp_row_est(), then itwas possible that it was set to some non-integer value which could resultin ndistinct being 1 higher than calls due to estimate_num_groups()performing clamp_row_est() on its input_rows. This could result inhit_ratio values slightly below 0.0, which would cause an Assert failure.The value of MemoizePath.calls comes from the final parameter in thecreate_memoize_path() function, of which we only have one true caller of.That caller passes outer_path->rows. All the core code I looked atalways seems to call clamp_row_est() on the Path.rows, so there mighthave been no issues with any core Paths causing troubles here. The bugreport was about a CustomPath with a non-clamped row estimated.The misbehavior as a result of this seems to be mostly limited to theAssert() failing. Aside from that, it seems the Memoize costs wouldjust come out slightly higher than they should have, which is likelyfairly harmless.Reported-by: Kohei KaiGai <kaigai@heterodb.com>Discussion:https://postgr.es/m/CAOP8fzZnTU+N64UYJYogb1hN-5hFP+PwTb3m_cnGAD7EsQwrKw@mail.gmail.comReviewed-by: Richard GuoBackpatch-through: 14, where Memoize was introduced
1 parent5603e11 commitaa901a3

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

‎src/backend/optimizer/util/pathnode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1618,7 +1618,7 @@ create_memoize_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath,
16181618
pathnode->param_exprs=param_exprs;
16191619
pathnode->singlerow=singlerow;
16201620
pathnode->binary_mode=binary_mode;
1621-
pathnode->calls=calls;
1621+
pathnode->calls=clamp_row_est(calls);
16221622

16231623
/*
16241624
* For now we set est_entries to 0. cost_memoize_rescan() does all the

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp