Following discussion on -hackers, the attached patch implements 

- remove stats_row_level and stats_block_level stats, replaced with
single stats_collection = on | off parameter, default on

- remove stats_collector_start and make it always start

Includes doc and test changes.



Performance test results please; if they're neutral we should be good to
apply this.



-- 
  Simon Riggs
  EnterpriseDB  http://www.enterprisedb.com
Index: doc/src/sgml/config.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/config.sgml,v
retrieving revision 1.133
diff -c -r1.133 config.sgml
*** doc/src/sgml/config.sgml	24 Jul 2007 04:54:08 -0000	1.133
--- doc/src/sgml/config.sgml	27 Jul 2007 13:47:25 -0000
***************
*** 3021,3028 ****
        <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>
  
--- 3021,3028 ----
        <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 supports collection of
!       block-level and row-level statistics.
       </para>
       </note>
  
***************
*** 3062,3111 ****
        </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>
!        <primary><varname>stats_row_level</> configuration parameter</primary>
!       </indexterm>
!       <listitem>
!        <para>
!         Enables the collection of row-level statistics on database
          activity. This parameter is on by default, because the autovacuum
!         daemon needs the collected information.
!         Only superusers can change this setting.
         </para>
        </listitem>
       </varlistentry>
--- 3062,3079 ----
        </listitem>
       </varlistentry>
  
!      <varlistentry id="guc-stats-collection" xreflabel="stats_collection">
!       <term><varname>stats_collection</varname> (<type>boolean</type>)</term>
        <indexterm>
!        <primary><varname>stats_collection</> configuration parameter</primary>
        </indexterm>
        <listitem>
         <para>
!         Enables the collection of row-level and block-level statistics on database
          activity. This parameter is on by default, because the autovacuum
!         daemon needs the collected information. The statistics-collection process
! 		is always active, allowing you to turn this setting on or off when
! 		required.  Only superusers can change this setting.
         </para>
        </listitem>
       </varlistentry>
Index: doc/src/sgml/maintenance.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/maintenance.sgml,v
retrieving revision 1.77
diff -c -r1.77 maintenance.sgml
*** doc/src/sgml/maintenance.sgml	23 Jul 2007 17:22:00 -0000	1.77
--- doc/src/sgml/maintenance.sgml	27 Jul 2007 13:47:26 -0000
***************
*** 479,486 ****
      tables that have had a large number of inserted, updated or deleted
      tuples.  These checks use the row-level statistics collection facility;
      therefore, autovacuum cannot be used unless <xref
!     linkend="guc-stats-start-collector"> and <xref
!     linkend="guc-stats-row-level"> are set to <literal>true</literal>.
      In the default configuration, autovacuuming is enabled and the related
      configuration parameters are appropriately set.
     </para>
--- 479,485 ----
      tables that have had a large number of inserted, updated or deleted
      tuples.  These checks use the row-level statistics collection facility;
      therefore, autovacuum cannot be used unless <xref
!     linkend="guc-stats-collection"> is set to <literal>true</literal>.
      In the default configuration, autovacuuming is enabled and the related
      configuration parameters are appropriately set.
     </para>
Index: doc/src/sgml/monitoring.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/monitoring.sgml,v
retrieving revision 1.51
diff -c -r1.51 monitoring.sgml
*** doc/src/sgml/monitoring.sgml	28 Jun 2007 00:02:37 -0000	1.51
--- doc/src/sgml/monitoring.sgml	27 Jul 2007 13:47:26 -0000
***************
*** 139,162 ****
    </para>
  
    <para>
!    The parameter <xref linkend="guc-stats-start-collector"> must be
!    set to <literal>true</> for the statistics collector to be launched
!    at all.  This is the default and recommended setting, but it can be
!    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>
!    The parameters <xref linkend="guc-stats-block-level"> and <xref
!    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>
--- 139,155 ----
    </para>
  
    <para>
!    The statistics collector process will always be launched at startup.
!    The <xref linkend="guc-stats-collection"> parameter controls whether
!    information is actually sent to the collector to allow inspection of 
!    disk-block access statistics and row-level access statistics.  
     Additionally, per-database transaction commit and abort statistics
!    are collected if this parameter is set.  The default and recommended 
!    setting for <varname>stats_collection</varname> is on, but it can be 
!    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 can be changed while the server is 
!    running.
    </para>
  
    <para>
Index: src/backend/postmaster/autovacuum.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/postmaster/autovacuum.c,v
retrieving revision 1.55
diff -c -r1.55 autovacuum.c
*** src/backend/postmaster/autovacuum.c	1 Jul 2007 18:30:54 -0000	1.55
--- src/backend/postmaster/autovacuum.c	27 Jul 2007 13:47:27 -0000
***************
*** 2599,2605 ****
  AutoVacuumingActive(void)
  {
  	if (!autovacuum_start_daemon || !pgstat_collect_startcollector ||
! 		!pgstat_collect_tuplelevel)
  		return false;
  	return true;
  }
--- 2599,2605 ----
  AutoVacuumingActive(void)
  {
  	if (!autovacuum_start_daemon || !pgstat_collect_startcollector ||
! 		!pgstat_collect_stats)
  		return false;
  	return true;
  }
***************
*** 2616,2626 ****
  	if (!autovacuum_start_daemon)
  		return;
  
! 	if (!pgstat_collect_startcollector || !pgstat_collect_tuplelevel)
  	{
  		ereport(WARNING,
  				(errmsg("autovacuum not started because of misconfiguration"),
! 				 errhint("Enable options \"stats_start_collector\" and \"stats_row_level\".")));
  
  		/*
  		 * Set the GUC var so we don't fork autovacuum uselessly, and also to
--- 2616,2626 ----
  	if (!autovacuum_start_daemon)
  		return;
  
! 	if (!pgstat_collect_startcollector || !pgstat_collect_stats)
  	{
  		ereport(WARNING,
  				(errmsg("autovacuum not started because of misconfiguration"),
! 				 errhint("Enable option \"stats_collection\".")));
  
  		/*
  		 * Set the GUC var so we don't fork autovacuum uselessly, and also to
Index: src/backend/postmaster/pgstat.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/postmaster/pgstat.c,v
retrieving revision 1.161
diff -c -r1.161 pgstat.c
*** src/backend/postmaster/pgstat.c	8 Jul 2007 22:23:16 -0000	1.161
--- src/backend/postmaster/pgstat.c	27 Jul 2007 13:47:28 -0000
***************
*** 93,102 ****
   * GUC parameters
   * ----------
   */
! bool		pgstat_collect_startcollector = true;
  bool		pgstat_collect_resetonpmstart = false;
- bool		pgstat_collect_tuplelevel = false;
- bool		pgstat_collect_blocklevel = false;
  bool		pgstat_collect_querystring = false;
  
  /*
--- 93,101 ----
   * GUC parameters
   * ----------
   */
! bool	pgstat_collect_startcollector = true;
! bool		pgstat_collect_stats = true;
  bool		pgstat_collect_resetonpmstart = false;
  bool		pgstat_collect_querystring = false;
  
  /*
***************
*** 257,271 ****
  #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.
  	 */
--- 256,261 ----
***************
*** 494,501 ****
  
  	/* Adjust GUC variables to suppress useless activity */
  	pgstat_collect_startcollector = false;
! 	pgstat_collect_tuplelevel = false;
! 	pgstat_collect_blocklevel = false;
  }
  
  /*
--- 484,490 ----
  
  	/* Adjust GUC variables to suppress useless activity */
  	pgstat_collect_startcollector = false;
! 	pgstat_collect_stats = false;
  }
  
  /*
***************
*** 1053,1059 ****
  	PgStat_MsgVacuum msg;
  
  	if (pgStatSock < 0 ||
! 		!pgstat_collect_tuplelevel)
  		return;
  
  	pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_VACUUM);
--- 1042,1048 ----
  	PgStat_MsgVacuum msg;
  
  	if (pgStatSock < 0 ||
! 		!pgstat_collect_stats)
  		return;
  
  	pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_VACUUM);
***************
*** 1079,1085 ****
  	PgStat_MsgAnalyze msg;
  
  	if (pgStatSock < 0 ||
! 		!pgstat_collect_tuplelevel)
  		return;
  
  	pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANALYZE);
--- 1068,1074 ----
  	PgStat_MsgAnalyze msg;
  
  	if (pgStatSock < 0 ||
! 		!pgstat_collect_stats)
  		return;
  
  	pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANALYZE);
***************
*** 1139,1147 ****
  		return;
  	}
  
! 	if (pgStatSock < 0 ||
! 		!(pgstat_collect_tuplelevel ||
! 		  pgstat_collect_blocklevel))
  	{
  		/* We're not counting at all */
  		rel->pgstat_info = NULL;
--- 1128,1134 ----
  		return;
  	}
  
