Commit 48f7e643 authored by Tom Lane's avatar Tom Lane

Simplify and rename some GUC variables, per various recent discussions:

* stats_start_collector goes away; we always start the collector process,
unless prevented by a problem with setting up the stats UDP socket.

* stats_reset_on_server_start goes away; it seems useless in view of the
availability of pg_stat_reset().

* stats_block_level and stats_row_level are merged into a single variable
"track_counts", which controls all reports sent to the collector process.

* stats_command_string is renamed to track_activities.

* log_autovacuum is renamed to log_autovacuum_min_duration to better reflect
its meaning.

The log_autovacuum change is not a compatibility issue since it didn't exist
before 8.3 anyway.  The other changes need to be release-noted.
parent 02138357
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.145 2007/09/22 19:10:44 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.146 2007/09/24 03:12:23 tgl Exp $ -->
<chapter Id="runtime-config"> <chapter Id="runtime-config">
<title>Server Configuration</title> <title>Server Configuration</title>
...@@ -3186,30 +3186,19 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; ...@@ -3186,30 +3186,19 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
<title>Query and Index Statistics Collector</title> <title>Query and Index Statistics Collector</title>
<para> <para>
These parameters control a server-wide statistics collection feature. These parameters control server-wide statistics collection features.
When statistics collection is enabled, the data that is produced can be When statistics collection is enabled, the data that is produced can be
accessed via the <structname>pg_stat</structname> and accessed via the <structname>pg_stat</structname> and
<structname>pg_statio</structname> family of system views. <structname>pg_statio</structname> family of system views.
Refer to <xref linkend="monitoring"> for more information. Refer to <xref linkend="monitoring"> for more information.
</para> </para>
<note>
<para>
As of <productname>PostgreSQL</productname> 8.2,
<varname>stats_command_string</varname> controls a separate data
collection mechanism that can be turned on or off independently
of whether the statistics-collection subprocess is running.
The subprocess is only needed to support collection of
block-level or row-level statistics.
</para>
</note>
<variablelist> <variablelist>
<varlistentry id="guc-stats-command-string" xreflabel="stats_command_string"> <varlistentry id="guc-track-activities" xreflabel="track_activities">
<term><varname>stats_command_string</varname> (<type>boolean</type>)</term> <term><varname>track_activities</varname> (<type>boolean</type>)</term>
<indexterm> <indexterm>
<primary><varname>stats_command_string</> configuration parameter</primary> <primary><varname>track_activities</> configuration parameter</primary>
</indexterm> </indexterm>
<listitem> <listitem>
<para> <para>
...@@ -3225,80 +3214,33 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; ...@@ -3225,80 +3214,33 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry id="guc-update-process-title" xreflabel="update_process_title"> <varlistentry id="guc-track-counts" xreflabel="track_counts">
<term><varname>update_process_title</varname> (<type>boolean</type>)</term> <term><varname>track_counts</varname> (<type>boolean</type>)</term>
<indexterm>
<primary><varname>update_process_title</> configuration parameter</primary>
</indexterm>
<listitem>
<para>
Enables updating of the process title every time a new SQL command
is received by the server. The process title is typically viewed
by the <command>ps</> command or in Windows using the <application>Process
Explorer</>. Only superusers can change this setting.
</para>
</listitem>
</varlistentry>
<varlistentry id="guc-stats-start-collector" xreflabel="stats_start_collector">
<term><varname>stats_start_collector</varname> (<type>boolean</type>)</term>
<indexterm>
<primary><varname>stats_start_collector</> configuration parameter</primary>
</indexterm>
<listitem>
<para>
Controls whether the server should start the
statistics-collection subprocess. This is on by default, but
can be turned off if you know you have no interest in
collecting statistics or running autovacuum.
This parameter can only be set at server start, because the collection
subprocess cannot be started or stopped on-the-fly. (However, the
extent to which statistics are actually gathered can be changed while
the server is running, so long as the subprocess exists.)
</para>
</listitem>
</varlistentry>
<varlistentry id="guc-stats-block-level" xreflabel="stats_block_level">
<term><varname>stats_block_level</varname> (<type>boolean</type>)</term>
<indexterm>
<primary><varname>stats_block_level</> configuration parameter</primary>
</indexterm>
<listitem>
<para>
Enables the collection of block-level statistics on database
activity. This parameter is off by default.
Only superusers can change this setting.
</para>
</listitem>
</varlistentry>
<varlistentry id="guc-stats-row-level" xreflabel="stats_row_level">
<term><varname>stats_row_level</varname> (<type>boolean</type>)</term>
<indexterm> <indexterm>
<primary><varname>stats_row_level</> configuration parameter</primary> <primary><varname>track_counts</> configuration parameter</primary>
</indexterm> </indexterm>
<listitem> <listitem>
<para> <para>
Enables the collection of row-level statistics on database Enables collection of statistics on database activity.
activity. This parameter is on by default, because the autovacuum This parameter is on by default, because the autovacuum
daemon needs the collected information. daemon needs the collected information.
Only superusers can change this setting. Only superusers can change this setting.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry id="guc-stats-reset-on-server-start" xreflabel="stats_reset_on_server_start"> <varlistentry id="guc-update-process-title" xreflabel="update_process_title">
<term><varname>stats_reset_on_server_start</varname> (<type>boolean</type>)</term> <term><varname>update_process_title</varname> (<type>boolean</type>)</term>
<indexterm> <indexterm>
<primary><varname>stats_reset_on_server_start</> configuration parameter</primary> <primary><varname>update_process_title</> configuration parameter</primary>
</indexterm> </indexterm>
<listitem> <listitem>
<para> <para>
If on, collected block-level and row-level statistics are zeroed out Enables updating of the process title every time a new SQL command
whenever the server is restarted. If off, statistics are accumulated is received by the server. The process title is typically viewed
across server restarts. This parameter is off by default. by the <command>ps</> command,
This parameter can only be set at server start. or in Windows by using the <application>Process Explorer</>.
Only superusers can change this setting.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -3369,50 +3311,50 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; ...@@ -3369,50 +3311,50 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
<listitem> <listitem>
<para> <para>
Controls whether the server should run the Controls whether the server should run the
autovacuum launcher daemon. This is on by default. autovacuum launcher daemon. This is on by default; however,
<varname>stats_start_collector</> and <varname>stats_row_level</> <xref linkend="guc-track-counts"> must also be turned on for
must also be turned on for autovacuum to work. autovacuum to work.
This parameter can only be set in the <filename>postgresql.conf</> This parameter can only be set in the <filename>postgresql.conf</>
file or on the server command line. file or on the server command line.
</para> </para>
<para> <para>
Note that even when this parameter is disabled, the system Note that even when this parameter is disabled, the system
will periodically launch autovacuum processes in order to will launch autovacuum processes if necessary to
prevent transaction ID wraparound. See <xref prevent transaction ID wraparound. See <xref
linkend="vacuum-for-wraparound"> for more information. linkend="vacuum-for-wraparound"> for more information.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry id="guc-autovacuum-max-workers" xreflabel="autovacuum_max_workers"> <varlistentry id="guc-log-autovacuum-min-duration" xreflabel="log_autovacuum_min_duration">
<term><varname>autovacuum_max_workers</varname> (<type>integer</type>)</term> <term><varname>log_autovacuum_min_duration</varname> (<type>integer</type>)</term>
<indexterm> <indexterm>
<primary><varname>autovacuum_max_workers</> configuration parameter</primary> <primary><varname>log_autovacuum_min_duration</> configuration parameter</primary>
</indexterm> </indexterm>
<listitem> <listitem>
<para> <para>
Specifies the maximum number of autovacuum processes (other than the Causes each action executed by autovacuum to be logged if it ran for at
autovacuum launcher) which may be running at any one time. The default least the specified number of milliseconds. Setting this to zero logs
is three (<literal>3</literal>). This parameter can only be set in all autovacuum actions. Minus-one (the default) disables logging
autovacuum actions. For example, if you set this to
<literal>250ms</literal> then all automatic vacuums and analyzes that run
250ms or longer will be logged. Enabling this parameter can be helpful
in tracking autovacuum activity. This setting can only be set in
the <filename>postgresql.conf</> file or on the server command line. the <filename>postgresql.conf</> file or on the server command line.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry id="guc-log-autovacuum" xreflabel="log_autovacuum"> <varlistentry id="guc-autovacuum-max-workers" xreflabel="autovacuum_max_workers">
<term><varname>log_autovacuum</varname> (<type>integer</type>)</term> <term><varname>autovacuum_max_workers</varname> (<type>integer</type>)</term>
<indexterm> <indexterm>
<primary><varname>log_autovacuum</> configuration parameter</primary> <primary><varname>autovacuum_max_workers</> configuration parameter</primary>
</indexterm> </indexterm>
<listitem> <listitem>
<para> <para>
Causes each action executed by autovacuum to be logged if it ran for at Specifies the maximum number of autovacuum processes (other than the
least the specified number of milliseconds. Setting this to zero logs autovacuum launcher) which may be running at any one time. The default
all autovacuum actions. Minus-one (the default) disables logging is three. This parameter can only be set in
autovacuum actions. For example, if you set this to
<literal>250ms</literal> then all vacuums and analyzes that run
250ms or longer will be logged. Enabling this parameter can be helpful
in tracking autovacuum activity. This setting can only be set in
the <filename>postgresql.conf</> file or on the server command line. the <filename>postgresql.conf</> file or on the server command line.
</para> </para>
</listitem> </listitem>
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/maintenance.sgml,v 1.81 2007/09/14 13:43:03 momjian Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/maintenance.sgml,v 1.82 2007/09/24 03:12:23 tgl Exp $ -->
<chapter id="maintenance"> <chapter id="maintenance">
<title>Routine Database Maintenance Tasks</title> <title>Routine Database Maintenance Tasks</title>
...@@ -203,7 +203,7 @@ ...@@ -203,7 +203,7 @@
</sect2> </sect2>
<sect2 id="vacuum-for-statistics"> <sect2 id="vacuum-for-statistics">
<title>Updating planner statistics</title> <title>Updating Planner Statistics</title>
<indexterm zone="vacuum-for-statistics"> <indexterm zone="vacuum-for-statistics">
<primary>statistics</primary> <primary>statistics</primary>
...@@ -279,7 +279,7 @@ ...@@ -279,7 +279,7 @@
</sect2> </sect2>
<sect2 id="vacuum-for-wraparound"> <sect2 id="vacuum-for-wraparound">
<title>Preventing transaction ID wraparound failures</title> <title>Preventing Transaction ID Wraparound Failures</title>
<indexterm zone="vacuum-for-wraparound"> <indexterm zone="vacuum-for-wraparound">
<primary>transaction ID</primary> <primary>transaction ID</primary>
...@@ -460,7 +460,7 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb". ...@@ -460,7 +460,7 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb".
</sect2> </sect2>
<sect2 id="autovacuum"> <sect2 id="autovacuum">
<title id="autovacuum-title">The auto-vacuum daemon</title> <title id="autovacuum-title">The Auto-Vacuum Daemon</title>
<indexterm> <indexterm>
<primary>autovacuum</primary> <primary>autovacuum</primary>
...@@ -473,10 +473,9 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb". ...@@ -473,10 +473,9 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb".
<command>VACUUM</command> and <command>ANALYZE </command> commands. <command>VACUUM</command> and <command>ANALYZE </command> commands.
When enabled, autovacuum checks for When enabled, autovacuum checks for
tables that have had a large number of inserted, updated or deleted tables that have had a large number of inserted, updated or deleted
tuples. These checks use the row-level statistics collection facility; tuples. These checks use the statistics collection facility;
therefore, autovacuum cannot be used unless <xref therefore, autovacuum cannot be used unless <xref
linkend="guc-stats-start-collector"> and <xref linkend="guc-track-counts"> is set to <literal>true</literal>.
linkend="guc-stats-row-level"> are set to <literal>true</literal>.
In the default configuration, autovacuuming is enabled and the related In the default configuration, autovacuuming is enabled and the related
configuration parameters are appropriately set. configuration parameters are appropriately set.
</para> </para>
...@@ -497,8 +496,8 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb". ...@@ -497,8 +496,8 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb".
eligible for vacuuming in a short amount of time, all autovacuum workers eligible for vacuuming in a short amount of time, all autovacuum workers
may end up vacuuming those tables for a very long time. This would result may end up vacuuming those tables for a very long time. This would result
in other tables and databases not being vacuumed until a worker became in other tables and databases not being vacuumed until a worker became
available. There is also not a limit on how many workers might be in a available. There is not a limit on how many workers might be in a
single database, but workers do try and avoid repeating work that has single database, but workers do try to avoid repeating work that has
already been done by other workers. Note that the number of running already been done by other workers. Note that the number of running
workers does not count towards the <xref linkend="guc-max-connections"> nor workers does not count towards the <xref linkend="guc-max-connections"> nor
the <xref linkend="guc-superuser-reserved-connections"> limits. the <xref linkend="guc-superuser-reserved-connections"> limits.
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/monitoring.sgml,v 1.52 2007/09/20 17:56:30 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/monitoring.sgml,v 1.53 2007/09/24 03:12:23 tgl Exp $ -->
<chapter id="monitoring"> <chapter id="monitoring">
<title>Monitoring Database Activity</title> <title>Monitoring Database Activity</title>
...@@ -117,14 +117,15 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -117,14 +117,15 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
<productname>PostgreSQL</productname>'s <firstterm>statistics collector</> <productname>PostgreSQL</productname>'s <firstterm>statistics collector</>
is a subsystem that supports collection and reporting of information about is a subsystem that supports collection and reporting of information about
server activity. Presently, the collector can count accesses to tables server activity. Presently, the collector can count accesses to tables
and indexes in both disk-block and individual-row terms. and indexes in both disk-block and individual-row terms. It also tracks
total numbers of rows in each table, and the last vacuum and analyze times
for each table.
</para> </para>
<para> <para>
<productname>PostgreSQL</productname> also supports determining the exact <productname>PostgreSQL</productname> also supports determining the exact
command currently being executed by other server processes. This is an command currently being executed by other server processes. This is an
independent facility that can be enabled or disabled whether or not independent facility that does not depend on the collector process.
block-level and row-level statistics are being collected.
</para> </para>
<sect2 id="monitoring-stats-setup"> <sect2 id="monitoring-stats-setup">
...@@ -139,31 +140,14 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -139,31 +140,14 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
</para> </para>
<para> <para>
The parameter <xref linkend="guc-stats-start-collector"> must be The parameter <xref linkend="guc-track-counts"> controls whether
set to <literal>true</> for the statistics collector to be launched information is actually sent to the collector process and thus determines
at all. This is the default and recommended setting, but it can be whether any run-time overhead occurs for event counting.
turned off if you have no interest in statistics and want to
squeeze out every last drop of overhead. (The savings is likely to
be small, however.) Note that this option cannot be changed while
the server is running.
</para> </para>
<para> <para>
The parameters <xref linkend="guc-stats-block-level"> and <xref The parameter <xref linkend="guc-track-activities"> enables monitoring
linkend="guc-stats-row-level"> control how much information is
actually sent to the collector and thus determine how much run-time
overhead occurs. These respectively determine whether a server
process tracks disk-block-level access
statistics and row-level access statistics and sends these to the collector.
Additionally, per-database transaction commit and abort statistics
are collected if either of these parameters are set.
</para>
<para>
The parameter <xref linkend="guc-stats-command-string"> enables monitoring
of the current command being executed by any server process. of the current command being executed by any server process.
The statistics collector subprocess need not be running to enable this
feature.
</para> </para>
<para> <para>
...@@ -190,13 +174,13 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -190,13 +174,13 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
<para> <para>
When using the statistics to monitor current activity, it is important When using the statistics to monitor current activity, it is important
to realize that the information does not update instantaneously. to realize that the information does not update instantaneously.
Each individual server process transmits new block and row access counts to Each individual server process transmits new statistical counts to
the collector just before going idle; so a query or transaction still in the collector just before going idle; so a query or transaction still in
progress does not affect the displayed totals. Also, the collector itself progress does not affect the displayed totals. Also, the collector itself
emits a new report at most once per <varname>PGSTAT_STAT_INTERVAL</varname> emits a new report at most once per <varname>PGSTAT_STAT_INTERVAL</varname>
milliseconds (500 unless altered while building the server). So the milliseconds (500 unless altered while building the server). So the
displayed information lags behind actual activity. However, current-query displayed information lags behind actual activity. However, current-query
information collected by <varname>stats_command_string</varname> is information collected by <varname>track_activities</varname> is
always up-to-date. always up-to-date.
</para> </para>
...@@ -240,7 +224,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -240,7 +224,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
current query began execution, time at which the process was current query began execution, time at which the process was
started, and client's address and port number. The columns that started, and client's address and port number. The columns that
report data on the current query are available unless the parameter report data on the current query are available unless the parameter
<varname>stats_command_string</varname> has been turned off. <varname>track_activities</varname> has been turned off.
Furthermore, these columns are only visible if the user examining Furthermore, these columns are only visible if the user examining
the view is a superuser or the same as the user owning the process the view is a superuser or the same as the user owning the process
being reported on. being reported on.
...@@ -715,7 +699,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -715,7 +699,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
Active command of the given server process, but only if the Active command of the given server process, but only if the
current user is a superuser or the same user as that of current user is a superuser or the same user as that of
the session being queried (and the session being queried (and
<varname>stats_command_string</varname> is on) <varname>track_activities</varname> is on)
</entry> </entry>
</row> </row>
...@@ -726,7 +710,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -726,7 +710,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
True if the given server process is waiting for a lock, True if the given server process is waiting for a lock,
but only if the current user is a superuser or the same user as that of but only if the current user is a superuser or the same user as that of
the session being queried (and the session being queried (and
<varname>stats_command_string</varname> is on) <varname>track_activities</varname> is on)
</entry> </entry>
</row> </row>
...@@ -738,7 +722,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -738,7 +722,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
executing query was started, but only if the executing query was started, but only if the
current user is a superuser or the same user as that of current user is a superuser or the same user as that of
the session being queried (and the session being queried (and
<varname>stats_command_string</varname> is on) <varname>track_activities</varname> is on)
</entry> </entry>
</row> </row>
...@@ -750,7 +734,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re ...@@ -750,7 +734,7 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
executing transaction was started, but only if the executing transaction was started, but only if the
current user is a superuser or the same user as that of current user is a superuser or the same user as that of
the session being queried (and the session being queried (and
<varname>stats_command_string</varname> is on) <varname>track_activities</varname> is on)
</entry> </entry>
</row> </row>
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.507 2007/09/16 03:03:00 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.508 2007/09/24 03:12:23 tgl Exp $ -->
<!-- <!--
Typical markup: Typical markup:
...@@ -1475,8 +1475,7 @@ do it for earlier branch release files. ...@@ -1475,8 +1475,7 @@ do it for earlier branch release files.
<listitem> <listitem>
<para> <para>
Improve performance of statistics monitoring, especially Improve performance of statistics monitoring, especially
<link <varname>stats_command_string</>
linkend="guc-stats-command-string"><varname>stats_command_string</></link>
(Tom, Bruce) (Tom, Bruce)
</para> </para>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/analyze.c,v 1.108 2007/05/30 20:11:56 tgl Exp $ * $PostgreSQL: pgsql/src/backend/commands/analyze.c,v 1.109 2007/09/24 03:12:23 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -202,10 +202,10 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt, ...@@ -202,10 +202,10 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt,
} }
/* measure elapsed time iff autovacuum logging requires it */ /* measure elapsed time iff autovacuum logging requires it */
if (IsAutoVacuumWorkerProcess() && Log_autovacuum >= 0) if (IsAutoVacuumWorkerProcess() && Log_autovacuum_min_duration >= 0)
{ {
pg_rusage_init(&ru0); pg_rusage_init(&ru0);
if (Log_autovacuum > 0) if (Log_autovacuum_min_duration > 0)
starttime = GetCurrentTimestamp(); starttime = GetCurrentTimestamp();
} }
...@@ -472,11 +472,11 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt, ...@@ -472,11 +472,11 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt,
relation_close(onerel, NoLock); relation_close(onerel, NoLock);
/* Log the action if appropriate */ /* Log the action if appropriate */
if (IsAutoVacuumWorkerProcess() && Log_autovacuum >= 0) if (IsAutoVacuumWorkerProcess() && Log_autovacuum_min_duration >= 0)
{ {
if (Log_autovacuum == 0 || if (Log_autovacuum_min_duration == 0 ||
TimestampDifferenceExceeds(starttime, GetCurrentTimestamp(), TimestampDifferenceExceeds(starttime, GetCurrentTimestamp(),
Log_autovacuum)) Log_autovacuum_min_duration))
ereport(LOG, ereport(LOG,
(errmsg("automatic analyze of table \"%s.%s.%s\" system usage: %s", (errmsg("automatic analyze of table \"%s.%s.%s\" system usage: %s",
get_database_name(MyDatabaseId), get_database_name(MyDatabaseId),
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.98 2007/09/20 21:43:27 tgl Exp $ * $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.99 2007/09/24 03:12:23 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -154,7 +154,7 @@ lazy_vacuum_rel(Relation onerel, VacuumStmt *vacstmt, ...@@ -154,7 +154,7 @@ lazy_vacuum_rel(Relation onerel, VacuumStmt *vacstmt,
pg_rusage_init(&ru0); pg_rusage_init(&ru0);
/* measure elapsed time iff autovacuum logging requires it */ /* measure elapsed time iff autovacuum logging requires it */
if (IsAutoVacuumWorkerProcess() && Log_autovacuum > 0) if (IsAutoVacuumWorkerProcess() && Log_autovacuum_min_duration > 0)
starttime = GetCurrentTimestamp(); starttime = GetCurrentTimestamp();
if (vacstmt->verbose) if (vacstmt->verbose)
...@@ -221,11 +221,11 @@ lazy_vacuum_rel(Relation onerel, VacuumStmt *vacstmt, ...@@ -221,11 +221,11 @@ lazy_vacuum_rel(Relation onerel, VacuumStmt *vacstmt,
vacstmt->analyze, vacrelstats->rel_tuples); vacstmt->analyze, vacrelstats->rel_tuples);
/* and log the action if appropriate */ /* and log the action if appropriate */
if (IsAutoVacuumWorkerProcess() && Log_autovacuum >= 0) if (IsAutoVacuumWorkerProcess() && Log_autovacuum_min_duration >= 0)
{ {
if (Log_autovacuum == 0 || if (Log_autovacuum_min_duration == 0 ||
TimestampDifferenceExceeds(starttime, GetCurrentTimestamp(), TimestampDifferenceExceeds(starttime, GetCurrentTimestamp(),
Log_autovacuum)) Log_autovacuum_min_duration))
ereport(LOG, ereport(LOG,
(errmsg("automatic vacuum of table \"%s.%s.%s\": index scans: %d\n" (errmsg("automatic vacuum of table \"%s.%s.%s\": index scans: %d\n"
"pages: %d removed, %d remain\n" "pages: %d removed, %d remain\n"
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.59 2007/09/23 20:07:33 tgl Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.60 2007/09/24 03:12:23 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -114,7 +114,7 @@ int autovacuum_freeze_max_age; ...@@ -114,7 +114,7 @@ int autovacuum_freeze_max_age;
int autovacuum_vac_cost_delay; int autovacuum_vac_cost_delay;
int autovacuum_vac_cost_limit; int autovacuum_vac_cost_limit;
int Log_autovacuum = -1; int Log_autovacuum_min_duration = -1;
/* Flags to tell if we are in an autovacuum process */ /* Flags to tell if we are in an autovacuum process */
...@@ -511,7 +511,7 @@ AutoVacLauncherMain(int argc, char *argv[]) ...@@ -511,7 +511,7 @@ AutoVacLauncherMain(int argc, char *argv[])
PG_SETMASK(&UnBlockSig); PG_SETMASK(&UnBlockSig);
/* in emergency mode, just start a worker and go away */ /* in emergency mode, just start a worker and go away */
if (!autovacuum_start_daemon) if (!AutoVacuumingActive())
{ {
do_start_worker(); do_start_worker();
proc_exit(0); /* done */ proc_exit(0); /* done */
...@@ -590,7 +590,7 @@ AutoVacLauncherMain(int argc, char *argv[]) ...@@ -590,7 +590,7 @@ AutoVacLauncherMain(int argc, char *argv[])
ProcessConfigFile(PGC_SIGHUP); ProcessConfigFile(PGC_SIGHUP);
/* shutdown requested in config file */ /* shutdown requested in config file */
if (!autovacuum_start_daemon) if (!AutoVacuumingActive())
break; break;
/* rebalance in case the default cost parameters changed */ /* rebalance in case the default cost parameters changed */
...@@ -2625,8 +2625,7 @@ autovac_report_activity(VacuumStmt *vacstmt, Oid relid) ...@@ -2625,8 +2625,7 @@ autovac_report_activity(VacuumStmt *vacstmt, Oid relid)
bool bool
AutoVacuumingActive(void) AutoVacuumingActive(void)
{ {
if (!autovacuum_start_daemon || !pgstat_collect_startcollector || if (!autovacuum_start_daemon || !pgstat_track_counts)
!pgstat_collect_tuplelevel)
return false; return false;
return true; return true;
} }
...@@ -2635,26 +2634,15 @@ AutoVacuumingActive(void) ...@@ -2635,26 +2634,15 @@ AutoVacuumingActive(void)
* autovac_init * autovac_init
* This is called at postmaster initialization. * This is called at postmaster initialization.
* *
* Annoy the user if he got it wrong. * All we do here is annoy the user if he got it wrong.
*/ */
void void
autovac_init(void) autovac_init(void)
{ {
if (!autovacuum_start_daemon) if (autovacuum_start_daemon && !pgstat_track_counts)
return;
if (!pgstat_collect_startcollector || !pgstat_collect_tuplelevel)
{
ereport(WARNING, ereport(WARNING,
(errmsg("autovacuum not started because of misconfiguration"), (errmsg("autovacuum not started because of misconfiguration"),
errhint("Enable options \"stats_start_collector\" and \"stats_row_level\"."))); errhint("Enable the \"track_counts\" option.")));
/*
* Set the GUC var so we don't fork autovacuum uselessly, and also to
* help debugging.
*/
autovacuum_start_daemon = false;
}
} }
/* /*
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
* *
* Copyright (c) 2001-2007, PostgreSQL Global Development Group * Copyright (c) 2001-2007, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.164 2007/09/20 17:56:31 tgl Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.165 2007/09/24 03:12:23 tgl Exp $
* ---------- * ----------
*/ */
#include "postgres.h" #include "postgres.h"
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
#include "storage/ipc.h" #include "storage/ipc.h"
#include "storage/pg_shmem.h" #include "storage/pg_shmem.h"
#include "storage/pmsignal.h" #include "storage/pmsignal.h"
#include "utils/guc.h"
#include "utils/memutils.h" #include "utils/memutils.h"
#include "utils/ps_status.h" #include "utils/ps_status.h"
...@@ -93,11 +94,8 @@ ...@@ -93,11 +94,8 @@
* GUC parameters * GUC parameters
* ---------- * ----------
*/ */
bool pgstat_collect_startcollector = true; bool pgstat_track_activities = false;
bool pgstat_collect_resetonpmstart = false; bool pgstat_track_counts = false;
bool pgstat_collect_tuplelevel = false;
bool pgstat_collect_blocklevel = false;
bool pgstat_collect_querystring = false;
/* /*
* BgWriter global statistics counters (unused in other processes). * BgWriter global statistics counters (unused in other processes).
...@@ -256,28 +254,6 @@ pgstat_init(void) ...@@ -256,28 +254,6 @@ pgstat_init(void)
#define TESTBYTEVAL ((char) 199) #define TESTBYTEVAL ((char) 199)
/*
* Force start of collector daemon if something to collect. Note that
* pgstat_collect_querystring is now an independent facility that does not
* require the collector daemon.
*/
if (pgstat_collect_tuplelevel ||
pgstat_collect_blocklevel)
pgstat_collect_startcollector = true;
/*
* If we don't have to start a collector or should reset the collected
* statistics on postmaster start, simply remove the stats file.
*/
if (!pgstat_collect_startcollector || pgstat_collect_resetonpmstart)
pgstat_reset_all();
/*
* Nothing else required if collector will not get started
*/
if (!pgstat_collect_startcollector)
return;
/* /*
* Create the UDP socket for sending and receiving statistic messages * Create the UDP socket for sending and receiving statistic messages
*/ */
...@@ -492,17 +468,19 @@ startup_failed: ...@@ -492,17 +468,19 @@ startup_failed:
closesocket(pgStatSock); closesocket(pgStatSock);
pgStatSock = -1; pgStatSock = -1;
/* Adjust GUC variables to suppress useless activity */ /*
pgstat_collect_startcollector = false; * Adjust GUC variables to suppress useless activity, and for debugging
pgstat_collect_tuplelevel = false; * purposes (seeing track_counts off is a clue that we failed here).
pgstat_collect_blocklevel = false; * We use PGC_S_OVERRIDE because there is no point in trying to turn it
* back on from postgresql.conf without a restart.
*/
SetConfigOption("track_counts", "off", PGC_INTERNAL, PGC_S_OVERRIDE);
} }
/* /*
* pgstat_reset_all() - * pgstat_reset_all() -
* *
* Remove the stats file. This is used on server start if the * Remove the stats file. This is currently used only if WAL
* stats_reset_on_server_start feature is enabled, or if WAL
* recovery is needed after a crash. * recovery is needed after a crash.
*/ */
void void
...@@ -536,7 +514,7 @@ pgstat_forkexec(void) ...@@ -536,7 +514,7 @@ pgstat_forkexec(void)
#endif /* EXEC_BACKEND */ #endif /* EXEC_BACKEND */
/* ---------- /*
* pgstat_start() - * pgstat_start() -
* *
* Called from postmaster at startup or after an existing collector * Called from postmaster at startup or after an existing collector
...@@ -545,7 +523,6 @@ pgstat_forkexec(void) ...@@ -545,7 +523,6 @@ pgstat_forkexec(void)
* Returns PID of child process, or 0 if fail. * Returns PID of child process, or 0 if fail.
* *
* Note: if fail, we will be called again from the postmaster main loop. * Note: if fail, we will be called again from the postmaster main loop.
* ----------
*/ */
int int
pgstat_start(void) pgstat_start(void)
...@@ -554,9 +531,10 @@ pgstat_start(void) ...@@ -554,9 +531,10 @@ pgstat_start(void)
pid_t pgStatPid; pid_t pgStatPid;
/* /*
* Do nothing if no collector needed * Check that the socket is there, else pgstat_init failed and we can
* do nothing useful.
*/ */
if (!pgstat_collect_startcollector) if (pgStatSock < 0)
return 0; return 0;
/* /*
...@@ -571,22 +549,6 @@ pgstat_start(void) ...@@ -571,22 +549,6 @@ pgstat_start(void)
return 0; return 0;
last_pgstat_start_time = curtime; last_pgstat_start_time = curtime;
/*
* Check that the socket is there, else pgstat_init failed.
*/
if (pgStatSock < 0)
{
ereport(LOG,
(errmsg("statistics collector startup skipped")));
/*
* We can only get here if someone tries to manually turn
* pgstat_collect_startcollector on after it had been off.
*/
pgstat_collect_startcollector = false;
return 0;
}
/* /*
* Okay, fork off the collector. * Okay, fork off the collector.
*/ */
...@@ -1052,8 +1014,7 @@ pgstat_report_vacuum(Oid tableoid, bool shared, ...@@ -1052,8 +1014,7 @@ pgstat_report_vacuum(Oid tableoid, bool shared,
{ {
PgStat_MsgVacuum msg; PgStat_MsgVacuum msg;
if (pgStatSock < 0 || if (pgStatSock < 0 || !pgstat_track_counts)
!pgstat_collect_tuplelevel)
return; return;
pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_VACUUM); pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_VACUUM);
...@@ -1078,8 +1039,7 @@ pgstat_report_analyze(Oid tableoid, bool shared, PgStat_Counter livetuples, ...@@ -1078,8 +1039,7 @@ pgstat_report_analyze(Oid tableoid, bool shared, PgStat_Counter livetuples,
{ {
PgStat_MsgAnalyze msg; PgStat_MsgAnalyze msg;
if (pgStatSock < 0 || if (pgStatSock < 0 || !pgstat_track_counts)
!pgstat_collect_tuplelevel)
return; return;
pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANALYZE); pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANALYZE);
...@@ -1139,9 +1099,7 @@ pgstat_initstats(Relation rel) ...@@ -1139,9 +1099,7 @@ pgstat_initstats(Relation rel)
return; return;
} }
if (pgStatSock < 0 || if (pgStatSock < 0 || !pgstat_track_counts)
!(pgstat_collect_tuplelevel ||
pgstat_collect_blocklevel))
{ {
/* We're not counting at all */ /* We're not counting at all */
rel->pgstat_info = NULL; rel->pgstat_info = NULL;
...@@ -1274,7 +1232,7 @@ pgstat_count_heap_insert(Relation rel) ...@@ -1274,7 +1232,7 @@ pgstat_count_heap_insert(Relation rel)
{ {
PgStat_TableStatus *pgstat_info = rel->pgstat_info; PgStat_TableStatus *pgstat_info = rel->pgstat_info;
if (pgstat_collect_tuplelevel && pgstat_info != NULL) if (pgstat_track_counts && pgstat_info != NULL)
{ {
int nest_level = GetCurrentTransactionNestLevel(); int nest_level = GetCurrentTransactionNestLevel();
...@@ -1298,7 +1256,7 @@ pgstat_count_heap_update(Relation rel, bool hot) ...@@ -1298,7 +1256,7 @@ pgstat_count_heap_update(Relation rel, bool hot)
{ {
PgStat_TableStatus *pgstat_info = rel->pgstat_info; PgStat_TableStatus *pgstat_info = rel->pgstat_info;
if (pgstat_collect_tuplelevel && pgstat_info != NULL) if (pgstat_track_counts && pgstat_info != NULL)
{ {
int nest_level = GetCurrentTransactionNestLevel(); int nest_level = GetCurrentTransactionNestLevel();
...@@ -1327,7 +1285,7 @@ pgstat_count_heap_delete(Relation rel) ...@@ -1327,7 +1285,7 @@ pgstat_count_heap_delete(Relation rel)
{ {
PgStat_TableStatus *pgstat_info = rel->pgstat_info; PgStat_TableStatus *pgstat_info = rel->pgstat_info;
if (pgstat_collect_tuplelevel && pgstat_info != NULL) if (pgstat_track_counts && pgstat_info != NULL)
{ {
int nest_level = GetCurrentTransactionNestLevel(); int nest_level = GetCurrentTransactionNestLevel();
...@@ -1356,7 +1314,7 @@ pgstat_update_heap_dead_tuples(Relation rel, int delta) ...@@ -1356,7 +1314,7 @@ pgstat_update_heap_dead_tuples(Relation rel, int delta)
{ {
PgStat_TableStatus *pgstat_info = rel->pgstat_info; PgStat_TableStatus *pgstat_info = rel->pgstat_info;
if (pgstat_collect_tuplelevel && pgstat_info != NULL) if (pgstat_track_counts && pgstat_info != NULL)
pgstat_info->t_counts.t_new_dead_tuples -= delta; pgstat_info->t_counts.t_new_dead_tuples -= delta;
} }
...@@ -1931,7 +1889,7 @@ pgstat_report_activity(const char *cmd_str) ...@@ -1931,7 +1889,7 @@ pgstat_report_activity(const char *cmd_str)
TimestampTz start_timestamp; TimestampTz start_timestamp;
int len; int len;
if (!pgstat_collect_querystring || !beentry) if (!pgstat_track_activities || !beentry)
return; return;
/* /*
...@@ -1967,7 +1925,7 @@ pgstat_report_xact_timestamp(TimestampTz tstamp) ...@@ -1967,7 +1925,7 @@ pgstat_report_xact_timestamp(TimestampTz tstamp)
{ {
volatile PgBackendStatus *beentry = MyBEEntry; volatile PgBackendStatus *beentry = MyBEEntry;
if (!pgstat_collect_querystring || !beentry) if (!pgstat_track_activities || !beentry)
return; return;
/* /*
...@@ -1995,7 +1953,7 @@ pgstat_report_waiting(bool waiting) ...@@ -1995,7 +1953,7 @@ pgstat_report_waiting(bool waiting)
{ {
volatile PgBackendStatus *beentry = MyBEEntry; volatile PgBackendStatus *beentry = MyBEEntry;
if (!pgstat_collect_querystring || !beentry) if (!pgstat_track_activities || !beentry)
return; return;
/* /*
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>. * Written by Peter Eisentraut <peter_e@gmx.net>.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.420 2007/09/11 00:06:42 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.421 2007/09/24 03:12:23 tgl Exp $
* *
*-------------------------------------------------------------------- *--------------------------------------------------------------------
*/ */
...@@ -736,47 +736,23 @@ static struct config_bool ConfigureNamesBool[] = ...@@ -736,47 +736,23 @@ static struct config_bool ConfigureNamesBool[] =
&Explain_pretty_print, &Explain_pretty_print,
true, NULL, NULL true, NULL, NULL
}, },
{ {
{"stats_start_collector", PGC_POSTMASTER, STATS_COLLECTOR, {"track_activities", PGC_SUSET, STATS_COLLECTOR,
gettext_noop("Starts the server statistics-collection subprocess."), gettext_noop("Collects information about executing commands."),
NULL gettext_noop("Enables the collection of information on the currently "
}, "executing command of each session, along with "
&pgstat_collect_startcollector, "the time at which that command began execution.")
true, NULL, NULL
},
{
{"stats_reset_on_server_start", PGC_POSTMASTER, STATS_COLLECTOR,
gettext_noop("Zeroes collected statistics on server restart."),
NULL
},
&pgstat_collect_resetonpmstart,
false, NULL, NULL
},
{
{"stats_row_level", PGC_SUSET, STATS_COLLECTOR,
gettext_noop("Collects row-level statistics on database activity."),
NULL
}, },
&pgstat_collect_tuplelevel, &pgstat_track_activities,
true, NULL, NULL true, NULL, NULL
}, },
{ {
{"stats_block_level", PGC_SUSET, STATS_COLLECTOR, {"track_counts", PGC_SUSET, STATS_COLLECTOR,
gettext_noop("Collects block-level statistics on database activity."), gettext_noop("Collects statistics on database activity."),
NULL NULL
}, },
&pgstat_collect_blocklevel, &pgstat_track_counts,
false, NULL, NULL
},
{
{"stats_command_string", PGC_SUSET, STATS_COLLECTOR,
gettext_noop("Collects information about executing commands."),
gettext_noop("Enables the collection of information on the currently "
"executing command of each session, along with the time "
"at which that command began execution.")
},
&pgstat_collect_querystring,
true, NULL, NULL true, NULL, NULL
}, },
...@@ -1562,9 +1538,9 @@ static struct config_int ConfigureNamesInt[] = ...@@ -1562,9 +1538,9 @@ static struct config_int ConfigureNamesInt[] =
{ {
{"log_min_duration_statement", PGC_SUSET, LOGGING_WHEN, {"log_min_duration_statement", PGC_SUSET, LOGGING_WHEN,
gettext_noop("Sets the minimum execution time above which statements will " gettext_noop("Sets the minimum execution time above which "
"be logged."), "statements will be logged."),
gettext_noop("Zero prints all queries. The default is -1 (turning this feature off)."), gettext_noop("Zero prints all queries. -1 turns this feature off."),
GUC_UNIT_MS GUC_UNIT_MS
}, },
&log_min_duration_statement, &log_min_duration_statement,
...@@ -1572,13 +1548,13 @@ static struct config_int ConfigureNamesInt[] = ...@@ -1572,13 +1548,13 @@ static struct config_int ConfigureNamesInt[] =
}, },
{ {
{"log_autovacuum", PGC_SIGHUP, LOGGING_WHAT, {"log_autovacuum_min_duration", PGC_SIGHUP, LOGGING_WHAT,
gettext_noop("Sets the minimum execution time above which autovacuum actions " gettext_noop("Sets the minimum execution time above which "
"will be logged."), "autovacuum actions will be logged."),
gettext_noop("Zero prints all actions. The default is -1 (disabling autovacuum logging)."), gettext_noop("Zero prints all actions. -1 turns autovacuum logging off."),
GUC_UNIT_MS GUC_UNIT_MS
}, },
&Log_autovacuum, &Log_autovacuum_min_duration,
-1, -1, INT_MAX / 1000, NULL, NULL -1, -1, INT_MAX / 1000, NULL, NULL
}, },
......
...@@ -358,15 +358,10 @@ ...@@ -358,15 +358,10 @@
# - Query/Index Statistics Collector - # - Query/Index Statistics Collector -
#stats_command_string = on #track_activities = on
#track_counts = on
#update_process_title = on #update_process_title = on
#stats_start_collector = on # needed for block or row stats
# (change requires restart)
#stats_block_level = off
#stats_row_level = on
#stats_reset_on_server_start = off # (change requires restart)
# - Statistics Monitoring - # - Statistics Monitoring -
...@@ -381,13 +376,13 @@ ...@@ -381,13 +376,13 @@
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
#autovacuum = on # enable autovacuum subprocess? #autovacuum = on # enable autovacuum subprocess?
# 'on' requires stats_start_collector # 'on' requires track_counts
# and stats_row_level to also be on # to also be on
#autovacuum_max_workers = 3 # max # of autovacuum subprocesses #log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions
#autovacuum_naptime = 1min # time between autovacuum runs
#log_autovacuum = -1 # -1 is disabled, 0 logs all actions
# and their durations, > 0 logs only # and their durations, > 0 logs only
# actions running at least N msec. # actions running at least N msec.
#autovacuum_max_workers = 3 # max # of autovacuum subprocesses
#autovacuum_naptime = 1min # time between autovacuum runs
#autovacuum_vacuum_threshold = 50 # min # of tuple updates before #autovacuum_vacuum_threshold = 50 # min # of tuple updates before
# vacuum # vacuum
#autovacuum_analyze_threshold = 50 # min # of tuple updates before #autovacuum_analyze_threshold = 50 # min # of tuple updates before
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Copyright (c) 2001-2007, PostgreSQL Global Development Group * Copyright (c) 2001-2007, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/include/pgstat.h,v 1.66 2007/09/20 17:56:32 tgl Exp $ * $PostgreSQL: pgsql/src/include/pgstat.h,v 1.67 2007/09/24 03:12:23 tgl Exp $
* ---------- * ----------
*/ */
#ifndef PGSTAT_H #ifndef PGSTAT_H
...@@ -452,11 +452,8 @@ typedef struct PgBackendStatus ...@@ -452,11 +452,8 @@ typedef struct PgBackendStatus
* GUC parameters * GUC parameters
* ---------- * ----------
*/ */
extern bool pgstat_collect_startcollector; extern bool pgstat_track_activities;
extern bool pgstat_collect_resetonpmstart; extern bool pgstat_track_counts;
extern bool pgstat_collect_tuplelevel;
extern bool pgstat_collect_blocklevel;
extern bool pgstat_collect_querystring;
/* /*
* BgWriter statistics counters are updated directly by bgwriter and bufmgr * BgWriter statistics counters are updated directly by bgwriter and bufmgr
...@@ -510,40 +507,40 @@ extern void pgstat_initstats(Relation rel); ...@@ -510,40 +507,40 @@ extern void pgstat_initstats(Relation rel);
/* nontransactional event counts are simple enough to inline */ /* nontransactional event counts are simple enough to inline */
#define pgstat_count_heap_scan(rel) \ #define pgstat_count_heap_scan(rel) \
do { \ do { \
if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL) \ if (pgstat_track_counts && (rel)->pgstat_info != NULL) \
(rel)->pgstat_info->t_counts.t_numscans++; \ (rel)->pgstat_info->t_counts.t_numscans++; \
} while (0) } while (0)
#define pgstat_count_heap_getnext(rel) \ #define pgstat_count_heap_getnext(rel) \
do { \ do { \
if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL) \ if (pgstat_track_counts && (rel)->pgstat_info != NULL) \
(rel)->pgstat_info->t_counts.t_tuples_returned++; \ (rel)->pgstat_info->t_counts.t_tuples_returned++; \
} while (0) } while (0)
#define pgstat_count_heap_fetch(rel) \ #define pgstat_count_heap_fetch(rel) \
do { \ do { \
if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL) \ if (pgstat_track_counts && (rel)->pgstat_info != NULL) \
(rel)->pgstat_info->t_counts.t_tuples_fetched++; \ (rel)->pgstat_info->t_counts.t_tuples_fetched++; \
} while (0) } while (0)
#define pgstat_count_index_scan(rel) \ #define pgstat_count_index_scan(rel) \
do { \ do { \
if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL) \ if (pgstat_track_counts && (rel)->pgstat_info != NULL) \
(rel)->pgstat_info->t_counts.t_numscans++; \ (rel)->pgstat_info->t_counts.t_numscans++; \
} while (0) } while (0)
#define pgstat_count_index_tuples(rel, n) \ #define pgstat_count_index_tuples(rel, n) \
do { \ do { \
if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL) \ if (pgstat_track_counts && (rel)->pgstat_info != NULL) \
(rel)->pgstat_info->t_counts.t_tuples_returned += (n); \ (rel)->pgstat_info->t_counts.t_tuples_returned += (n); \
} while (0) } while (0)
#define pgstat_count_buffer_read(rel) \ #define pgstat_count_buffer_read(rel) \
do { \ do { \
if (pgstat_collect_blocklevel && (rel)->pgstat_info != NULL) \ if (pgstat_track_counts && (rel)->pgstat_info != NULL) \
(rel)->pgstat_info->t_counts.t_blocks_fetched++; \ (rel)->pgstat_info->t_counts.t_blocks_fetched++; \
} while (0) } while (0)
#define pgstat_count_buffer_hit(rel) \ #define pgstat_count_buffer_hit(rel) \
do { \ do { \
if (pgstat_collect_blocklevel && (rel)->pgstat_info != NULL) \ if (pgstat_track_counts && (rel)->pgstat_info != NULL) \
(rel)->pgstat_info->t_counts.t_blocks_hit++; \ (rel)->pgstat_info->t_counts.t_blocks_hit++; \
} while (0) } while (0)
extern void pgstat_count_heap_insert(Relation rel); extern void pgstat_count_heap_insert(Relation rel);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/postmaster/autovacuum.h,v 1.11 2007/06/25 16:09:03 alvherre Exp $ * $PostgreSQL: pgsql/src/include/postmaster/autovacuum.h,v 1.12 2007/09/24 03:12:23 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -31,7 +31,7 @@ extern int autovacuum_vac_cost_limit; ...@@ -31,7 +31,7 @@ extern int autovacuum_vac_cost_limit;
/* autovacuum launcher PID, only valid when worker is shutting down */ /* autovacuum launcher PID, only valid when worker is shutting down */
extern int AutovacuumLauncherPid; extern int AutovacuumLauncherPid;
extern int Log_autovacuum; extern int Log_autovacuum_min_duration;
/* Status inquiry functions */ /* Status inquiry functions */
extern bool AutoVacuumingActive(void); extern bool AutoVacuumingActive(void);
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
-- populated (by create_misc) and indexed (by create_index). -- populated (by create_misc) and indexed (by create_index).
-- --
-- conditio sine qua non -- conditio sine qua non
SHOW stats_start_collector; -- must be on SHOW track_counts; -- must be on
stats_start_collector track_counts
----------------------- --------------
on on
(1 row) (1 row)
...@@ -56,9 +56,6 @@ begin ...@@ -56,9 +56,6 @@ begin
extract(epoch from clock_timestamp() - start_time); extract(epoch from clock_timestamp() - start_time);
end end
$$ language plpgsql; $$ language plpgsql;
-- enable statistics
SET stats_block_level = on;
SET stats_row_level = on;
-- do a seqscan -- do a seqscan
SELECT count(*) FROM tenk2; SELECT count(*) FROM tenk2;
count count
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- --
-- conditio sine qua non -- conditio sine qua non
SHOW stats_start_collector; -- must be on SHOW track_counts; -- must be on
-- wait to let any prior tests finish dumping out stats; -- wait to let any prior tests finish dumping out stats;
-- else our messages might get lost due to contention -- else our messages might get lost due to contention
...@@ -51,10 +51,6 @@ begin ...@@ -51,10 +51,6 @@ begin
end end
$$ language plpgsql; $$ language plpgsql;
-- enable statistics
SET stats_block_level = on;
SET stats_row_level = on;
-- do a seqscan -- do a seqscan
SELECT count(*) FROM tenk2; SELECT count(*) FROM tenk2;
-- do an indexscan -- do an indexscan
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment