From 8d459762b10372e48845a49b305f4e1e165fe173 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Fri, 3 Jul 2020 11:35:22 +0900 Subject: [PATCH] Change default of pg_stat_statements.track_planning to off. 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 --- .../expected/pg_stat_statements.out | 1 + contrib/pg_stat_statements/pg_stat_statements.c | 2 +- .../sql/pg_stat_statements.sql | 1 + doc/src/sgml/pgstatstatements.sgml | 17 +++++++++++++++-- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out index f615f8c2bf..c3f013860a 100644 --- a/contrib/pg_stat_statements/expected/pg_stat_statements.out +++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out @@ -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 -------------------------- diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index cef8bb5a49..65ac301b99 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -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, diff --git a/contrib/pg_stat_statements/sql/pg_stat_statements.sql b/contrib/pg_stat_statements/sql/pg_stat_statements.sql index 75c10554a8..6ed8e38028 100644 --- a/contrib/pg_stat_statements/sql/pg_stat_statements.sql +++ b/contrib/pg_stat_statements/sql/pg_stat_statements.sql @@ -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"; diff --git a/doc/src/sgml/pgstatstatements.sgml b/doc/src/sgml/pgstatstatements.sgml index a13e28a84c..430d8bf07c 100644 --- a/doc/src/sgml/pgstatstatements.sgml +++ b/doc/src/sgml/pgstatstatements.sgml @@ -101,6 +101,8 @@ Number of times the statement was planned + (if pg_stat_statements.track_planning is enabled, + otherwise zero) @@ -110,6 +112,8 @@ Total time spent planning the statement, in milliseconds + (if pg_stat_statements.track_planning is enabled, + otherwise zero) @@ -119,6 +123,8 @@ Minimum time spent planning the statement, in milliseconds + (if pg_stat_statements.track_planning is enabled, + otherwise zero) @@ -128,6 +134,8 @@ Maximum time spent planning the statement, in milliseconds + (if pg_stat_statements.track_planning is enabled, + otherwise zero) @@ -137,6 +145,8 @@ Mean time spent planning the statement, in milliseconds + (if pg_stat_statements.track_planning is enabled, + otherwise zero) @@ -145,7 +155,10 @@ stddev_plan_time double precision - Population standard deviation of time spent planning the statement, in milliseconds + Population standard deviation of time spent planning the statement, + in milliseconds + (if pg_stat_statements.track_planning is enabled, + otherwise zero) @@ -594,7 +607,7 @@ pg_stat_statements.track_planning controls whether planning operations and duration are tracked by the module. - The default value is on. + The default value is off. Only superusers can change this setting.