1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Separate state from query string in pg_stat_activity

This separates the state (running/idle/idleintransaction etc) into
it's own field ("state"), and leaves the query field containing just
query text.

The query text will now mean "current query" when a query is running
and "last query" in other states. Accordingly,the field has been
renamed from current_query to query.

Since backwards compatibility was broken anyway to make that, the procpid
field has also been renamed to pid - along with the same field in
pg_stat_replication for consistency.

Scott Mead and Magnus Hagander, review work from Greg Smith
This commit is contained in:
Magnus Hagander
2012-01-19 14:19:20 +01:00
parent fa352d662e
commit 4f42b546fd
10 changed files with 380 additions and 87 deletions

View File

@ -242,20 +242,20 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
<tbody>
<row>
<entry><structname>pg_stat_activity</><indexterm><primary>pg_stat_activity</primary></indexterm></entry>
<entry>One row per server process, showing database OID, database
name, process <acronym>ID</>, user OID, user name, application name,
client's address, host name (if available), and port number, times at
which the server process, current transaction, and current query began
execution, process's waiting status, and text of the current query.
The columns that report data on the current query are available unless
the parameter <varname>track_activities</varname> has been turned off.
Furthermore, these columns are only visible if the user examining
the view is a superuser or the same as the user owning the process
being reported on. The client's host name will be available only if
<xref linkend="guc-log-hostname"> is set or if the user's host name
needed to be looked up during <filename>pg_hba.conf</filename>
processing.
<entry>
<structname>pg_stat_activity</structname>
<indexterm><primary>pg_stat_activity</primary></indexterm>
</entry>
<entry>
<para>One row per server process, showing information related to
each connection to the server. Unless the
<xref linkend="guc-track-activities"> parameter has been turned
off, it is possible to monitor state and query information of
all running processes.
</para>
<para>
See <xref linkend="pg-stat-activity-view"> for more details.
</para>
</entry>
</row>
@ -529,6 +529,210 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
into the kernel's handling of I/O.
</para>
<table id="pg-stat-activity-view" xreflabel="pg_stat_activity">
<title>pg_stat_activity view</title>
<tgroup cols="3">
<thead>
<row>
<entry>Column</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>datid</entry>
<entry><type>oid</></entry>
<entry>The oid of the database the backend is connected to.</entry>
</row>
<row>
<entry>datname</entry>
<entry><type>name</></entry>
<entry>The name of the database the backend is connected to.</entry>
</row>
<row>
<entry>pid</entry>
<entry><type>integer</></entry>
<entry>The process ID of the backend.</entry>
</row>
<row>
<entry>usesysid</entry>
<entry><type>oid</></entry>
<entry>The id of the user logged into the backend.</entry>
</row>
<row>
<entry>usename</entry>
<entry><type>name</></entry>
<entry>The name of the user logged into the backend.</entry>
</row>
<row>
<entry>application_name</entry>
<entry><type>text</></entry>
<entry>The name of the application that has initiated the connection
to the backend.</entry>
</row>
<row>
<entry>client_addr</entry>
<entry><type>inet</></entry>
<entry>The remote IP of the client connected to the backend.
If this field is not set, it indicates that the client is either:
<itemizedlist spacing="compact" mark="bullet">
<listitem>
<para>
Connected via unix sockets on the server machine
</para>
</listitem>
<listitem>
<para>An internal process such as autovacuum</para>
</listitem>
</itemizedlist>
</entry>
</row>
<row>
<entry>client_hostname</entry>
<entry><type>text</></entry>
<entry>
If available, the hostname of the client as reported by a
reverse lookup of <structfield>client_addr</>. This field will
only be set when <xref linkend="guc-log-hostname"> is enabled.
</entry>
</row>
<row>
<entry>client_port</entry>
<entry><type>integer</></entry>
<entry>
The remote TCP port that the client is using for communication
to the backend, or <symbol>NULL</> if a unix socket is used.
</entry>
</row>
<row>
<entry>backend_start</entry>
<entry><type>timestamp with time zone</></entry>
<entry>
The time when this process was started, i.e. when the
client connected to the server.
</entry>
</row>
<row>
<entry>xact_start</entry>
<entry><type>timestamp with time zone</></entry>
<entry>
The time when the current transaction was started. If the client is
using autocommit for transactions, this value is equal to the
query_start column.
</entry>
</row>
<row>
<entry>query_start</entry>
<entry><type>timestamp with time zone</></entry>
<entry>
The time when the currently active query started, or if
<structfield>state</> is <literal>idle</>, when the last query
was started.
</entry>
</row>
<row>
<entry>state_change</entry>
<entry><type>timestamp with time zone</></entry>
<entry>The time when the <structfield>state</> was last changed.</entry>
</row>
<row>
<entry>waiting</entry>
<entry><type>boolean</></entry>
<entry>
Boolean indicating if a backend is currently waiting on a lock.
</entry>
</row>
<row>
<entry>state</entry>
<entry><type>text</></entry>
<entry>
The <structfield>state</> of the currently running query.
Can be one of:
<variablelist>
<varlistentry>
<term>active</term>
<listitem>
<para>
The backend is executing a query.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>idle</term>
<listitem>
<para>
There is no query executing in the backend.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>idle in transaction</term>
<listitem>
<para>
The backend is in a transaction, but is currently not currently
executing a query.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>idle in transaction (aborted)</term>
<listitem>
<para>
This state is similar to <literal>idle in transaction</>,
except one of the statements in the transaction caused an error.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>fastpath function call</term>
<listitem>
<para>
The backend is executing a fast-path function.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>disabled</term>
<listitem>
<para>
This state indicates that <xref linkend="guc-track-activities">
is disabled.
</para>
</listitem>
</varlistentry>
</variablelist>
<note>
<para>
The <structfield>waiting</> and <structfield>state</> columns are
independent. If a query is in the <literal>active</> state,
it may or may not be <literal>waiting</>. If a query is
<literal>active</> and <structfield>waiting</> is true, it means
that the query is being executed, but is being blocked by a lock
somewhere in the system.
</para>
</note>
</entry>
</row>
<row>
<entry>query</entry>
<entry><type>text</></entry>
<entry>
The most recent query that the backend has executed. If
<structfield>state</> is <literal>active</> this means the currently
executing query. In all other states, it means the last query that was
executed.
</entry>
</row>
</tbody>
</tgroup>
</table>
<sect3 id="monitoring-stats-functions">
<title>Statistics Access Functions</title>
<para>
Other ways of looking at the statistics can be set up by writing
queries that use the same underlying statistics access functions as
@ -1264,6 +1468,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,
</programlisting>
</para>
</sect3>
</sect2>
</sect1>