GUC changes to log query durations

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема GUC changes to log query durations
Дата
Msg-id 200208311949.g7VJn3T24883@candle.pha.pa.us
обсуждение исходный текст
Список pgsql-patches
The attached patch adds 'log_duration' to GUC, showing the duration of
each query.  It is to be used with LOG_PID and LOG_STATEMENT:

 [22602]  LOG:  query: SELECT usesuper FROM pg_catalog.pg_user WHERE usename = 'postgres'
 [22602]  LOG:  duration: 0.666637 sec
 [22602]  LOG:  query: SELECT * FROM pg_language;
 [22602]  LOG:  duration: 0.079464 sec

The patch also changes debug_print_query to log_statement and
show_query_statistics to show_statement_statistics.  I believe Peter has
suggested similar changes recently, making the debug_print_query a log_
option because it really isn't for debugging the server, and changing
'query' to 'statement' to be more precise.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/func.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/func.sgml,v
retrieving revision 1.118
diff -c -c -r1.118 func.sgml
*** doc/src/sgml/func.sgml    29 Aug 2002 05:17:55 -0000    1.118
--- doc/src/sgml/func.sgml    31 Aug 2002 19:44:53 -0000
***************
*** 5241,5247 ****
      <literal>false</literal> instead. It is the equivalent to the SQL
      <command>SET</command> command. For example:
  <programlisting>
! select set_config('show_query_stats','off','f');
   set_config
  ------------
   off
--- 5241,5247 ----
      <literal>false</literal> instead. It is the equivalent to the SQL
      <command>SET</command> command. For example:
  <programlisting>
! select set_config('show_statement_stats','off','f');
   set_config
  ------------
   off
Index: doc/src/sgml/runtime.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/runtime.sgml,v
retrieving revision 1.130
diff -c -c -r1.130 runtime.sgml
*** doc/src/sgml/runtime.sgml    30 Aug 2002 16:50:49 -0000    1.130
--- doc/src/sgml/runtime.sgml    31 Aug 2002 19:45:06 -0000
***************
*** 928,934 ****
       </varlistentry>

       <varlistentry>
-       <term><varname>DEBUG_PRINT_QUERY</varname> (<type>boolean</type>)</term>
        <term><varname>DEBUG_PRINT_PARSE</varname> (<type>boolean</type>)</term>
        <term><varname>DEBUG_PRINT_REWRITTEN</varname> (<type>boolean</type>)</term>
        <term><varname>DEBUG_PRINT_PLAN</varname> (<type>boolean</type>)</term>
--- 928,933 ----
***************
*** 993,998 ****
--- 992,1017 ----
       </varlistentry>

       <varlistentry>
+       <term><varname>LOG_STATEMENT</varname> (<type>boolean</type>)</term>
+       <listitem>
+        <para>
+         Prints each query received.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><varname>LOG_DURATION</varname> (<type>boolean</type>)</term>
+       <listitem>
+        <para>
+         Prints the duration of every completed query.  To use this option,
+         enable LOG_STATEMENT and LOG_PID so you can link the original query
+         to the duration using the process id.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><varname>LOG_TIMESTAMP</varname> (<type>boolean</type>)</term>
        <listitem>
         <para>
***************
*** 1003,1009 ****
       </varlistentry>

       <varlistentry>
!       <term><varname>SHOW_QUERY_STATS</varname> (<type>boolean</type>)</term>
        <term><varname>SHOW_PARSER_STATS</varname> (<type>boolean</type>)</term>
        <term><varname>SHOW_PLANNER_STATS</varname> (<type>boolean</type>)</term>
        <term><varname>SHOW_EXECUTOR_STATS</varname> (<type>boolean</type>)</term>
--- 1022,1028 ----
       </varlistentry>

       <varlistentry>
!       <term><varname>SHOW_STATEMENT_STATS</varname> (<type>boolean</type>)</term>
        <term><varname>SHOW_PARSER_STATS</varname> (<type>boolean</type>)</term>
        <term><varname>SHOW_PLANNER_STATS</varname> (<type>boolean</type>)</term>
        <term><varname>SHOW_EXECUTOR_STATS</varname> (<type>boolean</type>)</term>
***************
*** 2049,2055 ****
         </row>
         <row>
          <entry><option>-s</option></entry>
!         <entry><literal>show_query_stats = on</></entry>
          <entry>*</entry>
         </row>
         <row>
--- 2068,2074 ----
         </row>
         <row>
          <entry><option>-s</option></entry>
!         <entry><literal>show_statement_stats = on</></entry>
          <entry>*</entry>
         </row>
         <row>
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/tcop/postgres.c,v
retrieving revision 1.286
diff -c -c -r1.286 postgres.c
*** src/backend/tcop/postgres.c    29 Aug 2002 23:39:05 -0000    1.286
--- src/backend/tcop/postgres.c    31 Aug 2002 19:45:19 -0000
***************
*** 372,378 ****
  {
      List       *raw_parsetree_list;

!     if (Debug_print_query)
          elog(LOG, "query: %s", query_string->data);

      if (Show_parser_stats)
--- 372,378 ----
  {
      List       *raw_parsetree_list;

!     if (Log_statement)
          elog(LOG, "query: %s", query_string->data);

      if (Show_parser_stats)
***************
*** 561,569 ****
--- 561,574 ----
      MemoryContext oldcontext;
      List       *parsetree_list,
                 *parsetree_item;
+     struct timezone tz;
+     struct timeval start_t, stop_t;

      debug_query_string = query_string->data;    /* used by pgmonitor */

+     if (Log_duration)
+         gettimeofday(&start_t, &tz);
+
      /*
       * Start up a transaction command.    All queries generated by the
       * query_string will be in this same command block, *unless* we find a
***************
*** 850,855 ****
--- 855,873 ----
      if (xact_started)
          finish_xact_command();

+     if (Log_duration)
+     {
+         gettimeofday(&stop_t, &tz);
+         if (stop_t.tv_usec < start_t.tv_usec)
+         {
+             stop_t.tv_sec--;
+             stop_t.tv_usec += 1000000;
+         }
+         elog(LOG, "duration: %ld.%06ld sec",
+             (long int) stop_t.tv_sec - start_t.tv_sec,
+             (long int) stop_t.tv_usec - start_t.tv_usec);
+     }
+
      debug_query_string = NULL;    /* used by pgmonitor */
  }

***************
*** 1234,1240 ****
                          if (atoi(optarg) >= 1)
                              SetConfigOption("log_connections", "true", ctx, gucsource);
                          if (atoi(optarg) >= 2)
!                             SetConfigOption("debug_print_query", "true", ctx, gucsource);
                          if (atoi(optarg) >= 3)
                              SetConfigOption("debug_print_parse", "true", ctx, gucsource);
                          if (atoi(optarg) >= 4)
--- 1252,1258 ----
                          if (atoi(optarg) >= 1)
                              SetConfigOption("log_connections", "true", ctx, gucsource);
                          if (atoi(optarg) >= 2)
!                             SetConfigOption("log_statement", "true", ctx, gucsource);
                          if (atoi(optarg) >= 3)
                              SetConfigOption("debug_print_parse", "true", ctx, gucsource);
                          if (atoi(optarg) >= 4)
***************
*** 1377,1383 ****
                  /*
                   * s - report usage statistics (timings) after each query
                   */
!                 SetConfigOption("show_query_stats", "true", ctx, gucsource);
                  break;

              case 't':
--- 1395,1401 ----
                  /*
                   * s - report usage statistics (timings) after each query
                   */
!                 SetConfigOption("show_statement_stats", "true", ctx, gucsource);
                  break;

              case 't':
***************
*** 1489,1499 ****
      /*
       * Post-processing for command line options.
       */
!     if (Show_query_stats &&
          (Show_parser_stats || Show_planner_stats || Show_executor_stats))
      {
          elog(WARNING, "Query statistics are disabled because parser, planner, or executor statistics are on.");
!         SetConfigOption("show_query_stats", "false", ctx, gucsource);
      }

      if (!IsUnderPostmaster)
--- 1507,1517 ----
      /*
       * Post-processing for command line options.
       */
!     if (Show_statement_stats &&
          (Show_parser_stats || Show_planner_stats || Show_executor_stats))
      {
          elog(WARNING, "Query statistics are disabled because parser, planner, or executor statistics are on.");
!         SetConfigOption("show_statement_stats", "false", ctx, gucsource);
      }

      if (!IsUnderPostmaster)
***************
*** 1887,1893 ****
                       * Note: transaction command start/end is now done within
                       * pg_exec_query_string(), not here.
                       */
!                     if (Show_query_stats)
                          ResetUsage();

                      pgstat_report_activity(parser_input->data);
--- 1905,1911 ----
                       * Note: transaction command start/end is now done within
                       * pg_exec_query_string(), not here.
                       */
!                     if (Show_statement_stats)
                          ResetUsage();

                      pgstat_report_activity(parser_input->data);
***************
*** 1896,1902 ****
                                           whereToSendOutput,
                                           QueryContext);

!                     if (Show_query_stats)
                          ShowUsage("QUERY STATISTICS");
                  }
                  break;
--- 1914,1920 ----
                                           whereToSendOutput,
                                           QueryContext);

!                     if (Show_statement_stats)
                          ShowUsage("QUERY STATISTICS");
                  }
                  break;
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/misc/guc.c,v
retrieving revision 1.88
diff -c -c -r1.88 guc.c
*** src/backend/utils/misc/guc.c    30 Aug 2002 16:50:50 -0000    1.88
--- src/backend/utils/misc/guc.c    31 Aug 2002 19:45:27 -0000
***************
*** 76,82 ****
  #ifdef USE_ASSERT_CHECKING
  bool        assert_enabled = true;
  #endif
! bool        Debug_print_query = false;
  bool        Debug_print_plan = false;
  bool        Debug_print_parse = false;
  bool        Debug_print_rewritten = false;
--- 76,83 ----
  #ifdef USE_ASSERT_CHECKING
  bool        assert_enabled = true;
  #endif
! bool        Log_statement = false;
! bool        Log_duration = false;
  bool        Debug_print_plan = false;
  bool        Debug_print_parse = false;
  bool        Debug_print_rewritten = false;
***************
*** 85,91 ****
  bool        Show_parser_stats = false;
  bool        Show_planner_stats = false;
  bool        Show_executor_stats = false;
! bool        Show_query_stats = false;    /* this is sort of all three above
                                           * together */
  bool        Show_btree_build_stats = false;

--- 86,92 ----
  bool        Show_parser_stats = false;
  bool        Show_planner_stats = false;
  bool        Show_executor_stats = false;
! bool        Show_statement_stats = false;    /* this is sort of all three above
                                           * together */
  bool        Show_btree_build_stats = false;

***************
*** 361,367 ****
  #endif

      {
!         { "debug_print_query", PGC_USERSET }, &Debug_print_query,
          false, NULL, NULL
      },
      {
--- 362,372 ----
  #endif

      {
!         { "log_statement", PGC_USERSET }, &Log_statement,
!         false, NULL, NULL
!     },
!     {
!         { "log_duration", PGC_USERSET }, &Log_duration,
          false, NULL, NULL
      },
      {
***************
*** 394,400 ****
          false, NULL, NULL
      },
      {
!         { "show_query_stats", PGC_USERSET }, &Show_query_stats,
          false, NULL, NULL
      },
  #ifdef BTREE_BUILD_STATS
--- 399,405 ----
          false, NULL, NULL
      },
      {
!         { "show_statement_stats", PGC_USERSET }, &Show_statement_stats,
          false, NULL, NULL
      },
  #ifdef BTREE_BUILD_STATS
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.49
diff -c -c -r1.49 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample    29 Aug 2002 21:02:12 -0000    1.49
--- src/backend/utils/misc/postgresql.conf.sample    31 Aug 2002 19:45:33 -0000
***************
*** 104,110 ****
  #geqo = true
  #geqo_selection_bias = 2.0    # range 1.5-2.0
  #geqo_threshold = 11
! #geqo_pool_size = 0        # default based on tables in query,
                  # range 128-1024
  #geqo_effort = 1
  #geqo_generations = 0
--- 104,110 ----
  #geqo = true
  #geqo_selection_bias = 2.0    # range 1.5-2.0
  #geqo_threshold = 11
! #geqo_pool_size = 0        # default based on tables in statement,
                  # range 128-1024
  #geqo_effort = 1
  #geqo_generations = 0
***************
*** 124,133 ****
  #silent_mode = false

  #log_connections = false
- #log_timestamp = false
  #log_pid = false

- #debug_print_query = false
  #debug_print_parse = false
  #debug_print_rewritten = false
  #debug_print_plan = false
--- 124,134 ----
  #silent_mode = false

  #log_connections = false
  #log_pid = false
+ #log_statement = false
+ #log_duration = false
+ #log_timestamp = false

  #debug_print_parse = false
  #debug_print_rewritten = false
  #debug_print_plan = false
***************
*** 153,159 ****
  #show_parser_stats = false
  #show_planner_stats = false
  #show_executor_stats = false
! #show_query_stats = false

  # requires BTREE_BUILD_STATS
  #show_btree_build_stats = false
--- 154,160 ----
  #show_parser_stats = false
  #show_planner_stats = false
  #show_executor_stats = false
! #show_statement_stats = false

  # requires BTREE_BUILD_STATS
  #show_btree_build_stats = false
Index: src/bin/psql/tab-complete.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/tab-complete.c,v
retrieving revision 1.59
diff -c -c -r1.59 tab-complete.c
*** src/bin/psql/tab-complete.c    30 Aug 2002 18:15:23 -0000    1.59
--- src/bin/psql/tab-complete.c    31 Aug 2002 19:45:38 -0000
***************
*** 231,237 ****
          "server_min_messages",
          "client_min_messages",
          "debug_assertions",
!         "debug_print_query",
          "debug_print_parse",
          "debug_print_rewritten",
          "debug_print_plan",
--- 231,238 ----
          "server_min_messages",
          "client_min_messages",
          "debug_assertions",
!         "log_statement",
!         "log_duration",
          "debug_print_parse",
          "debug_print_rewritten",
          "debug_print_plan",
***************
*** 239,245 ****
          "show_parser_stats",
          "show_planner_stats",
          "show_executor_stats",
!         "show_query_stats",
          "trace_notify",
          "explain_pretty_print",
          "sql_inheritance",
--- 240,246 ----
          "show_parser_stats",
          "show_planner_stats",
          "show_executor_stats",
!         "show_statement_stats",
          "trace_notify",
          "explain_pretty_print",
          "sql_inheritance",
Index: src/include/utils/guc.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/utils/guc.h,v
retrieving revision 1.20
diff -c -c -r1.20 guc.h
*** src/include/utils/guc.h    30 Jul 2002 16:20:03 -0000    1.20
--- src/include/utils/guc.h    31 Aug 2002 19:45:40 -0000
***************
*** 100,106 ****
  extern ArrayType *GUCArrayAdd(ArrayType *array, const char *name, const char *value);
  extern ArrayType *GUCArrayDelete(ArrayType *array, const char *name);

! extern bool Debug_print_query;
  extern bool Debug_print_plan;
  extern bool Debug_print_parse;
  extern bool Debug_print_rewritten;
--- 100,107 ----
  extern ArrayType *GUCArrayAdd(ArrayType *array, const char *name, const char *value);
  extern ArrayType *GUCArrayDelete(ArrayType *array, const char *name);

! extern bool Log_statement;
! extern bool Log_duration;
  extern bool Debug_print_plan;
  extern bool Debug_print_parse;
  extern bool Debug_print_rewritten;
***************
*** 109,115 ****
  extern bool Show_parser_stats;
  extern bool Show_planner_stats;
  extern bool Show_executor_stats;
! extern bool Show_query_stats;
  extern bool Show_btree_build_stats;

  extern bool Explain_pretty_print;
--- 110,116 ----
  extern bool Show_parser_stats;
  extern bool Show_planner_stats;
  extern bool Show_executor_stats;
! extern bool Show_statement_stats;
  extern bool Show_btree_build_stats;

  extern bool Explain_pretty_print;

В списке pgsql-patches по дате отправления:

Предыдущее
От: "Serguei Mokhov"
Дата:
Сообщение: Re: pg_controldata: Russian NLS
Следующее
От: "Serguei Mokhov"
Дата:
Сообщение: pg_resetxlog: Russian NLS