@ -81,6 +81,8 @@ LOAD 'auto_explain';
When this parameter is on, per-plan-node timing occurs for all
statements executed, whether or not they run long enough to actually
get logged. This can have an extremely negative impact on performance.
Turning off <varname>auto_explain.log_timing</varname> ameliorates the
performance cost, at the price of obtaining less information.
</para>
</note>
</listitem>
@ -88,16 +90,19 @@ LOAD 'auto_explain';
<varlistentry>
<term>
<varname>auto_explain.log_verbose </varname> (<type>boolean</type>)
<varname>auto_explain.log_buffers </varname> (<type>boolean</type>)
<indexterm>
<primary><varname>auto_explain.log_verbose </> configuration parameter</primary>
<primary><varname>auto_explain.log_buffers </> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
<varname>auto_explain.log_verbose</varname> causes <command>EXPLAIN VERBOSE</>
output, rather than just <command>EXPLAIN</> output, to be printed
when an execution plan is logged. This parameter is off by default.
<varname>auto_explain.log_buffers</varname> controls whether buffer
usage statistics are printed when an execution plan is logged; it's
equivalent to the <literal>BUFFERS</> option of <command>EXPLAIN</>.
This parameter has no effect
unless <varname>auto_explain.log_analyze</varname> is enabled.
This parameter is off by default.
Only superusers can change this setting.
</para>
</listitem>
@ -105,19 +110,24 @@ LOAD 'auto_explain';
<varlistentry>
<term>
<varname>auto_explain.log_buffers </varname> (<type>boolean</type>)
<varname>auto_explain.log_timing </varname> (<type>boolean</type>)
<indexterm>
<primary><varname>auto_explain.log_buffers </> configuration parameter</primary>
<primary><varname>auto_explain.log_timing </> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
<varname>auto_explain.log_buffers</varname> causes <command>EXPLAIN
(ANALYZE, BUFFERS)</> output, rather than just <command>EXPLAIN</>
output, to be printed when an execution plan is logged. This parameter is
off by default. Only superusers can change this setting. This
parameter has no effect unless <varname>auto_explain.log_analyze</>
parameter is set.
<varname>auto_explain.log_timing</varname> controls whether per-node
timing information is printed when an execution plan is logged; it's
equivalent to the <literal>TIMING</> option of <command>EXPLAIN</>.
The overhead of repeatedly reading the system clock can slow down
queries significantly on some systems, so it may be useful to set this
parameter to off when only actual row counts, and not exact times, are
needed.
This parameter has no effect
unless <varname>auto_explain.log_analyze</varname> is enabled.
This parameter is on by default.
Only superusers can change this setting.
</para>
</listitem>
</varlistentry>
@ -133,26 +143,27 @@ LOAD 'auto_explain';
<para>
<varname>auto_explain.log_triggers</varname> causes trigger
execution statistics to be included when an execution plan is logged.
This parameter is off by default. Only superusers can change this
setting. This parameter has no effect unless
<varname>auto_explain.log_analyze</> parameter is set.
This parameter has no effect
unless <varname>auto_explain.log_analyze</varname> is enabled.
This parameter is off by default.
Only superusers can change this setting.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>auto_explain.log_format</varname> (<type>enum </type>)
<varname>auto_explain.log_verbose</varname> (<type>boolean </type>)
<indexterm>
<primary><varname>auto_explain.log_format </> configuration parameter</primary>
<primary><varname>auto_explain.log_verbose </> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
<varname>auto_explain.log_format</varname> selects th e
<command>EXPLAIN</> output format to be used.
The allowed values are <literal>text</literal>, <literal>xml</literal>,
<literal>json</literal>, and <literal>yaml</literal>. The default is tex t.
<varname>auto_explain.log_verbose</varname> controls whether verbos e
details are printed when an execution plan is logged; it's
equivalent to the <literal>VERBOSE</> option of <command>EXPLAIN</>.
This parameter is off by defaul t.
Only superusers can change this setting.
</para>
</listitem>
@ -160,25 +171,22 @@ LOAD 'auto_explain';
<varlistentry>
<term>
<varname>auto_explain.log_timing</varname> (<type>boolean </type>)
<varname>auto_explain.log_format</varname> (<type>enum </type>)
<indexterm>
<primary><varname>auto_explain.log_timing </> configuration parameter</primary>
<primary><varname>auto_explain.log_format </> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
<varname>auto_explain.log_timing</varname> causes <command>EXPLAIN
(ANALYZE, TIMING off)</> output, rather than just <command>EXPLAIN (ANALYZE)</>
output. The overhead of repeatedly reading the system clock can slow down the
query significantly on some systems, so it may be useful to set this
parameter to off when only actual row counts, and not exact times, are needed.
This parameter is only effective when <varname>auto_explain.log_analyze</varname>
is also enabled. This parameter is on by default.
<varname>auto_explain.log_format</varname> selects the
<command>EXPLAIN</> output format to be used.
The allowed values are <literal>text</literal>, <literal>xml</literal>,
<literal>json</literal>, and <literal>yaml</literal>. The default is text.
Only superusers can change this setting.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<varname>auto_explain.log_nested_statements</varname> (<type>boolean</type>)
@ -198,7 +206,9 @@ LOAD 'auto_explain';
</variablelist>
<para>
These parameters must be set in <filename>postgresql.conf</>.
In ordinary usage, these parameters are set
in <filename>postgresql.conf</>, although superusers can alter them
on-the-fly within their own sessions.
Typical usage might be:
</para>
@ -216,6 +226,7 @@ auto_explain.log_min_duration = '3s'
<programlisting>
postgres=# LOAD 'auto_explain';
postgres=# SET auto_explain.log_min_duration = 0;
postgres=# SET auto_explain.log_analyze = true;
postgres=# SELECT count(*)
FROM pg_class, pg_index
WHERE oid = indrelid AND indisunique;