From: Robert Haas Date: Wed, 15 Mar 2017 16:28:54 +0000 (-0400) Subject: Fix failure to use clamp_row_est() for parallel joins. X-Git-Tag: REL_10_BETA1~631 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=1ea60ad602f9e97246958b721c8fa7c713aa86eb;p=postgresql.git Fix failure to use clamp_row_est() for parallel joins. Commit 0c2070cefa0e5d097b715c9a3b9b5499470019aa neglected to use clamp_row_est() where it should have done so. Patch by me. Report by Amit Kapila. Discussion: http://postgr.es/m/CAA4eK1KPm8RYa1Kun3ZmQj9pb723b-EFN70j47Pid1vn3ByquA@mail.gmail.com --- diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index cd6dcaab190..a129d1ecb3b 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -2147,7 +2147,12 @@ final_cost_nestloop(PlannerInfo *root, NestPath *path, /* For partial paths, scale row estimate. */ if (path->path.parallel_workers > 0) - path->path.rows /= get_parallel_divisor(&path->path); + { + double parallel_divisor = get_parallel_divisor(&path->path); + + path->path.rows = + clamp_row_est(path->path.rows / parallel_divisor); + } /* * We could include disable_cost in the preliminary estimate, but that @@ -2569,7 +2574,12 @@ final_cost_mergejoin(PlannerInfo *root, MergePath *path, /* For partial paths, scale row estimate. */ if (path->jpath.path.parallel_workers > 0) - path->jpath.path.rows /= get_parallel_divisor(&path->jpath.path); + { + double parallel_divisor = get_parallel_divisor(&path->jpath.path); + + path->jpath.path.rows = + clamp_row_est(path->jpath.path.rows / parallel_divisor); + } /* * We could include disable_cost in the preliminary estimate, but that @@ -2952,7 +2962,12 @@ final_cost_hashjoin(PlannerInfo *root, HashPath *path, /* For partial paths, scale row estimate. */ if (path->jpath.path.parallel_workers > 0) - path->jpath.path.rows /= get_parallel_divisor(&path->jpath.path); + { + double parallel_divisor = get_parallel_divisor(&path->jpath.path); + + path->jpath.path.rows = + clamp_row_est(path->jpath.path.rows / parallel_divisor); + } /* * We could include disable_cost in the preliminary estimate, but that