! 	if (pgStatSock < 0 || !pgstat_collect_stats)
  	{
  		/* We're not counting at all */
  		rel->pgstat_info = NULL;
***************
*** 1274,1280 ****
  {
  	PgStat_TableStatus *pgstat_info = rel->pgstat_info;
  
! 	if (pgstat_collect_tuplelevel && pgstat_info != NULL)
  	{
  		int		nest_level = GetCurrentTransactionNestLevel();
  
--- 1261,1267 ----
  {
  	PgStat_TableStatus *pgstat_info = rel->pgstat_info;
  
! 	if (pgstat_collect_stats && pgstat_info != NULL)
  	{
  		int		nest_level = GetCurrentTransactionNestLevel();
  
***************
*** 1298,1304 ****
  {
  	PgStat_TableStatus *pgstat_info = rel->pgstat_info;
  
! 	if (pgstat_collect_tuplelevel && pgstat_info != NULL)
  	{
  		int		nest_level = GetCurrentTransactionNestLevel();
  
--- 1285,1291 ----
  {
  	PgStat_TableStatus *pgstat_info = rel->pgstat_info;
  
! 	if (pgstat_collect_stats && pgstat_info != NULL)
  	{
  		int		nest_level = GetCurrentTransactionNestLevel();
  
***************
*** 1324,1330 ****
  {
  	PgStat_TableStatus *pgstat_info = rel->pgstat_info;
  
! 	if (pgstat_collect_tuplelevel && pgstat_info != NULL)
  	{
  		int		nest_level = GetCurrentTransactionNestLevel();
  
--- 1311,1317 ----
  {
  	PgStat_TableStatus *pgstat_info = rel->pgstat_info;
  
! 	if (pgstat_collect_stats && pgstat_info != NULL)
  	{
  		int		nest_level = GetCurrentTransactionNestLevel();
  
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.407
diff -c -r1.407 guc.c
*** src/backend/utils/misc/guc.c	24 Jul 2007 04:54:09 -0000	1.407
--- src/backend/utils/misc/guc.c	27 Jul 2007 13:47:30 -0000
***************
*** 727,740 ****
  		&Explain_pretty_print,
  		true, NULL, NULL
  	},
  	{
! 		{"stats_start_collector", PGC_POSTMASTER, STATS_COLLECTOR,
  			gettext_noop("Starts the server statistics-collection subprocess."),
  			NULL
  		},
! 		&pgstat_collect_startcollector,
  		true, NULL, NULL
  	},
  	{
  		{"stats_reset_on_server_start", PGC_POSTMASTER, STATS_COLLECTOR,
  			gettext_noop("Zeroes collected statistics on server restart."),
--- 727,742 ----
  		&Explain_pretty_print,
  		true, NULL, NULL
  	},
+ 
  	{
! 		{"stats_collection", PGC_SUSET, STATS_COLLECTOR,
  			gettext_noop("Starts the server statistics-collection subprocess."),
  			NULL
  		},
! 		&pgstat_collect_stats,
  		true, NULL, NULL
  	},
+ 
  	{
  		{"stats_reset_on_server_start", PGC_POSTMASTER, STATS_COLLECTOR,
  			gettext_noop("Zeroes collected statistics on server restart."),
***************
*** 743,764 ****
  		&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,
- 		true, NULL, NULL
- 	},
- 	{
- 		{"stats_block_level", PGC_SUSET, STATS_COLLECTOR,
- 			gettext_noop("Collects block-level statistics on database activity."),
- 			NULL
- 		},
- 		&pgstat_collect_blocklevel,
- 		false, NULL, NULL
- 	},
  
  	{
  		{"stats_command_string", PGC_SUSET, STATS_COLLECTOR,
--- 745,750 ----
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.221
diff -c -r1.221 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample	24 Jul 2007 04:54:09 -0000	1.221
--- src/backend/utils/misc/postgresql.conf.sample	27 Jul 2007 13:47:30 -0000
***************
*** 356,365 ****
  #stats_command_string = 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)
  
  
--- 356,362 ----
  #stats_command_string = on
  #update_process_title = on
  
! #stats_collection = on			# needed for block or row stats
  #stats_reset_on_server_start = off	# (change requires restart)
  
  
***************
*** 376,383 ****
  #---------------------------------------------------------------------------
  
  #autovacuum = on			# enable autovacuum subprocess?
! 					# 'on' requires stats_start_collector
! 					# and stats_row_level to also be on
  #autovacuum_max_workers = 3		# max # of autovacuum subprocesses
  #autovacuum_naptime = 1min		# time between autovacuum runs
  #log_autovacuum = -1			# -1 is disabled, 0 logs all actions
--- 373,379 ----
  #---------------------------------------------------------------------------
  
  #autovacuum = on			# enable autovacuum subprocess?
! 					# 'on' requires stats_collection also to be on
  #autovacuum_max_workers = 3		# max # of autovacuum subprocesses
  #autovacuum_naptime = 1min		# time between autovacuum runs
  #log_autovacuum = -1			# -1 is disabled, 0 logs all actions
Index: src/include/pgstat.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/pgstat.h,v
retrieving revision 1.64
diff -c -r1.64 pgstat.h
*** src/include/pgstat.h	8 Jul 2007 22:23:16 -0000	1.64
--- src/include/pgstat.h	27 Jul 2007 13:47:31 -0000
***************
*** 450,459 ****
   * GUC parameters
   * ----------
   */
! extern bool pgstat_collect_startcollector;
  extern bool pgstat_collect_resetonpmstart;
! extern bool pgstat_collect_tuplelevel;
! extern bool pgstat_collect_blocklevel;
  extern bool pgstat_collect_querystring;
  
  /*
--- 450,458 ----
   * GUC parameters
   * ----------
   */
! extern bool	pgstat_collect_startcollector;
  extern bool pgstat_collect_resetonpmstart;
! extern bool pgstat_collect_stats;
  extern bool pgstat_collect_querystring;
  
  /*
***************
*** 510,546 ****
  
  #define pgstat_count_heap_scan(rel)										\
  	do {																\
! 		if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_numscans++;					\
  	} while (0)
  #define pgstat_count_heap_getnext(rel)									\
  	do {																\
! 		if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_tuples_returned++;			\
  	} while (0)
  #define pgstat_count_heap_fetch(rel)									\
  	do {																\
! 		if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_tuples_fetched++;			\
  	} while (0)
  #define pgstat_count_index_scan(rel)									\
  	do {																\
! 		if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_numscans++;					\
  	} while (0)
  #define pgstat_count_index_tuples(rel, n)								\
  	do {																\
! 		if (pgstat_collect_tuplelevel && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_tuples_returned += (n);		\
  	} while (0)
  #define pgstat_count_buffer_read(rel)									\
  	do {																\
! 		if (pgstat_collect_blocklevel && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_blocks_fetched++;			\
  	} while (0)
  #define pgstat_count_buffer_hit(rel)									\
  	do {																\
! 		if (pgstat_collect_blocklevel && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_blocks_hit++;				\
  	} while (0)
  
--- 509,545 ----
  
  #define pgstat_count_heap_scan(rel)										\
  	do {																\
! 		if (pgstat_collect_stats && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_numscans++;					\
  	} while (0)
  #define pgstat_count_heap_getnext(rel)									\
  	do {																\
! 		if (pgstat_collect_stats && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_tuples_returned++;			\
  	} while (0)
  #define pgstat_count_heap_fetch(rel)									\
  	do {																\
! 		if (pgstat_collect_stats && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_tuples_fetched++;			\
  	} while (0)
  #define pgstat_count_index_scan(rel)									\
  	do {																\
! 		if (pgstat_collect_stats && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_numscans++;					\
  	} while (0)
  #define pgstat_count_index_tuples(rel, n)								\
  	do {																\
! 		if (pgstat_collect_stats && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_tuples_returned += (n);		\
  	} while (0)
  #define pgstat_count_buffer_read(rel)									\
  	do {																\
! 		if (pgstat_collect_stats && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_blocks_fetched++;			\
  	} while (0)
  #define pgstat_count_buffer_hit(rel)									\
  	do {																\
! 		if (pgstat_collect_stats && (rel)->pgstat_info != NULL)	\
  			(rel)->pgstat_info->t_counts.t_blocks_hit++;				\
  	} while (0)
  
Index: src/test/regress/expected/stats.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/stats.out,v
retrieving revision 1.11
diff -c -r1.11 stats.out
*** src/test/regress/expected/stats.out	30 Apr 2007 03:23:49 -0000	1.11
--- src/test/regress/expected/stats.out	27 Jul 2007 13:47:31 -0000
***************
*** 4,16 ****
  -- Must be run after tenk2 has been created (by create_table),
  -- populated (by create_misc) and indexed (by create_index).
  --
- -- conditio sine qua non
- SHOW stats_start_collector;  -- must be on
-  stats_start_collector 
- -----------------------
-  on
- (1 row)
- 
  -- wait to let any prior tests finish dumping out stats;
  -- else our messages might get lost due to contention
  SELECT pg_sleep(2.0);
--- 4,9 ----
***************
*** 57,64 ****
  end
  $$ language plpgsql;
  -- enable statistics
! SET stats_block_level = on;
! SET stats_row_level = on;
  -- do a seqscan
  SELECT count(*) FROM tenk2;
   count 
--- 50,56 ----
  end
  $$ language plpgsql;
  -- enable statistics
! SET stats_collection = on;
  -- do a seqscan
  SELECT count(*) FROM tenk2;
   count 
Index: src/test/regress/sql/stats.sql
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/sql/stats.sql,v
retrieving revision 1.9
diff -c -r1.9 stats.sql
*** src/test/regress/sql/stats.sql	30 Apr 2007 03:23:49 -0000	1.9
--- src/test/regress/sql/stats.sql	27 Jul 2007 13:47:31 -0000
***************
*** 5,13 ****
  -- populated (by create_misc) and indexed (by create_index).
  --
  
- -- conditio sine qua non
- SHOW stats_start_collector;  -- must be on
- 
  -- wait to let any prior tests finish dumping out stats;
  -- else our messages might get lost due to contention
  SELECT pg_sleep(2.0);
--- 5,10 ----
***************
*** 52,59 ****
  $$ language plpgsql;
  
  -- enable statistics
! SET stats_block_level = on;
! SET stats_row_level = on;
  
  -- do a seqscan
  SELECT count(*) FROM tenk2;
--- 49,55 ----
  $$ language plpgsql;
  
  -- enable statistics
! SET stats_collection = on;
  
  -- do a seqscan
  SELECT count(*) FROM tenk2;
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to