summaryrefslogtreecommitdiff
path: root/src/include/optimizer/cost.h
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2017-03-09 07:40:36 -0500
committerRobert Haas <rhaas@postgresql.org>2017-03-09 07:49:29 -0500
commit355d3993c53ed62c5b53d020648e4fbcfbf5f155 (patch)
tree9a439084995c6553dd035fe218d9864011192b36 /src/include/optimizer/cost.h
parenta72f0365db4168e7d720608fe3ac0ca3fe9355df (diff)
downloadpostgresql-355d3993c53ed62c5b53d020648e4fbcfbf5f155.tar.gz
Add a Gather Merge executor node.
Like Gather, we spawn multiple workers and run the same plan in each one; however, Gather Merge is used when each worker produces the same output ordering and we want to preserve that output ordering while merging together the streams of tuples from various workers. (In a way, Gather Merge is like a hybrid of Gather and MergeAppend.) This works out to a win if it saves us from having to perform an expensive Sort. In cases where only a small amount of data would need to be sorted, it may actually be faster to use a regular Gather node and then sort the results afterward, because Gather Merge sometimes needs to wait synchronously for tuples whereas a pure Gather generally doesn't. But if this avoids an expensive sort then it's a win. Rushabh Lathia, reviewed and tested by Amit Kapila, Thomas Munro, and Neha Sharma, and reviewed and revised by me. Discussion: http://postgr.es/m/CAGPqQf09oPX-cQRpBKS0Gq49Z+m6KBxgxd_p9gX8CKk_d75HoQ@mail.gmail.com
Diffstat (limited to 'src/include/optimizer/cost.h')
-rw-r--r--src/include/optimizer/cost.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h
index 2b386835e3..d9a9b12a06 100644
--- a/src/include/optimizer/cost.h
+++ b/src/include/optimizer/cost.h
@@ -66,6 +66,7 @@ extern bool enable_nestloop;
extern bool enable_material;
extern bool enable_mergejoin;
extern bool enable_hashjoin;
+extern bool enable_gathermerge;
extern int constraint_exclusion;
extern double clamp_row_est(double nrows);
@@ -205,5 +206,9 @@ extern Selectivity clause_selectivity(PlannerInfo *root,
int varRelid,
JoinType jointype,
SpecialJoinInfo *sjinfo);
+extern void cost_gather_merge(GatherMergePath *path, PlannerInfo *root,
+ RelOptInfo *rel, ParamPathInfo *param_info,
+ Cost input_startup_cost, Cost input_total_cost,
+ double *rows);
#endif /* COST_H */