Re: fix log_min_duration_statement logic error - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: fix log_min_duration_statement logic error |
Date | |
Msg-id | 200310090239.h992dlW06835@candle.pha.pa.us Whole thread Raw |
In response to | Re: fix log_min_duration_statement logic error (Peter Eisentraut <peter_e@gmx.net>) |
List | pgsql-patches |
OK, patch attached and applied. Changes are: "query:" now "statement:" log_duration also now prints when log_min_duration_statement prints --------------------------------------------------------------------------- Peter Eisentraut wrote: > Bruce Momjian writes: > > > > Imagine someone always having log_statement on and doing some sort of > > > aggregate query counting, say like grep '^LOG: query:' | wc -l. Now that > > > someone (or maybe the admin on the night shift, to make it more dramatic) > > > also turns on log_min_statement_duration (or whatever it's spelled), say > > > to find the slowest queries: grep '^LOG: duration:' | sort -xyz | head > > > -10. In order to guarantee the consistency of both results, you'd have to > > > log each query twice in this case. > > > > I guess. > > Can we agree to this? > > * If log_statement is on, then we log > > query: %s > > (Should it be "statement: %s"?) %s has newlines suitable escaped; exactly > how is independent of this discussion. > > * If log_duration is on, then we log > > duration: x.xxx ms > > The user can use log_pid to link it to the statement. (If the user > doesn't like this, he can use log_min_duration_statement=0.) > > * If log_min_duration_statement is triggered, then we log > > duration: x.xxx ms; query: %s > > * If log_statement is on and log_min_duration_statement is triggered, then > we (pick one): > > (a) log both as per above, or > (b) log only log_min_duration_statement > > * If log_duration is on and log_min_duration_statement is triggered, then > we (pick one): > > (a) log both as per above, or > (b) log only log_min_duration_statement > > -- > Peter Eisentraut peter_e@gmx.net > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > -- 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: src/backend/tcop/postgres.c =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/tcop/postgres.c,v retrieving revision 1.371 diff -c -c -r1.371 postgres.c *** src/backend/tcop/postgres.c 8 Oct 2003 03:49:37 -0000 1.371 --- src/backend/tcop/postgres.c 9 Oct 2003 02:37:19 -0000 *************** *** 461,467 **** if (log_statement) ereport(LOG, ! (errmsg("query: %s", query_string))); if (log_parser_stats) ResetUsage(); --- 461,467 ---- if (log_statement) ereport(LOG, ! (errmsg("statement: %s", query_string))); if (log_parser_stats) ResetUsage(); *************** *** 943,949 **** if (save_log_duration || save_log_min_duration_statement != -1) { long usecs; - bool print_statement; gettimeofday(&stop_t, NULL); if (stop_t.tv_usec < start_t.tv_usec) --- 943,948 ---- *************** *** 953,974 **** } usecs = (long) (stop_t.tv_sec - start_t.tv_sec) * 1000000 + (long) (stop_t.tv_usec - start_t.tv_usec); /* * Output a duration_statement to the log if the query has exceeded * the min duration, or if we are to print all durations. */ ! print_statement = (save_log_min_duration_statement == 0 || ! (save_log_min_duration_statement > 0 && ! usecs >= save_log_min_duration_statement * 1000)); ! ! if (save_log_duration || print_statement) ereport(LOG, ! (errmsg("duration: %ld.%03ld ms%s%s", (long) ((stop_t.tv_sec - start_t.tv_sec) * 1000 + (stop_t.tv_usec - start_t.tv_usec) / 1000), (long) (stop_t.tv_usec - start_t.tv_usec) % 1000, ! print_statement ? " query: " : "", ! print_statement ? query_string : ""))); } if (save_log_statement_stats) --- 952,977 ---- } usecs = (long) (stop_t.tv_sec - start_t.tv_sec) * 1000000 + (long) (stop_t.tv_usec - start_t.tv_usec); + if (save_log_duration) + ereport(LOG, + (errmsg("duration: %ld.%03ld ms", + (long) ((stop_t.tv_sec - start_t.tv_sec) * 1000 + + (stop_t.tv_usec - start_t.tv_usec) / 1000), + (long) (stop_t.tv_usec - start_t.tv_usec) % 1000))); + /* * Output a duration_statement to the log if the query has exceeded * the min duration, or if we are to print all durations. */ ! if (save_log_min_duration_statement == 0 || ! (save_log_min_duration_statement > 0 && ! usecs >= save_log_min_duration_statement * 1000)) ereport(LOG, ! (errmsg("duration: %ld.%03ld ms statement: %s", (long) ((stop_t.tv_sec - start_t.tv_sec) * 1000 + (stop_t.tv_usec - start_t.tv_usec) / 1000), (long) (stop_t.tv_usec - start_t.tv_usec) % 1000, ! query_string))); } if (save_log_statement_stats)
pgsql-patches by date: