From: Justin Pryzby <pryzbyj@telsasoft.com>
Subject: [PATCH 4/4] Change force_parallel_mode to a DEVELOPER GUC, and remove it from sample config..
Date: Sat, 3 Apr 2021 19:24:50 -0500
..to help avoid users finding this option and changing it in hopes that it'll
make their queries faster, but without reading the documentation or
understanding what it does.
---
doc/src/sgml/config.sgml | 90 +++++++++----------
src/backend/utils/misc/guc.c | 2 +-
src/backend/utils/misc/postgresql.conf.sample | 1 -
3 files changed, 46 insertions(+), 47 deletions(-)
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgmlindex c4d5126c2a..5c7c5a39ca 100644--- a/doc/src/sgml/config.sgml+++ b/doc/src/sgml/config.sgml@@ -5788,51 +5788,6 @@ SELECT * FROM parent WHERE key = 2400;
</listitem>
</varlistentry>
- <varlistentry id="guc-force-parallel-mode" xreflabel="force_parallel_mode">- <term><varname>force_parallel_mode</varname> (<type>enum</type>)- <indexterm>- <primary><varname>force_parallel_mode</varname> configuration parameter</primary>- </indexterm>- </term>- <listitem>- <para>- Allows the use of parallel queries for testing purposes even in cases- where no performance benefit is expected.- The allowed values of <varname>force_parallel_mode</varname> are- <literal>off</literal> (use parallel mode only when it is expected to improve- performance), <literal>on</literal> (force parallel query for all queries- for which it is thought to be safe), and <literal>regress</literal> (like- <literal>on</literal>, but with additional behavior changes as explained- below).- </para>-- <para>- More specifically, setting this value to <literal>on</literal> will add- a <literal>Gather</literal> node to the top of any query plan for which this- appears to be safe, so that the query runs inside of a parallel worker.- Even when a parallel worker is not available or cannot be used,- operations such as starting a subtransaction that would be prohibited- in a parallel query context will be prohibited unless the planner- believes that this will cause the query to fail. If failures or- unexpected results occur when this option is set, some functions used- by the query may need to be marked <literal>PARALLEL UNSAFE</literal>- (or, possibly, <literal>PARALLEL RESTRICTED</literal>).- </para>-- <para>- Setting this value to <literal>regress</literal> has all of the same effects- as setting it to <literal>on</literal> plus some additional effects that are- intended to facilitate automated regression testing. Normally,- messages from a parallel worker include a context line indicating that,- but a setting of <literal>regress</literal> suppresses this line so that the- output is the same as in non-parallel execution. Also,- the <literal>Gather</literal> nodes added to plans by this setting are hidden- in <literal>EXPLAIN</literal> output so that the output matches what- would be obtained if this setting were turned <literal>off</literal>.- </para>- </listitem>- </varlistentry>-
<varlistentry id="guc-plan-cache_mode" xreflabel="plan_cache_mode">
<term><varname>plan_cache_mode</varname> (<type>enum</type>)
<indexterm>
@@ -10231,6 +10186,51 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
</listitem>
</varlistentry>
+ <varlistentry id="guc-force-parallel-mode" xreflabel="force_parallel_mode">+ <term><varname>force_parallel_mode</varname> (<type>enum</type>)+ <indexterm>+ <primary><varname>force_parallel_mode</varname> configuration parameter</primary>+ </indexterm>+ </term>+ <listitem>+ <para>+ Allows the use of parallel queries for testing purposes even in cases+ where no performance benefit is expected.+ The allowed values of <varname>force_parallel_mode</varname> are+ <literal>off</literal> (use parallel mode only when it is expected to improve+ performance), <literal>on</literal> (force parallel query for all queries+ for which it is thought to be safe), and <literal>regress</literal> (like+ <literal>on</literal>, but with additional behavior changes as explained+ below).+ </para>++ <para>+ More specifically, setting this value to <literal>on</literal> will add+ a <literal>Gather</literal> node to the top of any query plan for which this+ appears to be safe, so that the query runs inside of a parallel worker.+ Even when a parallel worker is not available or cannot be used,+ operations such as starting a subtransaction that would be prohibited+ in a parallel query context will be prohibited unless the planner+ believes that this will cause the query to fail. If failures or+ unexpected results occur when this option is set, some functions used+ by the query may need to be marked <literal>PARALLEL UNSAFE</literal>+ (or, possibly, <literal>PARALLEL RESTRICTED</literal>).+ </para>++ <para>+ Setting this value to <literal>regress</literal> has all of the same effects+ as setting it to <literal>on</literal> plus some additional effects that are+ intended to facilitate automated regression testing. Normally,+ messages from a parallel worker include a context line indicating that,+ but a setting of <literal>regress</literal> suppresses this line so that the+ output is the same as in non-parallel execution. Also,+ the <literal>Gather</literal> nodes added to plans by this setting are hidden+ in <literal>EXPLAIN</literal> output so that the output matches what+ would be obtained if this setting were turned <literal>off</literal>.+ </para>+ </listitem>+ </varlistentry>+
<varlistentry id="guc-ignore-system-indexes" xreflabel="ignore_system_indexes">
<term><varname>ignore_system_indexes</varname> (<type>boolean</type>)
<indexterm>
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.cindex 27287599ad..06de7c0308 100644--- a/src/backend/utils/misc/guc.c+++ b/src/backend/utils/misc/guc.c@@ -4840,7 +4840,7 @@ static struct config_enum ConfigureNamesEnum[] =
},
{
- {"force_parallel_mode", PGC_USERSET, QUERY_TUNING_OTHER,+ {"force_parallel_mode", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Forces use of parallel query facilities."),
gettext_noop("If possible, run query using a parallel worker and with parallel restrictions."),
GUC_EXPLAIN
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sampleindex 52c4373a79..50faa50462 100644--- a/src/backend/utils/misc/postgresql.conf.sample+++ b/src/backend/utils/misc/postgresql.conf.sample@@ -415,7 +415,6 @@
#from_collapse_limit = 8
#join_collapse_limit = 8 # 1 disables collapsing of explicit
# JOIN clauses
-#force_parallel_mode = off
#jit = on # allow JIT compilation
#plan_cache_mode = auto # auto, force_generic_plan or
# force_custom_plan
--
2.17.0
--GyRA7555PLgSTuth--
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-performance@postgresql.org
Cc: pryzbyj@telsasoft.com
Subject: Re: [PATCH 4/4] Change force_parallel_mode to a DEVELOPER GUC, and remove it from sample config..
In-Reply-To: <no-message-id-3363@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox