From eec34ddd02c8be8aa6dbebd8328cc5ced4bf2bb9 Mon Sep 17 00:00:00 2001 From: Justin Pryzby Date: Wed, 22 Jul 2020 19:20:40 -0500 Subject: [PATCH 3/7] Make explain default to BUFFERS TRUE On Tue, Oct 25, 2022 at 03:49:14PM +0200, Laurenz Albe wrote: > This is not enough. The patch would have to update all the examples that use EXPLAIN ANALYZE. git grep -i 'explain.*analyze' doc --- contrib/auto_explain/auto_explain.c | 4 ++-- doc/src/sgml/auto-explain.sgml | 2 +- doc/src/sgml/config.sgml | 2 +- doc/src/sgml/perform.sgml | 4 ++-- doc/src/sgml/ref/explain.sgml | 2 +- src/backend/commands/explain.c | 8 ++++++++ 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/contrib/auto_explain/auto_explain.c b/contrib/auto_explain/auto_explain.c index 269a0fa86c5..adcb03c73fb 100644 --- a/contrib/auto_explain/auto_explain.c +++ b/contrib/auto_explain/auto_explain.c @@ -29,7 +29,7 @@ static int auto_explain_log_min_duration = -1; /* msec or -1 */ static int auto_explain_log_parameter_max_length = -1; /* bytes or -1 */ static bool auto_explain_log_analyze = false; static bool auto_explain_log_verbose = false; -static bool auto_explain_log_buffers = false; +static bool auto_explain_log_buffers = true; static bool auto_explain_log_wal = false; static bool auto_explain_log_triggers = false; static bool auto_explain_log_timing = true; @@ -154,7 +154,7 @@ _PG_init(void) "Log buffers usage.", NULL, &auto_explain_log_buffers, - false, + true, PGC_SUSET, 0, NULL, diff --git a/doc/src/sgml/auto-explain.sgml b/doc/src/sgml/auto-explain.sgml index 394fec94e88..a5aa9c0cf7b 100644 --- a/doc/src/sgml/auto-explain.sgml +++ b/doc/src/sgml/auto-explain.sgml @@ -122,7 +122,7 @@ LOAD 'auto_explain'; equivalent to the BUFFERS option of EXPLAIN. This parameter has no effect unless auto_explain.log_analyze is enabled. - This parameter is off by default. + This parameter is on by default. Only superusers can change this setting. diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 559eb898a9a..78ff44b4853 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7994,7 +7994,7 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; displayed in pg_stat_database, in the output of when the BUFFERS option - is used, in the output of when + is enabled, in the output of when the VERBOSE option is used, by autovacuum for auto-vacuums and auto-analyzes, when is set and by diff --git a/doc/src/sgml/perform.sgml b/doc/src/sgml/perform.sgml index c3ee47b3d6d..a7bcc3f3fa9 100644 --- a/doc/src/sgml/perform.sgml +++ b/doc/src/sgml/perform.sgml @@ -731,8 +731,8 @@ EXPLAIN ANALYZE SELECT * FROM polygon_tbl WHERE f1 @> polygon '(0.5,2.0)'; - EXPLAIN has a BUFFERS option that can be used with - ANALYZE to get even more run time statistics: + EXPLAIN ANALYZE has a BUFFERS option which + provides even more run time statistics: EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM tenk1 WHERE unique1 < 100 AND unique2 > 9000; diff --git a/doc/src/sgml/ref/explain.sgml b/doc/src/sgml/ref/explain.sgml index d4895b9d7d4..8a7435789b3 100644 --- a/doc/src/sgml/ref/explain.sgml +++ b/doc/src/sgml/ref/explain.sgml @@ -191,7 +191,7 @@ ROLLBACK; The number of blocks shown for an upper-level node includes those used by all its child nodes. In text format, only non-zero values are printed. It defaults to - FALSE. + TRUE. diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 373fde4d498..7880e18ff67 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -174,6 +174,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, bool timing_set = false; bool summary_set = false; bool costs_set = false; + bool buffers_set = false; /* Parse options list. */ foreach(lc, stmt->options) @@ -191,7 +192,10 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, es->costs = defGetBoolean(opt); } else if (strcmp(opt->defname, "buffers") == 0) + { + buffers_set = true; es->buffers = defGetBoolean(opt); + } else if (strcmp(opt->defname, "wal") == 0) es->wal = defGetBoolean(opt); else if (strcmp(opt->defname, "settings") == 0) @@ -253,6 +257,9 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, /* if the summary was not set explicitly, set default value */ es->summary = (summary_set) ? es->summary : es->analyze && !explain_regress; + /* if the buffers option was not set explicitly, set default value */ + es->buffers = (buffers_set) ? es->buffers : !explain_regress; + query = castNode(Query, stmt->query); if (IsQueryIdEnabled()) jstate = JumbleQuery(query, pstate->p_sourcetext); @@ -323,6 +330,7 @@ NewExplainState(void) /* Set default options (most fields can be left as zeroes). */ es->costs = true; + es->buffers = true; /* Prepare output buffer. */ es->str = makeStringInfo(); -- 2.25.1