Change default of pg_stat_statements.track_planning to off.
authorFujii Masao <fujii@postgresql.org>
Fri, 3 Jul 2020 02:35:22 +0000 (11:35 +0900)
committerFujii Masao <fujii@postgresql.org>
Fri, 3 Jul 2020 02:35:22 +0000 (11:35 +0900)
Since v13 pg_stat_statements is allowed to track the planning time of
statements when track_planning option is enabled. Its default was on.

But this feature could cause more terrible spinlock contentions in
pg_stat_statements. As a result of this, Robins Tharakan reported that
v13 beta1 showed ~45% performance drop at high DB connection counts
(when compared with v12.3) during fully-cached SELECT-only test using
pgbench.

To avoid this performance regression by the default setting,
this commit changes default of pg_stat_statements.track_planning to off.

Back-patch to v13 where pg_stat_statements.track_planning was introduced.

Reported-by: Robins Tharakan
Author: Fujii Masao
Reviewed-by: Julien Rouhaud
Discussion: https://postgr.es/m/2895b53b033c47ccb22972b589050dd9@EX13D05UWC001.ant.amazon.com

contrib/pg_stat_statements/expected/pg_stat_statements.out
contrib/pg_stat_statements/pg_stat_statements.c
contrib/pg_stat_statements/sql/pg_stat_statements.sql
doc/src/sgml/pgstatstatements.sgml

index f615f8c2bfd4bbb0137d74fa8f4342b5e7e807c6..c3f013860ae3be28dec315d18eba52e17770c3a0 100644 (file)
@@ -3,6 +3,7 @@ CREATE EXTENSION pg_stat_statements;
 -- simple and compound statements
 --
 SET pg_stat_statements.track_utility = FALSE;
+SET pg_stat_statements.track_planning = TRUE;
 SELECT pg_stat_statements_reset();
  pg_stat_statements_reset 
 --------------------------
index cef8bb5a49a22e416b22849a9779c5f968facb0a..65ac301b99facfa06f987f43d61d8a19d1c533c4 100644 (file)
@@ -442,7 +442,7 @@ _PG_init(void)
                             "Selects whether planning duration is tracked by pg_stat_statements.",
                             NULL,
                             &pgss_track_planning,
-                            true,
+                            false,
                             PGC_SUSET,
                             0,
                             NULL,
index 75c10554a891d62bb6353791fe667d7828740554..6ed8e38028021be1c2f9bffef4f0c06b60066b47 100644 (file)
@@ -4,6 +4,7 @@ CREATE EXTENSION pg_stat_statements;
 -- simple and compound statements
 --
 SET pg_stat_statements.track_utility = FALSE;
+SET pg_stat_statements.track_planning = TRUE;
 SELECT pg_stat_statements_reset();
 
 SELECT 1 AS "int";
index a13e28a84ccade51e6ff7861fcc4058f805a5c5c..430d8bf07c44798d822a95b392ed5ddcb72c3423 100644 (file)
       </para>
       <para>
        Number of times the statement was planned
+       (if <varname>pg_stat_statements.track_planning</varname> is enabled,
+       otherwise zero)
       </para></entry>
      </row>
 
       </para>
       <para>
        Total time spent planning the statement, in milliseconds
+       (if <varname>pg_stat_statements.track_planning</varname> is enabled,
+       otherwise zero)
       </para></entry>
      </row>
 
       </para>
       <para>
        Minimum time spent planning the statement, in milliseconds
+       (if <varname>pg_stat_statements.track_planning</varname> is enabled,
+       otherwise zero)
       </para></entry>
      </row>
 
       </para>
       <para>
        Maximum time spent planning the statement, in milliseconds
+       (if <varname>pg_stat_statements.track_planning</varname> is enabled,
+       otherwise zero)
       </para></entry>
      </row>
 
       </para>
       <para>
        Mean time spent planning the statement, in milliseconds
+       (if <varname>pg_stat_statements.track_planning</varname> is enabled,
+       otherwise zero)
       </para></entry>
      </row>
 
        <structfield>stddev_plan_time</structfield> <type>double precision</type>
       </para>
       <para>
-       Population standard deviation of time spent planning the statement, in milliseconds
+       Population standard deviation of time spent planning the statement,
+       in milliseconds
+       (if <varname>pg_stat_statements.track_planning</varname> is enabled,
+       otherwise zero)
       </para></entry>
      </row>
 
      <para>
       <varname>pg_stat_statements.track_planning</varname> controls whether
       planning operations and duration are tracked by the module.
-      The default value is <literal>on</literal>.
+      The default value is <literal>off</literal>.
       Only superusers can change this setting.
      </para>
     </listitem>