Re: [HACKERS] Overhead for stats_command_string et al, take 2 - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [HACKERS] Overhead for stats_command_string et al, take 2
Date
Msg-id 200606262126.k5QLQ3f14122@momjian.us
Whole thread Raw
Responses Re: [HACKERS] Overhead for stats_command_string et al, take 2  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-patches
Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> writes:
> > Yep, I see 8% here.  I will add a patch to allow the ps display to be
> > turned off.
>
> I think we'd still want a backend to set the PS display once with its
> identification data (user/DB name and client address).  It's just the
> transient activity updates that should stop.

Attached patch adds GUC 'update_process_title' to control ps display
updates per SQL command.  Default to 'on'.  GUC name OK?

--
  Bruce Momjian   bruce@momjian.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: doc/src/sgml/config.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/config.sgml,v
retrieving revision 1.66
diff -c -c -r1.66 config.sgml
*** doc/src/sgml/config.sgml    19 Jun 2006 01:51:21 -0000    1.66
--- doc/src/sgml/config.sgml    26 Jun 2006 19:59:53 -0000
***************
*** 2888,2893 ****
--- 2888,2908 ----
        </listitem>
       </varlistentry>

+      <varlistentry id="guc-update-process-title" xreflabel="update_process_title">
+       <term><varname>update_process_title</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>
Index: src/backend/commands/async.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/commands/async.c,v
retrieving revision 1.131
diff -c -c -r1.131 async.c
*** src/backend/commands/async.c    25 Apr 2006 14:11:54 -0000    1.131
--- src/backend/commands/async.c    26 Jun 2006 19:59:56 -0000
***************
*** 908,914 ****
      if (Trace_notify)
          elog(DEBUG1, "ProcessIncomingNotify");

!     set_ps_display("notify interrupt");

      notifyInterruptOccurred = 0;

--- 908,915 ----
      if (Trace_notify)
          elog(DEBUG1, "ProcessIncomingNotify");

!     if (update_process_title)
!         set_ps_display("notify interrupt");

      notifyInterruptOccurred = 0;

***************
*** 979,985 ****
       */
      pq_flush();

!     set_ps_display("idle");

      if (Trace_notify)
          elog(DEBUG1, "ProcessIncomingNotify: done");
--- 980,987 ----
       */
      pq_flush();

!     if (update_process_title)
!         set_ps_display("idle");

      if (Trace_notify)
          elog(DEBUG1, "ProcessIncomingNotify: done");
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.488
diff -c -c -r1.488 postmaster.c
*** src/backend/postmaster/postmaster.c    20 Jun 2006 22:52:00 -0000    1.488
--- src/backend/postmaster/postmaster.c    26 Jun 2006 20:00:03 -0000
***************
*** 2714,2721 ****
       * title for ps.  It's good to do this as early as possible in startup.
       */
      init_ps_display(port->user_name, port->database_name, remote_ps_data);
!     set_ps_display("authentication");
!
      /*
       * Now perform authentication exchange.
       */
--- 2714,2724 ----
       * title for ps.  It's good to do this as early as possible in startup.
       */
      init_ps_display(port->user_name, port->database_name, remote_ps_data);
!     if (update_process_title)
!         set_ps_display("authentication");
!     else
!         set_ps_display("");
!
      /*
       * Now perform authentication exchange.
       */
Index: src/backend/storage/lmgr/lock.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v
retrieving revision 1.164
diff -c -c -r1.164 lock.c
*** src/backend/storage/lmgr/lock.c    14 Apr 2006 03:38:55 -0000    1.164
--- src/backend/storage/lmgr/lock.c    26 Jun 2006 20:00:05 -0000
***************
*** 1069,1075 ****
      new_status = (char *) palloc(len + 8 + 1);
      memcpy(new_status, old_status, len);
      strcpy(new_status + len, " waiting");
!     set_ps_display(new_status);
      new_status[len] = '\0';        /* truncate off " waiting" */

      awaitedLock = locallock;
--- 1069,1076 ----
      new_status = (char *) palloc(len + 8 + 1);
      memcpy(new_status, old_status, len);
      strcpy(new_status + len, " waiting");
!     if (update_process_title)
!         set_ps_display(new_status);
      new_status[len] = '\0';        /* truncate off " waiting" */

      awaitedLock = locallock;
***************
*** 1108,1114 ****

      awaitedLock = NULL;

!     set_ps_display(new_status);
      pfree(new_status);

      LOCK_PRINT("WaitOnLock: wakeup on lock",
--- 1109,1116 ----

      awaitedLock = NULL;

!     if (update_process_title)
!         set_ps_display(new_status);
      pfree(new_status);

      LOCK_PRINT("WaitOnLock: wakeup on lock",
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.489
diff -c -c -r1.489 postgres.c
*** src/backend/tcop/postgres.c    20 Jun 2006 22:52:00 -0000    1.489
--- src/backend/tcop/postgres.c    26 Jun 2006 20:00:14 -0000
***************
*** 910,916 ****
           */
          commandTag = CreateCommandTag(parsetree);

!         set_ps_display(commandTag);

          BeginCommand(commandTag, dest);

--- 910,917 ----
           */
          commandTag = CreateCommandTag(parsetree);

!         if (update_process_title)
!             set_ps_display(commandTag);

          BeginCommand(commandTag, dest);

***************
*** 1144,1150 ****

      pgstat_report_activity(query_string);

!     set_ps_display("PARSE");

      if (save_log_statement_stats)
          ResetUsage();
--- 1145,1152 ----

      pgstat_report_activity(query_string);

!     if (update_process_title)
!         set_ps_display("PARSE");

      if (save_log_statement_stats)
          ResetUsage();
***************
*** 1376,1382 ****

      pgstat_report_activity("<BIND>");

!     set_ps_display("BIND");

      /*
       * Start up a transaction command so we can call functions etc. (Note that
--- 1378,1385 ----

      pgstat_report_activity("<BIND>");

!     if (update_process_title)
!         set_ps_display("BIND");

      /*
       * Start up a transaction command so we can call functions etc. (Note that
***************
*** 1711,1717 ****
          pgstat_report_activity("<EXECUTE>");
      }

!     set_ps_display(portal->commandTag);

      /*
       * We use save_log_statement_stats so ShowUsage doesn't report incorrect
--- 1714,1721 ----
          pgstat_report_activity("<EXECUTE>");
      }

!     if (update_process_title)
!         set_ps_display(portal->commandTag);

      /*
       * We use save_log_statement_stats so ShowUsage doesn't report incorrect
***************
*** 2486,2492 ****
      if (!IsUnderPostmaster)
          MemoryContextInit();

!     set_ps_display("startup");

      SetProcessingMode(InitProcessing);

--- 2490,2497 ----
      if (!IsUnderPostmaster)
          MemoryContextInit();

!     if (update_process_title)
!         set_ps_display("startup");

      SetProcessingMode(InitProcessing);

***************
*** 3121,3134 ****
          {
              if (IsTransactionOrTransactionBlock())
              {
!                 set_ps_display("idle in transaction");
                  pgstat_report_activity("<IDLE> in transaction");
              }
              else
              {
                  pgstat_report_tabstat();

!                 set_ps_display("idle");
                  pgstat_report_activity("<IDLE>");
              }

--- 3126,3141 ----
          {
              if (IsTransactionOrTransactionBlock())
              {
!                 if (update_process_title)
!                     set_ps_display("idle in transaction");
                  pgstat_report_activity("<IDLE> in transaction");
              }
              else
              {
                  pgstat_report_tabstat();

!                 if (update_process_title)
!                     set_ps_display("idle");
                  pgstat_report_activity("<IDLE>");
              }

Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.322
diff -c -c -r1.322 guc.c
*** src/backend/utils/misc/guc.c    19 Jun 2006 01:51:21 -0000    1.322
--- src/backend/utils/misc/guc.c    26 Jun 2006 20:00:30 -0000
***************
*** 64,69 ****
--- 64,70 ----
  #include "utils/builtins.h"
  #include "utils/memutils.h"
  #include "utils/pg_locale.h"
+ #include "utils/ps_status.h"
  #include "pgstat.h"
  #include "access/gin.h"

***************
*** 729,734 ****
--- 730,745 ----
      },

      {
+         {"update_process_title", PGC_SUSET, STATS_COLLECTOR,
+             gettext_noop("Updates the process title to show the active SQL command."),
+             gettext_noop("Enables updating of the process title every time a new
+             SQL command is received by the server.")
+         },
+         &update_process_title,
+         true, NULL, NULL
+     },
+
+     {
          {"autovacuum", PGC_SIGHUP, AUTOVACUUM,
              gettext_noop("Starts the autovacuum subprocess."),
              NULL
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.180
diff -c -c -r1.180 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample    19 Jun 2006 01:51:21 -0000    1.180
--- src/backend/utils/misc/postgresql.conf.sample    26 Jun 2006 20:00:30 -0000
***************
*** 323,333 ****
--- 323,336 ----
  # - Query/Index Statistics Collector -

  #stats_command_string = off
+ #update_process_title = on
+
  #stats_start_collector = on        # needed for block or row stats
  #stats_block_level = off
  #stats_row_level = off
  #stats_reset_on_server_start = off

+
  # - Statistics Monitoring -

  #log_parser_stats = off
Index: src/backend/utils/misc/ps_status.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/misc/ps_status.c,v
retrieving revision 1.30
diff -c -c -r1.30 ps_status.c
*** src/backend/utils/misc/ps_status.c    12 Jun 2006 02:39:49 -0000    1.30
--- src/backend/utils/misc/ps_status.c    26 Jun 2006 20:00:31 -0000
***************
*** 31,36 ****
--- 31,37 ----
  #include "utils/ps_status.h"

  extern char **environ;
+ bool update_process_title = true;


  /*
Index: src/include/utils/ps_status.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/utils/ps_status.h,v
retrieving revision 1.26
diff -c -c -r1.26 ps_status.h
*** src/include/utils/ps_status.h    5 Nov 2005 03:04:53 -0000    1.26
--- src/include/utils/ps_status.h    26 Jun 2006 20:00:32 -0000
***************
*** 12,17 ****
--- 12,19 ----
  #ifndef PS_STATUS_H
  #define PS_STATUS_H

+ extern bool update_process_title;
+
  extern char **save_ps_display_args(int argc, char **argv);

  extern void init_ps_display(const char *username, const char *dbname,

pgsql-patches by date:

Previous
From: "Magnus Hagander"
Date:
Subject: Re: Further patch for VS2005
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] Overhead for stats_command_string et al, take 2