mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 02:06:52 +02:00
Add %P to log_line_prefix for parallel group leader
This is useful for monitoring purposes with log parsing. Similarly to pg_stat_activity, the leader's PID is shown only for active parallel workers, minimizing the log footprint for the leaders as the equivalent shared memory field is set as long as a backend is alive. Author: Justin Pryzby Reviewed-by: Álvaro Herrera, Michael Paquier, Julien Rouhaud, Tom Lane Discussion: https://postgr.es/m/20200315111831.GA21492@telsasoft.com
This commit is contained in:
parent
f44b9b625b
commit
b8fdee7d0c
@ -6694,6 +6694,12 @@ local0.* /var/log/postgresql
|
|||||||
<entry>Process ID</entry>
|
<entry>Process ID</entry>
|
||||||
<entry>no</entry>
|
<entry>no</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><literal>%P</literal></entry>
|
||||||
|
<entry>Process ID of the parallel group leader, if this process
|
||||||
|
is a parallel query worker</entry>
|
||||||
|
<entry>no</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><literal>%t</literal></entry>
|
<entry><literal>%t</literal></entry>
|
||||||
<entry>Time stamp without milliseconds</entry>
|
<entry>Time stamp without milliseconds</entry>
|
||||||
@ -7026,7 +7032,7 @@ log_line_prefix = '%m [%p] %q%u@%d/%a '
|
|||||||
character count of the error position therein,
|
character count of the error position therein,
|
||||||
location of the error in the PostgreSQL source code
|
location of the error in the PostgreSQL source code
|
||||||
(if <varname>log_error_verbosity</varname> is set to <literal>verbose</literal>),
|
(if <varname>log_error_verbosity</varname> is set to <literal>verbose</literal>),
|
||||||
application name, and backend type.
|
application name, backend type, and process ID of parallel group leader.
|
||||||
Here is a sample table definition for storing CSV-format log output:
|
Here is a sample table definition for storing CSV-format log output:
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
@ -7056,6 +7062,7 @@ CREATE TABLE postgres_log
|
|||||||
location text,
|
location text,
|
||||||
application_name text,
|
application_name text,
|
||||||
backend_type text,
|
backend_type text,
|
||||||
|
leader_pid integer,
|
||||||
PRIMARY KEY (session_id, session_line_num)
|
PRIMARY KEY (session_id, session_line_num)
|
||||||
);
|
);
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
@ -2448,6 +2448,29 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
|
|||||||
else
|
else
|
||||||
appendStringInfo(buf, "%d", MyProcPid);
|
appendStringInfo(buf, "%d", MyProcPid);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'P':
|
||||||
|
if (MyProc)
|
||||||
|
{
|
||||||
|
PGPROC *leader = MyProc->lockGroupLeader;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Show the leader only for active parallel workers. This
|
||||||
|
* leaves out the leader of a parallel group.
|
||||||
|
*/
|
||||||
|
if (leader == NULL || leader->pid == MyProcPid)
|
||||||
|
appendStringInfoSpaces(buf,
|
||||||
|
padding > 0 ? padding : -padding);
|
||||||
|
else if (padding != 0)
|
||||||
|
appendStringInfo(buf, "%*d", padding, leader->pid);
|
||||||
|
else
|
||||||
|
appendStringInfo(buf, "%d", leader->pid);
|
||||||
|
}
|
||||||
|
else if (padding != 0)
|
||||||
|
appendStringInfoSpaces(buf,
|
||||||
|
padding > 0 ? padding : -padding);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'l':
|
case 'l':
|
||||||
if (padding != 0)
|
if (padding != 0)
|
||||||
appendStringInfo(buf, "%*ld", padding, log_line_number);
|
appendStringInfo(buf, "%*ld", padding, log_line_number);
|
||||||
@ -2836,6 +2859,21 @@ write_csvlog(ErrorData *edata)
|
|||||||
else
|
else
|
||||||
appendCSVLiteral(&buf, GetBackendTypeDesc(MyBackendType));
|
appendCSVLiteral(&buf, GetBackendTypeDesc(MyBackendType));
|
||||||
|
|
||||||
|
appendStringInfoChar(&buf, ',');
|
||||||
|
|
||||||
|
/* leader PID */
|
||||||
|
if (MyProc)
|
||||||
|
{
|
||||||
|
PGPROC *leader = MyProc->lockGroupLeader;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Show the leader only for active parallel workers. This leaves out
|
||||||
|
* the leader of a parallel group.
|
||||||
|
*/
|
||||||
|
if (leader && leader->pid != MyProcPid)
|
||||||
|
appendStringInfo(&buf, "%d", leader->pid);
|
||||||
|
}
|
||||||
|
|
||||||
appendStringInfoChar(&buf, '\n');
|
appendStringInfoChar(&buf, '\n');
|
||||||
|
|
||||||
/* If in the syslogger process, try to write messages direct to file */
|
/* If in the syslogger process, try to write messages direct to file */
|
||||||
|
@ -537,6 +537,7 @@
|
|||||||
# %h = remote host
|
# %h = remote host
|
||||||
# %b = backend type
|
# %b = backend type
|
||||||
# %p = process ID
|
# %p = process ID
|
||||||
|
# %P = process ID of parallel group leader
|
||||||
# %t = timestamp without milliseconds
|
# %t = timestamp without milliseconds
|
||||||
# %m = timestamp with milliseconds
|
# %m = timestamp with milliseconds
|
||||||
# %n = timestamp with milliseconds (as a Unix epoch)
|
# %n = timestamp with milliseconds (as a Unix epoch)
|
||||||
|
Loading…
Reference in New Issue
Block a user