0001-Add-enable_partialsort-GUC-for-disabling-partial-sor.patch
text/x-patch
Filename: 0001-Add-enable_partialsort-GUC-for-disabling-partial-sor.patch
Type: text/x-patch
Part: 0
Message:
Re: PoC: Partial sort
Patch
Format: format-patch
Series: patch 0001
Subject: Add enable_partialsort GUC for disabling partial sorts
| File | + | − |
|---|---|---|
| doc/src/sgml/config.sgml | 13 | 0 |
| src/backend/optimizer/path/costsize.c | 2 | 1 |
| src/backend/optimizer/path/pathkeys.c | 1 | 0 |
| src/backend/utils/misc/guc.c | 10 | 0 |
| src/backend/utils/misc/postgresql.conf.sample | 1 | 0 |
| src/include/optimizer/cost.h | 1 | 0 |
From 3f05447e7feb99583336b381df60ff013a144bab Mon Sep 17 00:00:00 2001
From: Marti Raudsepp <marti@juffo.org>
Date: Mon, 13 Jan 2014 22:24:20 +0200
Subject: [PATCH] Add enable_partialsort GUC for disabling partial sorts
---
doc/src/sgml/config.sgml | 13 +++++++++++++
src/backend/optimizer/path/costsize.c | 3 ++-
src/backend/optimizer/path/pathkeys.c | 1 +
src/backend/utils/misc/guc.c | 10 ++++++++++
src/backend/utils/misc/postgresql.conf.sample | 1 +
src/include/optimizer/cost.h | 1 +
6 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 0f2f2bf..1995625 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -2808,6 +2808,19 @@ include 'filename'
</listitem>
</varlistentry>
+ <varlistentry id="guc-enable-partialsort" xreflabel="enable_partialsort">
+ <term><varname>enable_partialsort</varname> (<type>boolean</type>)</term>
+ <indexterm>
+ <primary><varname>enable_partialsort</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ Enables or disables the query planner's use of partial sort steps.
+ The default is <literal>on</>.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry id="guc-enable-tidscan" xreflabel="enable_tidscan">
<term><varname>enable_tidscan</varname> (<type>boolean</type>)</term>
<indexterm>
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index da64825..cefd480 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -112,6 +112,7 @@ bool enable_indexonlyscan = true;
bool enable_bitmapscan = true;
bool enable_tidscan = true;
bool enable_sort = true;
+bool enable_partialsort = true;
bool enable_hashagg = true;
bool enable_nestloop = true;
bool enable_material = true;
@@ -1329,7 +1330,7 @@ cost_sort(Path *path, PlannerInfo *root,
/*
* Estimate number of groups which dataset is divided by presorted keys.
*/
- if (presorted_keys > 0)
+ if (presorted_keys > 0 && enable_partialsort)
{
List *groupExprs = NIL;
ListCell *l;
diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c
index 55d8ef4..d5a1357 100644
--- a/src/backend/optimizer/path/pathkeys.c
+++ b/src/backend/optimizer/path/pathkeys.c
@@ -22,6 +22,7 @@
#include "nodes/nodeFuncs.h"
#include "nodes/plannodes.h"
#include "optimizer/clauses.h"
+#include "optimizer/cost.h"
#include "optimizer/pathnode.h"
#include "optimizer/paths.h"
#include "optimizer/tlist.h"
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 1217098..c3f2f29 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -1,3 +1,4 @@
+
/*--------------------------------------------------------------------
* guc.c
*
@@ -724,6 +725,15 @@ static struct config_bool ConfigureNamesBool[] =
NULL, NULL, NULL
},
{
+ {"enable_partialsort", PGC_USERSET, QUERY_TUNING_METHOD,
+ gettext_noop("Enables the planner's use of partial sort steps."),
+ NULL
+ },
+ &enable_partialsort,
+ true,
+ NULL, NULL, NULL
+ },
+ {
{"enable_hashagg", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Enables the planner's use of hashed aggregation plans."),
NULL
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 27791cc..20072fb 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -270,6 +270,7 @@
#enable_nestloop = on
#enable_seqscan = on
#enable_sort = on
+#enable_partialsort = on
#enable_tidscan = on
# - Planner Cost Constants -
diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h
index 47aef12..30203c7 100644
--- a/src/include/optimizer/cost.h
+++ b/src/include/optimizer/cost.h
@@ -56,6 +56,7 @@ extern bool enable_indexonlyscan;
extern bool enable_bitmapscan;
extern bool enable_tidscan;
extern bool enable_sort;
+extern bool enable_partialsort;
extern bool enable_hashagg;
extern bool enable_nestloop;
extern bool enable_material;
--
1.8.5.2