Sophie

Sophie

distrib > Mageia > 7 > x86_64 > by-pkgid > 9b6cc37ce608401d44f6535a0c7cb777 > files > 529

postgresql11-docs-11.5-1.mga7.noarch.rpm

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>28.2. The Statistics Collector</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="monitoring-ps.html" title="28.1. Standard Unix Tools" /><link rel="next" href="monitoring-locks.html" title="28.3. Viewing Locks" /></head><body><div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">28.2. The Statistics Collector</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="monitoring-ps.html" title="28.1. Standard Unix Tools">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="monitoring.html" title="Chapter 28. Monitoring Database Activity">Up</a></td><th width="60%" align="center">Chapter 28. Monitoring Database Activity</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 11.5 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="monitoring-locks.html" title="28.3. Viewing Locks">Next</a></td></tr></table><hr></hr></div><div class="sect1" id="MONITORING-STATS"><div class="titlepage"><div><div><h2 class="title" style="clear: both">28.2. The Statistics Collector</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="sect2"><a href="monitoring-stats.html#MONITORING-STATS-SETUP">28.2.1. Statistics Collection Configuration</a></span></dt><dt><span class="sect2"><a href="monitoring-stats.html#MONITORING-STATS-VIEWS">28.2.2. Viewing Statistics</a></span></dt><dt><span class="sect2"><a href="monitoring-stats.html#MONITORING-STATS-FUNCTIONS">28.2.3. Statistics Functions</a></span></dt></dl></div><a id="id-1.6.15.7.2" class="indexterm"></a><p>
   <span class="productname">PostgreSQL</span>'s <em class="firstterm">statistics collector</em>
   is a subsystem that supports collection and reporting of information about
   server activity.  Presently, the collector can count accesses to tables
   and indexes in both disk-block and individual-row terms.  It also tracks
   the total number of rows in each table, and information about vacuum and
   analyze actions for each table.  It can also count calls to user-defined
   functions and the total time spent in each one.
  </p><p>
   <span class="productname">PostgreSQL</span> also supports reporting dynamic
   information about exactly what is going on in the system right now, such as
   the exact command currently being executed by other server processes, and
   which other connections exist in the system.  This facility is independent
   of the collector process.
  </p><div class="sect2" id="MONITORING-STATS-SETUP"><div class="titlepage"><div><div><h3 class="title">28.2.1. Statistics Collection Configuration</h3></div></div></div><p>
   Since collection of statistics adds some overhead to query execution,
   the system can be configured to collect or not collect information.
   This is controlled by configuration parameters that are normally set in
   <code class="filename">postgresql.conf</code>.  (See <a class="xref" href="runtime-config.html" title="Chapter 19. Server Configuration">Chapter 19</a> for
   details about setting configuration parameters.)
  </p><p>
   The parameter <a class="xref" href="runtime-config-statistics.html#GUC-TRACK-ACTIVITIES">track_activities</a> enables monitoring
   of the current command being executed by any server process.
  </p><p>
   The parameter <a class="xref" href="runtime-config-statistics.html#GUC-TRACK-COUNTS">track_counts</a> controls whether
   statistics are collected about table and index accesses.
  </p><p>
   The parameter <a class="xref" href="runtime-config-statistics.html#GUC-TRACK-FUNCTIONS">track_functions</a> enables tracking of
   usage of user-defined functions.
  </p><p>
   The parameter <a class="xref" href="runtime-config-statistics.html#GUC-TRACK-IO-TIMING">track_io_timing</a> enables monitoring
   of block read and write times.
  </p><p>
   Normally these parameters are set in <code class="filename">postgresql.conf</code> so
   that they apply to all server processes, but it is possible to turn
   them on or off in individual sessions using the <a class="xref" href="sql-set.html" title="SET"><span class="refentrytitle">SET</span></a> command. (To prevent
   ordinary users from hiding their activity from the administrator,
   only superusers are allowed to change these parameters with
   <code class="command">SET</code>.)
  </p><p>
   The statistics collector transmits the collected information to other
   <span class="productname">PostgreSQL</span> processes through temporary files.
   These files are stored in the directory named by the
   <a class="xref" href="runtime-config-statistics.html#GUC-STATS-TEMP-DIRECTORY">stats_temp_directory</a> parameter,
   <code class="filename">pg_stat_tmp</code> by default.
   For better performance, <code class="varname">stats_temp_directory</code> can be
   pointed at a RAM-based file system, decreasing physical I/O requirements.
   When the server shuts down cleanly, a permanent copy of the statistics
   data is stored in the <code class="filename">pg_stat</code> subdirectory, so that
   statistics can be retained across server restarts.  When recovery is
   performed at server start (e.g. after immediate shutdown, server crash,
   and point-in-time recovery), all statistics counters are reset.
  </p></div><div class="sect2" id="MONITORING-STATS-VIEWS"><div class="titlepage"><div><div><h3 class="title">28.2.2. Viewing Statistics</h3></div></div></div><p>
   Several predefined views, listed in <a class="xref" href="monitoring-stats.html#MONITORING-STATS-DYNAMIC-VIEWS-TABLE" title="Table 28.1. Dynamic Statistics Views">Table 28.1</a>, are available to show
   the current state of the system. There are also several other
   views, listed in <a class="xref" href="monitoring-stats.html#MONITORING-STATS-VIEWS-TABLE" title="Table 28.2. Collected Statistics Views">Table 28.2</a>, available to show the results
   of statistics collection.  Alternatively, one can
   build custom views using the underlying statistics functions, as discussed
   in <a class="xref" href="monitoring-stats.html#MONITORING-STATS-FUNCTIONS" title="28.2.3. Statistics Functions">Section 28.2.3</a>.
  </p><p>
   When using the statistics to monitor collected data, it is important
   to realize that the information does not update instantaneously.
   Each individual server process transmits new statistical counts to
   the collector just before going idle; so a query or transaction still in
   progress does not affect the displayed totals.  Also, the collector itself
   emits a new report at most once per <code class="varname">PGSTAT_STAT_INTERVAL</code>
   milliseconds (500 ms unless altered while building the server).  So the
   displayed information lags behind actual activity.  However, current-query
   information collected by <code class="varname">track_activities</code> is
   always up-to-date.
  </p><p>
   Another important point is that when a server process is asked to display
   any of these statistics, it first fetches the most recent report emitted by
   the collector process and then continues to use this snapshot for all
   statistical views and functions until the end of its current transaction.
   So the statistics will show static information as long as you continue the
   current transaction.  Similarly, information about the current queries of
   all sessions is collected when any such information is first requested
   within a transaction, and the same information will be displayed throughout
   the transaction.
   This is a feature, not a bug, because it allows you to perform several
   queries on the statistics and correlate the results without worrying that
   the numbers are changing underneath you.  But if you want to see new
   results with each query, be sure to do the queries outside any transaction
   block.  Alternatively, you can invoke
   <code class="function">pg_stat_clear_snapshot</code>(), which will discard the
   current transaction's statistics snapshot (if any).  The next use of
   statistical information will cause a new snapshot to be fetched.
  </p><p>
   A transaction can also see its own statistics (as yet untransmitted to the
   collector) in the views <code class="structname">pg_stat_xact_all_tables</code>,
   <code class="structname">pg_stat_xact_sys_tables</code>,
   <code class="structname">pg_stat_xact_user_tables</code>, and
   <code class="structname">pg_stat_xact_user_functions</code>.  These numbers do not act as
   stated above; instead they update continuously throughout the transaction.
  </p><div class="table" id="MONITORING-STATS-DYNAMIC-VIEWS-TABLE"><p class="title"><strong>Table 28.1. Dynamic Statistics Views</strong></p><div class="table-contents"><table class="table" summary="Dynamic Statistics Views" border="1"><colgroup><col /><col /></colgroup><thead><tr><th>View Name</th><th>Description</th></tr></thead><tbody><tr><td>
       <code class="structname">pg_stat_activity</code>
       <a id="id-1.6.15.7.6.6.2.2.1.1.2" class="indexterm"></a>
      </td><td>
       One row per server process, showing information related to
       the current activity of that process, such as state and current query.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-ACTIVITY-VIEW" title="Table 28.3. pg_stat_activity View">pg_stat_activity</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_replication</code><a id="id-1.6.15.7.6.6.2.2.2.1.2" class="indexterm"></a></td><td>One row per WAL sender process, showing statistics about
       replication to that sender's connected standby server.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-REPLICATION-VIEW" title="Table 28.5. pg_stat_replication View">pg_stat_replication</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_wal_receiver</code><a id="id-1.6.15.7.6.6.2.2.3.1.2" class="indexterm"></a></td><td>Only one row, showing statistics about the WAL receiver from
       that receiver's connected server.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-WAL-RECEIVER-VIEW" title="Table 28.6. pg_stat_wal_receiver View">pg_stat_wal_receiver</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_subscription</code><a id="id-1.6.15.7.6.6.2.2.4.1.2" class="indexterm"></a></td><td>At least one row per subscription, showing information about
       the subscription workers.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-SUBSCRIPTION" title="Table 28.7. pg_stat_subscription View">pg_stat_subscription</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_ssl</code><a id="id-1.6.15.7.6.6.2.2.5.1.2" class="indexterm"></a></td><td>One row per connection (regular and replication), showing information about
       SSL used on this connection.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-SSL-VIEW" title="Table 28.8. pg_stat_ssl View">pg_stat_ssl</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_progress_vacuum</code><a id="id-1.6.15.7.6.6.2.2.6.1.2" class="indexterm"></a></td><td>One row for each backend (including autovacuum worker processes) running
       <code class="command">VACUUM</code>, showing current progress.
       See <a class="xref" href="progress-reporting.html#VACUUM-PROGRESS-REPORTING" title="28.4.1. VACUUM Progress Reporting">Section 28.4.1</a>.
      </td></tr></tbody></table></div></div><br class="table-break" /><div class="table" id="MONITORING-STATS-VIEWS-TABLE"><p class="title"><strong>Table 28.2. Collected Statistics Views</strong></p><div class="table-contents"><table class="table" summary="Collected Statistics Views" border="1"><colgroup><col /><col /></colgroup><thead><tr><th>View Name</th><th>Description</th></tr></thead><tbody><tr><td><code class="structname">pg_stat_archiver</code><a id="id-1.6.15.7.6.7.2.2.1.1.2" class="indexterm"></a></td><td>One row only, showing statistics about the
       WAL archiver process's activity. See
       <a class="xref" href="monitoring-stats.html#PG-STAT-ARCHIVER-VIEW" title="Table 28.9. pg_stat_archiver View">pg_stat_archiver</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_bgwriter</code><a id="id-1.6.15.7.6.7.2.2.2.1.2" class="indexterm"></a></td><td>One row only, showing statistics about the
       background writer process's activity. See
       <a class="xref" href="monitoring-stats.html#PG-STAT-BGWRITER-VIEW" title="Table 28.10. pg_stat_bgwriter View">pg_stat_bgwriter</a> for details.
     </td></tr><tr><td><code class="structname">pg_stat_database</code><a id="id-1.6.15.7.6.7.2.2.3.1.2" class="indexterm"></a></td><td>One row per database, showing database-wide statistics. See
       <a class="xref" href="monitoring-stats.html#PG-STAT-DATABASE-VIEW" title="Table 28.11. pg_stat_database View">pg_stat_database</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_database_conflicts</code><a id="id-1.6.15.7.6.7.2.2.4.1.2" class="indexterm"></a></td><td>
       One row per database, showing database-wide statistics about
       query cancels due to conflict with recovery on standby servers.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-DATABASE-CONFLICTS-VIEW" title="Table 28.12. pg_stat_database_conflicts View">pg_stat_database_conflicts</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_all_tables</code><a id="id-1.6.15.7.6.7.2.2.5.1.2" class="indexterm"></a></td><td>
       One row for each table in the current database, showing statistics
       about accesses to that specific table.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-ALL-TABLES-VIEW" title="Table 28.13. pg_stat_all_tables View">pg_stat_all_tables</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_sys_tables</code><a id="id-1.6.15.7.6.7.2.2.6.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_stat_all_tables</code>, except that only
      system tables are shown.</td></tr><tr><td><code class="structname">pg_stat_user_tables</code><a id="id-1.6.15.7.6.7.2.2.7.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_stat_all_tables</code>, except that only user
      tables are shown.</td></tr><tr><td><code class="structname">pg_stat_xact_all_tables</code><a id="id-1.6.15.7.6.7.2.2.8.1.2" class="indexterm"></a></td><td>Similar to <code class="structname">pg_stat_all_tables</code>, but counts actions
      taken so far within the current transaction (which are <span class="emphasis"><em>not</em></span>
      yet included in <code class="structname">pg_stat_all_tables</code> and related views).
      The columns for numbers of live and dead rows and vacuum and
      analyze actions are not present in this view.</td></tr><tr><td><code class="structname">pg_stat_xact_sys_tables</code><a id="id-1.6.15.7.6.7.2.2.9.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_stat_xact_all_tables</code>, except that only
      system tables are shown.</td></tr><tr><td><code class="structname">pg_stat_xact_user_tables</code><a id="id-1.6.15.7.6.7.2.2.10.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_stat_xact_all_tables</code>, except that only
      user tables are shown.</td></tr><tr><td><code class="structname">pg_stat_all_indexes</code><a id="id-1.6.15.7.6.7.2.2.11.1.2" class="indexterm"></a></td><td>
       One row for each index in the current database, showing statistics
       about accesses to that specific index.
       See <a class="xref" href="monitoring-stats.html#PG-STAT-ALL-INDEXES-VIEW" title="Table 28.14. pg_stat_all_indexes View">pg_stat_all_indexes</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_sys_indexes</code><a id="id-1.6.15.7.6.7.2.2.12.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_stat_all_indexes</code>, except that only
      indexes on system tables are shown.</td></tr><tr><td><code class="structname">pg_stat_user_indexes</code><a id="id-1.6.15.7.6.7.2.2.13.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_stat_all_indexes</code>, except that only
      indexes on user tables are shown.</td></tr><tr><td><code class="structname">pg_statio_all_tables</code><a id="id-1.6.15.7.6.7.2.2.14.1.2" class="indexterm"></a></td><td>
       One row for each table in the current database, showing statistics
       about I/O on that specific table.
       See <a class="xref" href="monitoring-stats.html#PG-STATIO-ALL-TABLES-VIEW" title="Table 28.15. pg_statio_all_tables View">pg_statio_all_tables</a> for details.
      </td></tr><tr><td><code class="structname">pg_statio_sys_tables</code><a id="id-1.6.15.7.6.7.2.2.15.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_statio_all_tables</code>, except that only
      system tables are shown.</td></tr><tr><td><code class="structname">pg_statio_user_tables</code><a id="id-1.6.15.7.6.7.2.2.16.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_statio_all_tables</code>, except that only
      user tables are shown.</td></tr><tr><td><code class="structname">pg_statio_all_indexes</code><a id="id-1.6.15.7.6.7.2.2.17.1.2" class="indexterm"></a></td><td>
       One row for each index in the current database,
       showing statistics about I/O on that specific index.
       See <a class="xref" href="monitoring-stats.html#PG-STATIO-ALL-INDEXES-VIEW" title="Table 28.16. pg_statio_all_indexes View">pg_statio_all_indexes</a> for details.
      </td></tr><tr><td><code class="structname">pg_statio_sys_indexes</code><a id="id-1.6.15.7.6.7.2.2.18.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_statio_all_indexes</code>, except that only
      indexes on system tables are shown.</td></tr><tr><td><code class="structname">pg_statio_user_indexes</code><a id="id-1.6.15.7.6.7.2.2.19.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_statio_all_indexes</code>, except that only
      indexes on user tables are shown.</td></tr><tr><td><code class="structname">pg_statio_all_sequences</code><a id="id-1.6.15.7.6.7.2.2.20.1.2" class="indexterm"></a></td><td>
       One row for each sequence in the current database,
       showing statistics about I/O on that specific sequence.
       See <a class="xref" href="monitoring-stats.html#PG-STATIO-ALL-SEQUENCES-VIEW" title="Table 28.17. pg_statio_all_sequences View">pg_statio_all_sequences</a> for details.
     </td></tr><tr><td><code class="structname">pg_statio_sys_sequences</code><a id="id-1.6.15.7.6.7.2.2.21.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_statio_all_sequences</code>, except that only
      system sequences are shown.  (Presently, no system sequences are defined,
      so this view is always empty.)</td></tr><tr><td><code class="structname">pg_statio_user_sequences</code><a id="id-1.6.15.7.6.7.2.2.22.1.2" class="indexterm"></a></td><td>Same as <code class="structname">pg_statio_all_sequences</code>, except that only
      user sequences are shown.</td></tr><tr><td><code class="structname">pg_stat_user_functions</code><a id="id-1.6.15.7.6.7.2.2.23.1.2" class="indexterm"></a></td><td>
       One row for each tracked function, showing statistics
       about executions of that function. See
       <a class="xref" href="monitoring-stats.html#PG-STAT-USER-FUNCTIONS-VIEW" title="Table 28.18. pg_stat_user_functions View">pg_stat_user_functions</a> for details.
      </td></tr><tr><td><code class="structname">pg_stat_xact_user_functions</code><a id="id-1.6.15.7.6.7.2.2.24.1.2" class="indexterm"></a></td><td>Similar to <code class="structname">pg_stat_user_functions</code>, but counts only
      calls during the current transaction (which are <span class="emphasis"><em>not</em></span>
      yet included in <code class="structname">pg_stat_user_functions</code>).</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The per-index statistics are particularly useful to determine which
   indexes are being used and how effective they are.
  </p><p>
   The <code class="structname">pg_statio_</code> views are primarily useful to
   determine the effectiveness of the buffer cache.  When the number
   of actual disk reads is much smaller than the number of buffer
   hits, then the cache is satisfying most read requests without
   invoking a kernel call. However, these statistics do not give the
   entire story: due to the way in which <span class="productname">PostgreSQL</span>
   handles disk I/O, data that is not in the
   <span class="productname">PostgreSQL</span> buffer cache might still reside in the
   kernel's I/O cache, and might therefore still be fetched without
   requiring a physical read. Users interested in obtaining more
   detailed information on <span class="productname">PostgreSQL</span> I/O behavior are
   advised to use the <span class="productname">PostgreSQL</span> statistics collector
   in combination with operating system utilities that allow insight
   into the kernel's handling of I/O.
  </p><div class="table" id="PG-STAT-ACTIVITY-VIEW"><p class="title"><strong>Table 28.3. <code class="structname">pg_stat_activity</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_activity View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">datid</code></td><td><code class="type">oid</code></td><td>OID of the database this backend is connected to</td></tr><tr><td><code class="structfield">datname</code></td><td><code class="type">name</code></td><td>Name of the database this backend is connected to</td></tr><tr><td><code class="structfield">pid</code></td><td><code class="type">integer</code></td><td>Process ID of this backend</td></tr><tr><td><code class="structfield">usesysid</code></td><td><code class="type">oid</code></td><td>OID of the user logged into this backend</td></tr><tr><td><code class="structfield">usename</code></td><td><code class="type">name</code></td><td>Name of the user logged into this backend</td></tr><tr><td><code class="structfield">application_name</code></td><td><code class="type">text</code></td><td>Name of the application that is connected
      to this backend</td></tr><tr><td><code class="structfield">client_addr</code></td><td><code class="type">inet</code></td><td>IP address of the client connected to this backend.
      If this field is null, it indicates either that the client is
      connected via a Unix socket on the server machine or that this is an
      internal process such as autovacuum.
     </td></tr><tr><td><code class="structfield">client_hostname</code></td><td><code class="type">text</code></td><td>Host name of the connected client, as reported by a
      reverse DNS lookup of <code class="structfield">client_addr</code>. This field will
      only be non-null for IP connections, and only when <a class="xref" href="runtime-config-logging.html#GUC-LOG-HOSTNAME">log_hostname</a> is enabled.
     </td></tr><tr><td><code class="structfield">client_port</code></td><td><code class="type">integer</code></td><td>TCP port number that the client is using for communication
      with this backend, or <code class="literal">-1</code> if a Unix socket is used
     </td></tr><tr><td><code class="structfield">backend_start</code></td><td><code class="type">timestamp with time zone</code></td><td>Time when this process was started.  For client backends,
      this is the time the client connected to the server.
     </td></tr><tr><td><code class="structfield">xact_start</code></td><td><code class="type">timestamp with time zone</code></td><td>Time when this process' current transaction was started, or null
      if no transaction is active. If the current
      query is the first of its transaction, this column is equal to the
      <code class="structfield">query_start</code> column.
     </td></tr><tr><td><code class="structfield">query_start</code></td><td><code class="type">timestamp with time zone</code></td><td>Time when the currently active query was started, or if
      <code class="structfield">state</code> is not <code class="literal">active</code>, when the last query
      was started
     </td></tr><tr><td><code class="structfield">state_change</code></td><td><code class="type">timestamp with time zone</code></td><td>Time when the <code class="structfield">state</code> was last changed</td></tr><tr><td><code class="structfield">wait_event_type</code></td><td><code class="type">text</code></td><td>The type of event for which the backend is waiting, if any;
       otherwise NULL. Possible values are:
       <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal">LWLock</code>: The backend is waiting for a lightweight lock.
          Each such lock protects a particular data structure in shared memory.
          <code class="literal">wait_event</code> will contain a name identifying the purpose
          of the lightweight lock.  (Some locks have specific names; others
          are part of a group of locks each with a similar purpose.)
         </p></li><li class="listitem"><p>
          <code class="literal">Lock</code>: The backend is waiting for a heavyweight lock.
          Heavyweight locks, also known as lock manager locks or simply locks,
          primarily protect SQL-visible objects such as tables.  However,
          they are also used to ensure mutual exclusion for certain internal
          operations such as relation extension.  <code class="literal">wait_event</code> will
          identify the type of lock awaited.
         </p></li><li class="listitem"><p>
          <code class="literal">BufferPin</code>: The server process is waiting to access to
          a data buffer during a period when no other process can be
          examining that buffer.  Buffer pin waits can be protracted if
          another process holds an open cursor which last read data from the
          buffer in question.
         </p></li><li class="listitem"><p>
          <code class="literal">Activity</code>: The server process is idle.  This is used by
          system processes waiting for activity in their main processing loop.
          <code class="literal">wait_event</code> will identify the specific wait point.
         </p></li><li class="listitem"><p>
          <code class="literal">Extension</code>: The server process is waiting for activity
          in an extension module.  This category is useful for modules to
          track custom waiting points.
         </p></li><li class="listitem"><p>
          <code class="literal">Client</code>: The server process is waiting for some activity
          on a socket from user applications, and that the server expects
          something to happen that is independent from its internal processes.
          <code class="literal">wait_event</code> will identify the specific wait point.
         </p></li><li class="listitem"><p>
          <code class="literal">IPC</code>: The server process is waiting for some activity
          from another process in the server.  <code class="literal">wait_event</code> will
          identify the specific wait point.
         </p></li><li class="listitem"><p>
          <code class="literal">Timeout</code>: The server process is waiting for a timeout
          to expire.  <code class="literal">wait_event</code> will identify the specific wait
          point.
         </p></li><li class="listitem"><p>
          <code class="literal">IO</code>: The server process is waiting for a IO to complete.
          <code class="literal">wait_event</code> will identify the specific wait point.
         </p></li></ul></div>
      </td></tr><tr><td><code class="structfield">wait_event</code></td><td><code class="type">text</code></td><td>Wait event name if backend is currently waiting, otherwise NULL.
     See <a class="xref" href="monitoring-stats.html#WAIT-EVENT-TABLE" title="Table 28.4. wait_event Description">Table 28.4</a> for details.
     </td></tr><tr><td><code class="structfield">state</code></td><td><code class="type">text</code></td><td>Current overall state of this backend.
       Possible values are:
       <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
           <code class="literal">active</code>: The backend is executing a query.
          </p></li><li class="listitem"><p>
           <code class="literal">idle</code>: The backend is waiting for a new client command.
          </p></li><li class="listitem"><p>
           <code class="literal">idle in transaction</code>: The backend is in a transaction,
           but is not currently executing a query.
          </p></li><li class="listitem"><p>
           <code class="literal">idle in transaction (aborted)</code>: This state is similar to
           <code class="literal">idle in transaction</code>, except one of the statements in
           the transaction caused an error.
          </p></li><li class="listitem"><p>
           <code class="literal">fastpath function call</code>: The backend is executing a
           fast-path function.
          </p></li><li class="listitem"><p>
           <code class="literal">disabled</code>: This state is reported if <a class="xref" href="runtime-config-statistics.html#GUC-TRACK-ACTIVITIES">track_activities</a> is disabled in this backend.
          </p></li></ul></div>
     </td></tr><tr><td><code class="structfield">backend_xid</code></td><td><code class="type">xid</code></td><td>Top-level transaction identifier of this backend, if any.</td></tr><tr><td><code class="structfield">backend_xmin</code></td><td><code class="type">xid</code></td><td>The current backend's <code class="literal">xmin</code> horizon.</td></tr><tr><td><code class="structfield">query</code></td><td><code class="type">text</code></td><td>Text of this backend's most recent query. If
      <code class="structfield">state</code> is <code class="literal">active</code> this field shows the
      currently executing query. In all other states, it shows the last query
      that was executed. By default the query text is truncated at 1024
      characters; this value can be changed via the parameter
      <a class="xref" href="runtime-config-statistics.html#GUC-TRACK-ACTIVITY-QUERY-SIZE">track_activity_query_size</a>.
     </td></tr><tr><td><code class="structfield">backend_type</code></td><td><code class="type">text</code></td><td>Type of current backend. Possible types are
      <code class="literal">autovacuum launcher</code>, <code class="literal">autovacuum worker</code>,
      <code class="literal">logical replication launcher</code>,
      <code class="literal">logical replication worker</code>,
      <code class="literal">parallel worker</code>, <code class="literal">background writer</code>,
      <code class="literal">client backend</code>, <code class="literal">checkpointer</code>,
      <code class="literal">startup</code>, <code class="literal">walreceiver</code>,
      <code class="literal">walsender</code> and <code class="literal">walwriter</code>.
      In addition, background workers registered by extensions may have
      additional types.
     </td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_activity</code> view will have one row
   per server process, showing information related to
   the current activity of that process.
  </p><div class="note"><h3 class="title">Note</h3><p>
    The <code class="structfield">wait_event</code> and <code class="structfield">state</code> columns are
    independent.  If a backend is in the <code class="literal">active</code> state,
    it may or may not be <code class="literal">waiting</code> on some event.  If the state
    is <code class="literal">active</code> and <code class="structfield">wait_event</code> is non-null, it
    means that a query is being executed, but is being blocked somewhere
    in the system.
   </p></div><div class="table" id="WAIT-EVENT-TABLE"><p class="title"><strong>Table 28.4. <code class="structname">wait_event</code> Description</strong></p><div class="table-contents"><table class="table" summary="wait_event Description" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Wait Event Type</th><th>Wait Event Name</th><th>Description</th></tr></thead><tbody><tr><td rowspan="65"><code class="literal">LWLock</code></td><td><code class="literal">ShmemIndexLock</code></td><td>Waiting to find or allocate space in shared memory.</td></tr><tr><td><code class="literal">OidGenLock</code></td><td>Waiting to allocate or assign an OID.</td></tr><tr><td><code class="literal">XidGenLock</code></td><td>Waiting to allocate or assign a transaction id.</td></tr><tr><td><code class="literal">ProcArrayLock</code></td><td>Waiting to get a snapshot or clearing a transaction id at
         transaction end.</td></tr><tr><td><code class="literal">SInvalReadLock</code></td><td>Waiting to retrieve or remove messages from shared invalidation
         queue.</td></tr><tr><td><code class="literal">SInvalWriteLock</code></td><td>Waiting to add a message in shared invalidation queue.</td></tr><tr><td><code class="literal">WALBufMappingLock</code></td><td>Waiting to replace a page in WAL buffers.</td></tr><tr><td><code class="literal">WALWriteLock</code></td><td>Waiting for WAL buffers to be written to disk.</td></tr><tr><td><code class="literal">ControlFileLock</code></td><td>Waiting to read or update the control file or creation of a
         new WAL file.</td></tr><tr><td><code class="literal">CheckpointLock</code></td><td>Waiting to perform checkpoint.</td></tr><tr><td><code class="literal">CLogControlLock</code></td><td>Waiting to read or update transaction status.</td></tr><tr><td><code class="literal">SubtransControlLock</code></td><td>Waiting to read or update sub-transaction information.</td></tr><tr><td><code class="literal">MultiXactGenLock</code></td><td>Waiting to read or update shared multixact state.</td></tr><tr><td><code class="literal">MultiXactOffsetControlLock</code></td><td>Waiting to read or update multixact offset mappings.</td></tr><tr><td><code class="literal">MultiXactMemberControlLock</code></td><td>Waiting to read or update multixact member mappings.</td></tr><tr><td><code class="literal">RelCacheInitLock</code></td><td>Waiting to read or write relation cache initialization
         file.</td></tr><tr><td><code class="literal">CheckpointerCommLock</code></td><td>Waiting to manage fsync requests.</td></tr><tr><td><code class="literal">TwoPhaseStateLock</code></td><td>Waiting to read or update the state of prepared transactions.</td></tr><tr><td><code class="literal">TablespaceCreateLock</code></td><td>Waiting to create or drop the tablespace.</td></tr><tr><td><code class="literal">BtreeVacuumLock</code></td><td>Waiting to read or update vacuum-related information for a
          B-tree index.</td></tr><tr><td><code class="literal">AddinShmemInitLock</code></td><td>Waiting to manage space allocation in shared memory.</td></tr><tr><td><code class="literal">AutovacuumLock</code></td><td>Autovacuum worker or launcher waiting to update or
         read the current state of autovacuum workers.</td></tr><tr><td><code class="literal">AutovacuumScheduleLock</code></td><td>Waiting to ensure that the table it has selected for a vacuum
         still needs vacuuming.
         </td></tr><tr><td><code class="literal">SyncScanLock</code></td><td>Waiting to get the start location of a scan on a table for
         synchronized scans.</td></tr><tr><td><code class="literal">RelationMappingLock</code></td><td>Waiting to update the relation map file used to store catalog
         to filenode mapping.
         </td></tr><tr><td><code class="literal">AsyncCtlLock</code></td><td>Waiting to read or update shared notification state.</td></tr><tr><td><code class="literal">AsyncQueueLock</code></td><td>Waiting to read or update notification messages.</td></tr><tr><td><code class="literal">SerializableXactHashLock</code></td><td>Waiting to retrieve or store information about serializable
         transactions.</td></tr><tr><td><code class="literal">SerializableFinishedListLock</code></td><td>Waiting to access the list of finished serializable
         transactions.</td></tr><tr><td><code class="literal">SerializablePredicateLockListLock</code></td><td>Waiting to perform an operation on a list of locks held by
         serializable transactions.</td></tr><tr><td><code class="literal">OldSerXidLock</code></td><td>Waiting to read or record conflicting serializable
         transactions.</td></tr><tr><td><code class="literal">SyncRepLock</code></td><td>Waiting to read or update information about synchronous
         replicas.</td></tr><tr><td><code class="literal">BackgroundWorkerLock</code></td><td>Waiting to read or update background worker state.</td></tr><tr><td><code class="literal">DynamicSharedMemoryControlLock</code></td><td>Waiting to read or update dynamic shared memory state.</td></tr><tr><td><code class="literal">AutoFileLock</code></td><td>Waiting to update the <code class="filename">postgresql.auto.conf</code> file.</td></tr><tr><td><code class="literal">ReplicationSlotAllocationLock</code></td><td>Waiting to allocate or free a replication slot.</td></tr><tr><td><code class="literal">ReplicationSlotControlLock</code></td><td>Waiting to read or update replication slot state.</td></tr><tr><td><code class="literal">CommitTsControlLock</code></td><td>Waiting to read or update transaction commit timestamps.</td></tr><tr><td><code class="literal">CommitTsLock</code></td><td>Waiting to read or update the last value set for the
         transaction timestamp.</td></tr><tr><td><code class="literal">ReplicationOriginLock</code></td><td>Waiting to setup, drop or use replication origin.</td></tr><tr><td><code class="literal">MultiXactTruncationLock</code></td><td>Waiting to read or truncate multixact information.</td></tr><tr><td><code class="literal">OldSnapshotTimeMapLock</code></td><td>Waiting to read or update old snapshot control information.</td></tr><tr><td><code class="literal">BackendRandomLock</code></td><td>Waiting to generate a random number.</td></tr><tr><td><code class="literal">LogicalRepWorkerLock</code></td><td>Waiting for action on logical replication worker to finish.</td></tr><tr><td><code class="literal">CLogTruncationLock</code></td><td>Waiting to execute <code class="function">txid_status</code> or update
         the oldest transaction id available to it.</td></tr><tr><td><code class="literal">clog</code></td><td>Waiting for I/O on a clog (transaction status) buffer.</td></tr><tr><td><code class="literal">commit_timestamp</code></td><td>Waiting for I/O on commit timestamp buffer.</td></tr><tr><td><code class="literal">subtrans</code></td><td>Waiting for I/O a subtransaction buffer.</td></tr><tr><td><code class="literal">multixact_offset</code></td><td>Waiting for I/O on a multixact offset buffer.</td></tr><tr><td><code class="literal">multixact_member</code></td><td>Waiting for I/O on a multixact_member buffer.</td></tr><tr><td><code class="literal">async</code></td><td>Waiting for I/O on an async (notify) buffer.</td></tr><tr><td><code class="literal">oldserxid</code></td><td>Waiting for I/O on an oldserxid buffer.</td></tr><tr><td><code class="literal">wal_insert</code></td><td>Waiting to insert WAL into a memory buffer.</td></tr><tr><td><code class="literal">buffer_content</code></td><td>Waiting to read or write a data page in memory.</td></tr><tr><td><code class="literal">buffer_io</code></td><td>Waiting for I/O on a data page.</td></tr><tr><td><code class="literal">replication_origin</code></td><td>Waiting to read or update the replication progress.</td></tr><tr><td><code class="literal">replication_slot_io</code></td><td>Waiting for I/O on a replication slot.</td></tr><tr><td><code class="literal">proc</code></td><td>Waiting to read or update the fast-path lock information.</td></tr><tr><td><code class="literal">buffer_mapping</code></td><td>Waiting to associate a data block with a buffer in the buffer
         pool.</td></tr><tr><td><code class="literal">lock_manager</code></td><td>Waiting to add or examine locks for backends, or waiting to
         join or exit a locking group (used by parallel query).</td></tr><tr><td><code class="literal">predicate_lock_manager</code></td><td>Waiting to add or examine predicate lock information.</td></tr><tr><td><code class="literal">parallel_query_dsa</code></td><td>Waiting for parallel query dynamic shared memory allocation lock.</td></tr><tr><td><code class="literal">tbm</code></td><td>Waiting for TBM shared iterator lock.</td></tr><tr><td><code class="literal">parallel_append</code></td><td>Waiting to choose the next subplan during Parallel Append plan
         execution.</td></tr><tr><td><code class="literal">parallel_hash_join</code></td><td>Waiting to allocate or exchange a chunk of memory or update
         counters during Parallel Hash plan execution.</td></tr><tr><td rowspan="10"><code class="literal">Lock</code></td><td><code class="literal">relation</code></td><td>Waiting to acquire a lock on a relation.</td></tr><tr><td><code class="literal">extend</code></td><td>Waiting to extend a relation.</td></tr><tr><td><code class="literal">page</code></td><td>Waiting to acquire a lock on page of a relation.</td></tr><tr><td><code class="literal">tuple</code></td><td>Waiting to acquire a lock on a tuple.</td></tr><tr><td><code class="literal">transactionid</code></td><td>Waiting for a transaction to finish.</td></tr><tr><td><code class="literal">virtualxid</code></td><td>Waiting to acquire a virtual xid lock.</td></tr><tr><td><code class="literal">speculative token</code></td><td>Waiting to acquire a speculative insertion lock.</td></tr><tr><td><code class="literal">object</code></td><td>Waiting to acquire a lock on a non-relation database object.</td></tr><tr><td><code class="literal">userlock</code></td><td>Waiting to acquire a user lock.</td></tr><tr><td><code class="literal">advisory</code></td><td>Waiting to acquire an advisory user lock.</td></tr><tr><td><code class="literal">BufferPin</code></td><td><code class="literal">BufferPin</code></td><td>Waiting to acquire a pin on a buffer.</td></tr><tr><td rowspan="14"><code class="literal">Activity</code></td><td><code class="literal">ArchiverMain</code></td><td>Waiting in main loop of the archiver process.</td></tr><tr><td><code class="literal">AutoVacuumMain</code></td><td>Waiting in main loop of autovacuum launcher process.</td></tr><tr><td><code class="literal">BgWriterHibernate</code></td><td>Waiting in background writer process, hibernating.</td></tr><tr><td><code class="literal">BgWriterMain</code></td><td>Waiting in main loop of background writer process background worker.</td></tr><tr><td><code class="literal">CheckpointerMain</code></td><td>Waiting in main loop of checkpointer process.</td></tr><tr><td><code class="literal">LogicalApplyMain</code></td><td>Waiting in main loop of logical apply process.</td></tr><tr><td><code class="literal">LogicalLauncherMain</code></td><td>Waiting in main loop of logical launcher process.</td></tr><tr><td><code class="literal">PgStatMain</code></td><td>Waiting in main loop of the statistics collector process.</td></tr><tr><td><code class="literal">RecoveryWalAll</code></td><td>Waiting for WAL from any kind of source (local, archive or stream) at recovery.</td></tr><tr><td><code class="literal">RecoveryWalStream</code></td><td>Waiting for WAL from a stream at recovery.</td></tr><tr><td><code class="literal">SysLoggerMain</code></td><td>Waiting in main loop of syslogger process.</td></tr><tr><td><code class="literal">WalReceiverMain</code></td><td>Waiting in main loop of WAL receiver process.</td></tr><tr><td><code class="literal">WalSenderMain</code></td><td>Waiting in main loop of WAL sender process.</td></tr><tr><td><code class="literal">WalWriterMain</code></td><td>Waiting in main loop of WAL writer process.</td></tr><tr><td rowspan="8"><code class="literal">Client</code></td><td><code class="literal">ClientRead</code></td><td>Waiting to read data from the client.</td></tr><tr><td><code class="literal">ClientWrite</code></td><td>Waiting to write data to the client.</td></tr><tr><td><code class="literal">LibPQWalReceiverConnect</code></td><td>Waiting in WAL receiver to establish connection to remote server.</td></tr><tr><td><code class="literal">LibPQWalReceiverReceive</code></td><td>Waiting in WAL receiver to receive data from remote server.</td></tr><tr><td><code class="literal">SSLOpenServer</code></td><td>Waiting for SSL while attempting connection.</td></tr><tr><td><code class="literal">WalReceiverWaitStart</code></td><td>Waiting for startup process to send initial data for streaming replication.</td></tr><tr><td><code class="literal">WalSenderWaitForWAL</code></td><td>Waiting for WAL to be flushed in WAL sender process.</td></tr><tr><td><code class="literal">WalSenderWriteData</code></td><td>Waiting for any activity when processing replies from WAL receiver in WAL sender process.</td></tr><tr><td><code class="literal">Extension</code></td><td><code class="literal">Extension</code></td><td>Waiting in an extension.</td></tr><tr><td rowspan="34"><code class="literal">IPC</code></td><td><code class="literal">BgWorkerShutdown</code></td><td>Waiting for background worker to shut down.</td></tr><tr><td><code class="literal">BgWorkerStartup</code></td><td>Waiting for background worker to start up.</td></tr><tr><td><code class="literal">BtreePage</code></td><td>Waiting for the page number needed to continue a parallel B-tree scan to become available.</td></tr><tr><td><code class="literal">ClogGroupUpdate</code></td><td>Waiting for group leader to update transaction status at transaction end.</td></tr><tr><td><code class="literal">ExecuteGather</code></td><td>Waiting for activity from child process when executing <code class="literal">Gather</code> node.</td></tr><tr><td><code class="literal">Hash/Batch/Allocating</code></td><td>Waiting for an elected Parallel Hash participant to allocate a hash table.</td></tr><tr><td><code class="literal">Hash/Batch/Electing</code></td><td>Electing a Parallel Hash participant to allocate a hash table.</td></tr><tr><td><code class="literal">Hash/Batch/Loading</code></td><td>Waiting for other Parallel Hash participants to finish loading a hash table.</td></tr><tr><td><code class="literal">Hash/Build/Allocating</code></td><td>Waiting for an elected Parallel Hash participant to allocate the initial hash table.</td></tr><tr><td><code class="literal">Hash/Build/Electing</code></td><td>Electing a Parallel Hash participant to allocate the initial hash table.</td></tr><tr><td><code class="literal">Hash/Build/HashingInner</code></td><td>Waiting for other Parallel Hash participants to finish hashing the inner relation.</td></tr><tr><td><code class="literal">Hash/Build/HashingOuter</code></td><td>Waiting for other Parallel Hash participants to finish partitioning the outer relation.</td></tr><tr><td><code class="literal">Hash/GrowBatches/Allocating</code></td><td>Waiting for an elected Parallel Hash participant to allocate more batches.</td></tr><tr><td><code class="literal">Hash/GrowBatches/Deciding</code></td><td>Electing a Parallel Hash participant to decide on future batch growth.</td></tr><tr><td><code class="literal">Hash/GrowBatches/Electing</code></td><td>Electing a Parallel Hash participant to allocate more batches.</td></tr><tr><td><code class="literal">Hash/GrowBatches/Finishing</code></td><td>Waiting for an elected Parallel Hash participant to decide on future batch growth.</td></tr><tr><td><code class="literal">Hash/GrowBatches/Repartitioning</code></td><td>Waiting for other Parallel Hash participants to finishing repartitioning.</td></tr><tr><td><code class="literal">Hash/GrowBuckets/Allocating</code></td><td>Waiting for an elected Parallel Hash participant to finish allocating more buckets.</td></tr><tr><td><code class="literal">Hash/GrowBuckets/Electing</code></td><td>Electing a Parallel Hash participant to allocate more buckets.</td></tr><tr><td><code class="literal">Hash/GrowBuckets/Reinserting</code></td><td>Waiting for other Parallel Hash participants to finish inserting tuples into new buckets.</td></tr><tr><td><code class="literal">LogicalSyncData</code></td><td>Waiting for logical replication remote server to send data for initial table synchronization.</td></tr><tr><td><code class="literal">LogicalSyncStateChange</code></td><td>Waiting for logical replication remote server to change state.</td></tr><tr><td><code class="literal">MessageQueueInternal</code></td><td>Waiting for other process to be attached in shared message queue.</td></tr><tr><td><code class="literal">MessageQueuePutMessage</code></td><td>Waiting to write a protocol message to a shared message queue.</td></tr><tr><td><code class="literal">MessageQueueReceive</code></td><td>Waiting to receive bytes from a shared message queue.</td></tr><tr><td><code class="literal">MessageQueueSend</code></td><td>Waiting to send bytes to a shared message queue.</td></tr><tr><td><code class="literal">ParallelBitmapScan</code></td><td>Waiting for parallel bitmap scan to become initialized.</td></tr><tr><td><code class="literal">ParallelCreateIndexScan</code></td><td>Waiting for parallel <code class="command">CREATE INDEX</code> workers to finish heap scan.</td></tr><tr><td><code class="literal">ParallelFinish</code></td><td>Waiting for parallel workers to finish computing.</td></tr><tr><td><code class="literal">ProcArrayGroupUpdate</code></td><td>Waiting for group leader to clear transaction id at transaction end.</td></tr><tr><td><code class="literal">ReplicationOriginDrop</code></td><td>Waiting for a replication origin to become inactive to be dropped.</td></tr><tr><td><code class="literal">ReplicationSlotDrop</code></td><td>Waiting for a replication slot to become inactive to be dropped.</td></tr><tr><td><code class="literal">SafeSnapshot</code></td><td>Waiting for a snapshot for a <code class="literal">READ ONLY DEFERRABLE</code> transaction.</td></tr><tr><td><code class="literal">SyncRep</code></td><td>Waiting for confirmation from remote server during synchronous replication.</td></tr><tr><td rowspan="3"><code class="literal">Timeout</code></td><td><code class="literal">BaseBackupThrottle</code></td><td>Waiting during base backup when throttling activity.</td></tr><tr><td><code class="literal">PgSleep</code></td><td>Waiting in process that called <code class="function">pg_sleep</code>.</td></tr><tr><td><code class="literal">RecoveryApplyDelay</code></td><td>Waiting to apply WAL at recovery because it is delayed.</td></tr><tr><td rowspan="66"><code class="literal">IO</code></td><td><code class="literal">BufFileRead</code></td><td>Waiting for a read from a buffered file.</td></tr><tr><td><code class="literal">BufFileWrite</code></td><td>Waiting for a write to a buffered file.</td></tr><tr><td><code class="literal">ControlFileRead</code></td><td>Waiting for a read from the control file.</td></tr><tr><td><code class="literal">ControlFileSync</code></td><td>Waiting for the control file to reach stable storage.</td></tr><tr><td><code class="literal">ControlFileSyncUpdate</code></td><td>Waiting for an update to the control file to reach stable storage.</td></tr><tr><td><code class="literal">ControlFileWrite</code></td><td>Waiting for a write to the control file.</td></tr><tr><td><code class="literal">ControlFileWriteUpdate</code></td><td>Waiting for a write to update the control file.</td></tr><tr><td><code class="literal">CopyFileRead</code></td><td>Waiting for a read during a file copy operation.</td></tr><tr><td><code class="literal">CopyFileWrite</code></td><td>Waiting for a write during a file copy operation.</td></tr><tr><td><code class="literal">DataFileExtend</code></td><td>Waiting for a relation data file to be extended.</td></tr><tr><td><code class="literal">DataFileFlush</code></td><td>Waiting for a relation data file to reach stable storage.</td></tr><tr><td><code class="literal">DataFileImmediateSync</code></td><td>Waiting for an immediate synchronization of a relation data file to stable storage.</td></tr><tr><td><code class="literal">DataFilePrefetch</code></td><td>Waiting for an asynchronous prefetch from a relation data file.</td></tr><tr><td><code class="literal">DataFileRead</code></td><td>Waiting for a read from a relation data file.</td></tr><tr><td><code class="literal">DataFileSync</code></td><td>Waiting for changes to a relation data file to reach stable storage.</td></tr><tr><td><code class="literal">DataFileTruncate</code></td><td>Waiting for a relation data file to be truncated.</td></tr><tr><td><code class="literal">DataFileWrite</code></td><td>Waiting for a write to a relation data file.</td></tr><tr><td><code class="literal">DSMFillZeroWrite</code></td><td>Waiting to write zero bytes to a dynamic shared memory backing file.</td></tr><tr><td><code class="literal">LockFileAddToDataDirRead</code></td><td>Waiting for a read while adding a line to the data directory lock file.</td></tr><tr><td><code class="literal">LockFileAddToDataDirSync</code></td><td>Waiting for data to reach stable storage while adding a line to the data directory lock file.</td></tr><tr><td><code class="literal">LockFileAddToDataDirWrite</code></td><td>Waiting for a write while adding a line to the data directory lock file.</td></tr><tr><td><code class="literal">LockFileCreateRead</code></td><td>Waiting to read while creating the data directory lock file.</td></tr><tr><td><code class="literal">LockFileCreateSync</code></td><td>Waiting for data to reach stable storage while creating the data directory lock file.</td></tr><tr><td><code class="literal">LockFileCreateWrite</code></td><td>Waiting for a write while creating the data directory lock file.</td></tr><tr><td><code class="literal">LockFileReCheckDataDirRead</code></td><td>Waiting for a read during recheck of the data directory lock file.</td></tr><tr><td><code class="literal">LogicalRewriteCheckpointSync</code></td><td>Waiting for logical rewrite mappings to reach stable storage during a checkpoint.</td></tr><tr><td><code class="literal">LogicalRewriteMappingSync</code></td><td>Waiting for mapping data to reach stable storage during a logical rewrite.</td></tr><tr><td><code class="literal">LogicalRewriteMappingWrite</code></td><td>Waiting for a write of mapping data during a logical rewrite.</td></tr><tr><td><code class="literal">LogicalRewriteSync</code></td><td>Waiting for logical rewrite mappings to reach stable storage.</td></tr><tr><td><code class="literal">LogicalRewriteWrite</code></td><td>Waiting for a write of logical rewrite mappings.</td></tr><tr><td><code class="literal">RelationMapRead</code></td><td>Waiting for a read of the relation map file.</td></tr><tr><td><code class="literal">RelationMapSync</code></td><td>Waiting for the relation map file to reach stable storage.</td></tr><tr><td><code class="literal">RelationMapWrite</code></td><td>Waiting for a write to the relation map file.</td></tr><tr><td><code class="literal">ReorderBufferRead</code></td><td>Waiting for a read during reorder buffer management.</td></tr><tr><td><code class="literal">ReorderBufferWrite</code></td><td>Waiting for a write during reorder buffer management.</td></tr><tr><td><code class="literal">ReorderLogicalMappingRead</code></td><td>Waiting for a read of a logical mapping during reorder buffer management.</td></tr><tr><td><code class="literal">ReplicationSlotRead</code></td><td>Waiting for a read from a replication slot control file.</td></tr><tr><td><code class="literal">ReplicationSlotRestoreSync</code></td><td>Waiting for a replication slot control file to reach stable storage while restoring it to memory.</td></tr><tr><td><code class="literal">ReplicationSlotSync</code></td><td>Waiting for a replication slot control file to reach stable storage.</td></tr><tr><td><code class="literal">ReplicationSlotWrite</code></td><td>Waiting for a write to a replication slot control file.</td></tr><tr><td><code class="literal">SLRUFlushSync</code></td><td>Waiting for SLRU data to reach stable storage during a checkpoint or database shutdown.</td></tr><tr><td><code class="literal">SLRURead</code></td><td>Waiting for a read of an SLRU page.</td></tr><tr><td><code class="literal">SLRUSync</code></td><td>Waiting for SLRU data to reach stable storage following a page write.</td></tr><tr><td><code class="literal">SLRUWrite</code></td><td>Waiting for a write of an SLRU page.</td></tr><tr><td><code class="literal">SnapbuildRead</code></td><td>Waiting for a read of a serialized historical catalog snapshot.</td></tr><tr><td><code class="literal">SnapbuildSync</code></td><td>Waiting for a serialized historical catalog snapshot to reach stable storage.</td></tr><tr><td><code class="literal">SnapbuildWrite</code></td><td>Waiting for a write of a serialized historical catalog snapshot.</td></tr><tr><td><code class="literal">TimelineHistoryFileSync</code></td><td>Waiting for a timeline history file received via streaming replication to reach stable storage.</td></tr><tr><td><code class="literal">TimelineHistoryFileWrite</code></td><td>Waiting for a write of a timeline history file received via streaming replication.</td></tr><tr><td><code class="literal">TimelineHistoryRead</code></td><td>Waiting for a read of a timeline history file.</td></tr><tr><td><code class="literal">TimelineHistorySync</code></td><td>Waiting for a newly created timeline history file to reach stable storage.</td></tr><tr><td><code class="literal">TimelineHistoryWrite</code></td><td>Waiting for a write of a newly created timeline history file.</td></tr><tr><td><code class="literal">TwophaseFileRead</code></td><td>Waiting for a read of a two phase state file.</td></tr><tr><td><code class="literal">TwophaseFileSync</code></td><td>Waiting for a two phase state file to reach stable storage.</td></tr><tr><td><code class="literal">TwophaseFileWrite</code></td><td>Waiting for a write of a two phase state file.</td></tr><tr><td><code class="literal">WALBootstrapSync</code></td><td>Waiting for WAL to reach stable storage during bootstrapping.</td></tr><tr><td><code class="literal">WALBootstrapWrite</code></td><td>Waiting for a write of a WAL page during bootstrapping.</td></tr><tr><td><code class="literal">WALCopyRead</code></td><td>Waiting for a read when creating a new WAL segment by copying an existing one.</td></tr><tr><td><code class="literal">WALCopySync</code></td><td>Waiting a new WAL segment created by copying an existing one to reach stable storage.</td></tr><tr><td><code class="literal">WALCopyWrite</code></td><td>Waiting for a write when creating a new WAL segment by copying an existing one.</td></tr><tr><td><code class="literal">WALInitSync</code></td><td>Waiting for a newly initialized WAL file to reach stable storage.</td></tr><tr><td><code class="literal">WALInitWrite</code></td><td>Waiting for a write while initializing a new WAL file.</td></tr><tr><td><code class="literal">WALRead</code></td><td>Waiting for a read from a WAL file.</td></tr><tr><td><code class="literal">WALSenderTimelineHistoryRead</code></td><td>Waiting for a read from a timeline history file during walsender timeline command.</td></tr><tr><td><code class="literal">WALSyncMethodAssign</code></td><td>Waiting for data to reach stable storage while assigning WAL sync method.</td></tr><tr><td><code class="literal">WALWrite</code></td><td>Waiting for a write to a WAL file.</td></tr></tbody></table></div></div><br class="table-break" /><div class="note"><h3 class="title">Note</h3><p>
     For tranches registered by extensions, the name is specified by extension
     and this will be displayed as <code class="structfield">wait_event</code>.  It is quite
     possible that user has registered the tranche in one of the backends (by
     having allocation in dynamic shared memory) in which case other backends
     won't have that information, so we display <code class="literal">extension</code> for such
     cases.
    </p></div><p>
     Here is an example of how wait events can be viewed

</p><pre class="programlisting">
SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL;
 pid  | wait_event_type |  wait_event
------+-----------------+---------------
 2540 | Lock            | relation
 6644 | LWLock          | ProcArrayLock
(2 rows)
</pre><p>
   </p><div class="table" id="PG-STAT-REPLICATION-VIEW"><p class="title"><strong>Table 28.5. <code class="structname">pg_stat_replication</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_replication View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">pid</code></td><td><code class="type">integer</code></td><td>Process ID of a WAL sender process</td></tr><tr><td><code class="structfield">usesysid</code></td><td><code class="type">oid</code></td><td>OID of the user logged into this WAL sender process</td></tr><tr><td><code class="structfield">usename</code></td><td><code class="type">name</code></td><td>Name of the user logged into this WAL sender process</td></tr><tr><td><code class="structfield">application_name</code></td><td><code class="type">text</code></td><td>Name of the application that is connected
      to this WAL sender</td></tr><tr><td><code class="structfield">client_addr</code></td><td><code class="type">inet</code></td><td>IP address of the client connected to this WAL sender.
      If this field is null, it indicates that the client is
      connected via a Unix socket on the server machine.
     </td></tr><tr><td><code class="structfield">client_hostname</code></td><td><code class="type">text</code></td><td>Host name of the connected client, as reported by a
      reverse DNS lookup of <code class="structfield">client_addr</code>. This field will
      only be non-null for IP connections, and only when <a class="xref" href="runtime-config-logging.html#GUC-LOG-HOSTNAME">log_hostname</a> is enabled.
     </td></tr><tr><td><code class="structfield">client_port</code></td><td><code class="type">integer</code></td><td>TCP port number that the client is using for communication
      with this WAL sender, or <code class="literal">-1</code> if a Unix socket is used
     </td></tr><tr><td><code class="structfield">backend_start</code></td><td><code class="type">timestamp with time zone</code></td><td>Time when this process was started, i.e., when the
      client connected to this WAL sender
     </td></tr><tr><td><code class="structfield">backend_xmin</code></td><td><code class="type">xid</code></td><td>This standby's <code class="literal">xmin</code> horizon reported
     by <a class="xref" href="runtime-config-replication.html#GUC-HOT-STANDBY-FEEDBACK">hot_standby_feedback</a>.</td></tr><tr><td><code class="structfield">state</code></td><td><code class="type">text</code></td><td>Current WAL sender state.
       Possible values are:
       <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
           <code class="literal">startup</code>: This WAL sender is starting up.
          </p></li><li class="listitem"><p>
           <code class="literal">catchup</code>: This WAL sender's connected standby is
           catching up with the primary.
          </p></li><li class="listitem"><p>
           <code class="literal">streaming</code>: This WAL sender is streaming changes
           after its connected standby server has caught up with the primary.
          </p></li><li class="listitem"><p>
           <code class="literal">backup</code>: This WAL sender is sending a backup.
          </p></li><li class="listitem"><p>
           <code class="literal">stopping</code>: This WAL sender is stopping.
          </p></li></ul></div>
     </td></tr><tr><td><code class="structfield">sent_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location sent on this connection</td></tr><tr><td><code class="structfield">write_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location written to disk by this standby
      server</td></tr><tr><td><code class="structfield">flush_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location flushed to disk by this standby
      server</td></tr><tr><td><code class="structfield">replay_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location replayed into the database on this
      standby server</td></tr><tr><td><code class="structfield">write_lag</code></td><td><code class="type">interval</code></td><td>Time elapsed between flushing recent WAL locally and receiving
      notification that this standby server has written it (but not yet
      flushed it or applied it).  This can be used to gauge the delay that
      <code class="literal">synchronous_commit</code> level
      <code class="literal">remote_write</code> incurred while committing if this
      server was configured as a synchronous standby.</td></tr><tr><td><code class="structfield">flush_lag</code></td><td><code class="type">interval</code></td><td>Time elapsed between flushing recent WAL locally and receiving
      notification that this standby server has written and flushed it
      (but not yet applied it).  This can be used to gauge the delay that
      <code class="literal">synchronous_commit</code> level
      <code class="literal">on</code> incurred while committing if this
      server was configured as a synchronous standby.</td></tr><tr><td><code class="structfield">replay_lag</code></td><td><code class="type">interval</code></td><td>Time elapsed between flushing recent WAL locally and receiving
      notification that this standby server has written, flushed and
      applied it.  This can be used to gauge the delay that
      <code class="literal">synchronous_commit</code> level
      <code class="literal">remote_apply</code> incurred while committing if this
      server was configured as a synchronous standby.</td></tr><tr><td><code class="structfield">sync_priority</code></td><td><code class="type">integer</code></td><td>Priority of this standby server for being chosen as the
      synchronous standby in a priority-based synchronous replication.
      This has no effect in a quorum-based synchronous replication.</td></tr><tr><td><code class="structfield">sync_state</code></td><td><code class="type">text</code></td><td>Synchronous state of this standby server.
       Possible values are:
       <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
           <code class="literal">async</code>: This standby server is asynchronous.
          </p></li><li class="listitem"><p>
           <code class="literal">potential</code>: This standby server is now asynchronous,
           but can potentially become synchronous if one of current
           synchronous ones fails.
          </p></li><li class="listitem"><p>
           <code class="literal">sync</code>: This standby server is synchronous.
          </p></li><li class="listitem"><p>
           <code class="literal">quorum</code>: This standby server is considered as a candidate
           for quorum standbys.
          </p></li></ul></div>
     </td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_replication</code> view will contain one row
   per WAL sender process, showing statistics about replication to that
   sender's connected standby server.  Only directly connected standbys are
   listed; no information is available about downstream standby servers.
  </p><p>
   The lag times reported in the <code class="structname">pg_stat_replication</code>
   view are measurements of the time taken for recent WAL to be written,
   flushed and replayed and for the sender to know about it.  These times
   represent the commit delay that was (or would have been) introduced by each
   synchronous commit level, if the remote server was configured as a
   synchronous standby.  For an asynchronous standby, the
   <code class="structfield">replay_lag</code> column approximates the delay
   before recent transactions became visible to queries.  If the standby
   server has entirely caught up with the sending server and there is no more
   WAL activity, the most recently measured lag times will continue to be
   displayed for a short time and then show NULL.
  </p><p>
   Lag times work automatically for physical replication. Logical decoding
   plugins may optionally emit tracking messages; if they do not, the tracking
   mechanism will simply display NULL lag.
  </p><div class="note"><h3 class="title">Note</h3><p>
    The reported lag times are not predictions of how long it will take for
    the standby to catch up with the sending server assuming the current
    rate of replay.  Such a system would show similar times while new WAL is
    being generated, but would differ when the sender becomes idle.  In
    particular, when the standby has caught up completely,
    <code class="structname">pg_stat_replication</code> shows the time taken to
    write, flush and replay the most recent reported WAL location rather than
    zero as some users might expect.  This is consistent with the goal of
    measuring synchronous commit and transaction visibility delays for
    recent write transactions.
    To reduce confusion for users expecting a different model of lag, the
    lag columns revert to NULL after a short time on a fully replayed idle
    system. Monitoring systems should choose whether to represent this
    as missing data, zero or continue to display the last known value.
   </p></div><div class="table" id="PG-STAT-WAL-RECEIVER-VIEW"><p class="title"><strong>Table 28.6. <code class="structname">pg_stat_wal_receiver</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_wal_receiver View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">pid</code></td><td><code class="type">integer</code></td><td>Process ID of the WAL receiver process</td></tr><tr><td><code class="structfield">status</code></td><td><code class="type">text</code></td><td>Activity status of the WAL receiver process</td></tr><tr><td><code class="structfield">receive_start_lsn</code></td><td><code class="type">pg_lsn</code></td><td>First write-ahead log location used when WAL receiver is
      started</td></tr><tr><td><code class="structfield">receive_start_tli</code></td><td><code class="type">integer</code></td><td>First timeline number used when WAL receiver is started</td></tr><tr><td><code class="structfield">received_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location already received and flushed to
      disk, the initial value of this field being the first log location used
      when WAL receiver is started</td></tr><tr><td><code class="structfield">received_tli</code></td><td><code class="type">integer</code></td><td>Timeline number of last write-ahead log location received and
      flushed to disk, the initial value of this field being the timeline
      number of the first log location used when WAL receiver is started
     </td></tr><tr><td><code class="structfield">last_msg_send_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Send time of last message received from origin WAL sender</td></tr><tr><td><code class="structfield">last_msg_receipt_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Receipt time of last message received from origin WAL sender</td></tr><tr><td><code class="structfield">latest_end_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location reported to origin WAL sender</td></tr><tr><td><code class="structfield">latest_end_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Time of last write-ahead log location reported to origin WAL sender</td></tr><tr><td><code class="structfield">slot_name</code></td><td><code class="type">text</code></td><td>Replication slot name used by this WAL receiver</td></tr><tr><td><code class="structfield">sender_host</code></td><td><code class="type">text</code></td><td>
      Host of the <span class="productname">PostgreSQL</span> instance
      this WAL receiver is connected to. This can be a host name,
      an IP address, or a directory path if the connection is via
      Unix socket.  (The path case can be distinguished because it
      will always be an absolute path, beginning with <code class="literal">/</code>.)
     </td></tr><tr><td><code class="structfield">sender_port</code></td><td><code class="type">integer</code></td><td>
      Port number of the <span class="productname">PostgreSQL</span> instance
      this WAL receiver is connected to.
     </td></tr><tr><td><code class="structfield">conninfo</code></td><td><code class="type">text</code></td><td>
      Connection string used by this WAL receiver,
      with security-sensitive fields obfuscated.
     </td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_wal_receiver</code> view will contain only
   one row, showing statistics about the WAL receiver from that receiver's
   connected server.
  </p><div class="table" id="PG-STAT-SUBSCRIPTION"><p class="title"><strong>Table 28.7. <code class="structname">pg_stat_subscription</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_subscription View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">subid</code></td><td><code class="type">oid</code></td><td>OID of the subscription</td></tr><tr><td><code class="structfield">subname</code></td><td><code class="type">text</code></td><td>Name of the subscription</td></tr><tr><td><code class="structfield">pid</code></td><td><code class="type">integer</code></td><td>Process ID of the subscription worker process</td></tr><tr><td><code class="structfield">relid</code></td><td><code class="type">Oid</code></td><td>OID of the relation that the worker is synchronizing; null for the
     main apply worker</td></tr><tr><td><code class="structfield">received_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location received, the initial value of
      this field being 0</td></tr><tr><td><code class="structfield">last_msg_send_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Send time of last message received from origin WAL sender</td></tr><tr><td><code class="structfield">last_msg_receipt_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Receipt time of last message received from origin WAL sender
     </td></tr><tr><td><code class="structfield">latest_end_lsn</code></td><td><code class="type">pg_lsn</code></td><td>Last write-ahead log location reported to origin WAL sender
     </td></tr><tr><td><code class="structfield">latest_end_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Time of last write-ahead log location reported to origin WAL
      sender</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_subscription</code> view will contain one
   row per subscription for main worker (with null PID if the worker is
   not running), and additional rows for workers handling the initial data
   copy of the subscribed tables.
  </p><div class="table" id="PG-STAT-SSL-VIEW"><p class="title"><strong>Table 28.8. <code class="structname">pg_stat_ssl</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_ssl View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">pid</code></td><td><code class="type">integer</code></td><td>Process ID of a backend or WAL sender process</td></tr><tr><td><code class="structfield">ssl</code></td><td><code class="type">boolean</code></td><td>True if SSL is used on this connection</td></tr><tr><td><code class="structfield">version</code></td><td><code class="type">text</code></td><td>Version of SSL in use, or NULL if SSL is not in use
      on this connection</td></tr><tr><td><code class="structfield">cipher</code></td><td><code class="type">text</code></td><td>Name of SSL cipher in use, or NULL if SSL is not in use
      on this connection</td></tr><tr><td><code class="structfield">bits</code></td><td><code class="type">integer</code></td><td>Number of bits in the encryption algorithm used, or NULL
     if SSL is not used on this connection</td></tr><tr><td><code class="structfield">compression</code></td><td><code class="type">boolean</code></td><td>True if SSL compression is in use, false if not,
      or NULL if SSL is not in use on this connection</td></tr><tr><td><code class="structfield">clientdn</code></td><td><code class="type">text</code></td><td>Distinguished Name (DN) field from the client certificate
      used, or NULL if no client certificate was supplied or if SSL
      is not in use on this connection. This field is truncated if the
      DN field is longer than <code class="symbol">NAMEDATALEN</code> (64 characters
      in a standard build)
     </td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_ssl</code> view will contain one row per
   backend or WAL sender process, showing statistics about SSL usage on
   this connection. It can be joined to <code class="structname">pg_stat_activity</code>
   or <code class="structname">pg_stat_replication</code> on the
   <code class="structfield">pid</code> column to get more details about the
   connection.
  </p><div class="table" id="PG-STAT-ARCHIVER-VIEW"><p class="title"><strong>Table 28.9. <code class="structname">pg_stat_archiver</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_archiver View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">archived_count</code></td><td><code class="type">bigint</code></td><td>Number of WAL files that have been successfully archived</td></tr><tr><td><code class="structfield">last_archived_wal</code></td><td><code class="type">text</code></td><td>Name of the last WAL file successfully archived</td></tr><tr><td><code class="structfield">last_archived_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Time of the last successful archive operation</td></tr><tr><td><code class="structfield">failed_count</code></td><td><code class="type">bigint</code></td><td>Number of failed attempts for archiving WAL files</td></tr><tr><td><code class="structfield">last_failed_wal</code></td><td><code class="type">text</code></td><td>Name of the WAL file of the last failed archival operation</td></tr><tr><td><code class="structfield">last_failed_time</code></td><td><code class="type">timestamp with time zone</code></td><td>Time of the last failed archival operation</td></tr><tr><td><code class="structfield">stats_reset</code></td><td><code class="type">timestamp with time zone</code></td><td>Time at which these statistics were last reset</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_archiver</code> view will always have a
   single row, containing data about the archiver process of the cluster.
  </p><div class="table" id="PG-STAT-BGWRITER-VIEW"><p class="title"><strong>Table 28.10. <code class="structname">pg_stat_bgwriter</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_bgwriter View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">checkpoints_timed</code></td><td><code class="type">bigint</code></td><td>Number of scheduled checkpoints that have been performed</td></tr><tr><td><code class="structfield">checkpoints_req</code></td><td><code class="type">bigint</code></td><td>Number of requested checkpoints that have been performed</td></tr><tr><td><code class="structfield">checkpoint_write_time</code></td><td><code class="type">double precision</code></td><td>
        Total amount of time that has been spent in the portion of
        checkpoint processing where files are written to disk, in milliseconds
      </td></tr><tr><td><code class="structfield">checkpoint_sync_time</code></td><td><code class="type">double precision</code></td><td>
        Total amount of time that has been spent in the portion of
        checkpoint processing where files are synchronized to disk, in
        milliseconds
      </td></tr><tr><td><code class="structfield">buffers_checkpoint</code></td><td><code class="type">bigint</code></td><td>Number of buffers written during checkpoints</td></tr><tr><td><code class="structfield">buffers_clean</code></td><td><code class="type">bigint</code></td><td>Number of buffers written by the background writer</td></tr><tr><td><code class="structfield">maxwritten_clean</code></td><td><code class="type">bigint</code></td><td>Number of times the background writer stopped a cleaning
       scan because it had written too many buffers</td></tr><tr><td><code class="structfield">buffers_backend</code></td><td><code class="type">bigint</code></td><td>Number of buffers written directly by a backend</td></tr><tr><td><code class="structfield">buffers_backend_fsync</code></td><td><code class="type">bigint</code></td><td>Number of times a backend had to execute its own
       <code class="function">fsync</code> call (normally the background writer handles those
       even when the backend does its own write)</td></tr><tr><td><code class="structfield">buffers_alloc</code></td><td><code class="type">bigint</code></td><td>Number of buffers allocated</td></tr><tr><td><code class="structfield">stats_reset</code></td><td><code class="type">timestamp with time zone</code></td><td>Time at which these statistics were last reset</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_bgwriter</code> view will always have a
   single row, containing global data for the cluster.
  </p><div class="table" id="PG-STAT-DATABASE-VIEW"><p class="title"><strong>Table 28.11. <code class="structname">pg_stat_database</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_database View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">datid</code></td><td><code class="type">oid</code></td><td>OID of a database</td></tr><tr><td><code class="structfield">datname</code></td><td><code class="type">name</code></td><td>Name of this database</td></tr><tr><td><code class="structfield">numbackends</code></td><td><code class="type">integer</code></td><td>Number of backends currently connected to this database.
     This is the only column in this view that returns a value reflecting
     current state; all other columns return the accumulated values since
     the last reset.</td></tr><tr><td><code class="structfield">xact_commit</code></td><td><code class="type">bigint</code></td><td>Number of transactions in this database that have been
      committed</td></tr><tr><td><code class="structfield">xact_rollback</code></td><td><code class="type">bigint</code></td><td>Number of transactions in this database that have been
      rolled back</td></tr><tr><td><code class="structfield">blks_read</code></td><td><code class="type">bigint</code></td><td>Number of disk blocks read in this database</td></tr><tr><td><code class="structfield">blks_hit</code></td><td><code class="type">bigint</code></td><td>Number of times disk blocks were found already in the buffer
      cache, so that a read was not necessary (this only includes hits in the
      PostgreSQL buffer cache, not the operating system's file system cache)
     </td></tr><tr><td><code class="structfield">tup_returned</code></td><td><code class="type">bigint</code></td><td>Number of rows returned by queries in this database</td></tr><tr><td><code class="structfield">tup_fetched</code></td><td><code class="type">bigint</code></td><td>Number of rows fetched by queries in this database</td></tr><tr><td><code class="structfield">tup_inserted</code></td><td><code class="type">bigint</code></td><td>Number of rows inserted by queries in this database</td></tr><tr><td><code class="structfield">tup_updated</code></td><td><code class="type">bigint</code></td><td>Number of rows updated by queries in this database</td></tr><tr><td><code class="structfield">tup_deleted</code></td><td><code class="type">bigint</code></td><td>Number of rows deleted by queries in this database</td></tr><tr><td><code class="structfield">conflicts</code></td><td><code class="type">bigint</code></td><td>Number of queries canceled due to conflicts with recovery
      in this database. (Conflicts occur only on standby servers; see
      <a class="xref" href="monitoring-stats.html#PG-STAT-DATABASE-CONFLICTS-VIEW" title="Table 28.12. pg_stat_database_conflicts View">pg_stat_database_conflicts</a> for details.)
     </td></tr><tr><td><code class="structfield">temp_files</code></td><td><code class="type">bigint</code></td><td>Number of temporary files created by queries in this database.
      All temporary files are counted, regardless of why the temporary file
      was created (e.g., sorting or hashing), and regardless of the
      <a class="xref" href="runtime-config-logging.html#GUC-LOG-TEMP-FILES">log_temp_files</a> setting.
     </td></tr><tr><td><code class="structfield">temp_bytes</code></td><td><code class="type">bigint</code></td><td>Total amount of data written to temporary files by queries in
      this database. All temporary files are counted, regardless of why
      the temporary file was created, and
      regardless of the <a class="xref" href="runtime-config-logging.html#GUC-LOG-TEMP-FILES">log_temp_files</a> setting.
     </td></tr><tr><td><code class="structfield">deadlocks</code></td><td><code class="type">bigint</code></td><td>Number of deadlocks detected in this database</td></tr><tr><td><code class="structfield">blk_read_time</code></td><td><code class="type">double precision</code></td><td>Time spent reading data file blocks by backends in this database,
      in milliseconds</td></tr><tr><td><code class="structfield">blk_write_time</code></td><td><code class="type">double precision</code></td><td>Time spent writing data file blocks by backends in this database,
      in milliseconds</td></tr><tr><td><code class="structfield">stats_reset</code></td><td><code class="type">timestamp with time zone</code></td><td>Time at which these statistics were last reset</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_database</code> view will contain one row
   for each database in the cluster, showing database-wide statistics.
  </p><div class="table" id="PG-STAT-DATABASE-CONFLICTS-VIEW"><p class="title"><strong>Table 28.12. <code class="structname">pg_stat_database_conflicts</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_database_conflicts View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">datid</code></td><td><code class="type">oid</code></td><td>OID of a database</td></tr><tr><td><code class="structfield">datname</code></td><td><code class="type">name</code></td><td>Name of this database</td></tr><tr><td><code class="structfield">confl_tablespace</code></td><td><code class="type">bigint</code></td><td>Number of queries in this database that have been canceled due to
      dropped tablespaces</td></tr><tr><td><code class="structfield">confl_lock</code></td><td><code class="type">bigint</code></td><td>Number of queries in this database that have been canceled due to
      lock timeouts</td></tr><tr><td><code class="structfield">confl_snapshot</code></td><td><code class="type">bigint</code></td><td>Number of queries in this database that have been canceled due to
      old snapshots</td></tr><tr><td><code class="structfield">confl_bufferpin</code></td><td><code class="type">bigint</code></td><td>Number of queries in this database that have been canceled due to
      pinned buffers</td></tr><tr><td><code class="structfield">confl_deadlock</code></td><td><code class="type">bigint</code></td><td>Number of queries in this database that have been canceled due to
      deadlocks</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_database_conflicts</code> view will contain
   one row per database, showing database-wide statistics about
   query cancels occurring due to conflicts with recovery on standby servers.
   This view will only contain information on standby servers, since
   conflicts do not occur on master servers.
  </p><div class="table" id="PG-STAT-ALL-TABLES-VIEW"><p class="title"><strong>Table 28.13. <code class="structname">pg_stat_all_tables</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_all_tables View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">relid</code></td><td><code class="type">oid</code></td><td>OID of a table</td></tr><tr><td><code class="structfield">schemaname</code></td><td><code class="type">name</code></td><td>Name of the schema that this table is in</td></tr><tr><td><code class="structfield">relname</code></td><td><code class="type">name</code></td><td>Name of this table</td></tr><tr><td><code class="structfield">seq_scan</code></td><td><code class="type">bigint</code></td><td>Number of sequential scans initiated on this table</td></tr><tr><td><code class="structfield">seq_tup_read</code></td><td><code class="type">bigint</code></td><td>Number of live rows fetched by sequential scans</td></tr><tr><td><code class="structfield">idx_scan</code></td><td><code class="type">bigint</code></td><td>Number of index scans initiated on this table</td></tr><tr><td><code class="structfield">idx_tup_fetch</code></td><td><code class="type">bigint</code></td><td>Number of live rows fetched by index scans</td></tr><tr><td><code class="structfield">n_tup_ins</code></td><td><code class="type">bigint</code></td><td>Number of rows inserted</td></tr><tr><td><code class="structfield">n_tup_upd</code></td><td><code class="type">bigint</code></td><td>Number of rows updated (includes HOT updated rows)</td></tr><tr><td><code class="structfield">n_tup_del</code></td><td><code class="type">bigint</code></td><td>Number of rows deleted</td></tr><tr><td><code class="structfield">n_tup_hot_upd</code></td><td><code class="type">bigint</code></td><td>Number of rows HOT updated (i.e., with no separate index
      update required)</td></tr><tr><td><code class="structfield">n_live_tup</code></td><td><code class="type">bigint</code></td><td>Estimated number of live rows</td></tr><tr><td><code class="structfield">n_dead_tup</code></td><td><code class="type">bigint</code></td><td>Estimated number of dead rows</td></tr><tr><td><code class="structfield">n_mod_since_analyze</code></td><td><code class="type">bigint</code></td><td>Estimated number of rows modified since this table was last analyzed</td></tr><tr><td><code class="structfield">last_vacuum</code></td><td><code class="type">timestamp with time zone</code></td><td>Last time at which this table was manually vacuumed
      (not counting <code class="command">VACUUM FULL</code>)</td></tr><tr><td><code class="structfield">last_autovacuum</code></td><td><code class="type">timestamp with time zone</code></td><td>Last time at which this table was vacuumed by the autovacuum
      daemon</td></tr><tr><td><code class="structfield">last_analyze</code></td><td><code class="type">timestamp with time zone</code></td><td>Last time at which this table was manually analyzed</td></tr><tr><td><code class="structfield">last_autoanalyze</code></td><td><code class="type">timestamp with time zone</code></td><td>Last time at which this table was analyzed by the autovacuum
      daemon</td></tr><tr><td><code class="structfield">vacuum_count</code></td><td><code class="type">bigint</code></td><td>Number of times this table has been manually vacuumed
      (not counting <code class="command">VACUUM FULL</code>)</td></tr><tr><td><code class="structfield">autovacuum_count</code></td><td><code class="type">bigint</code></td><td>Number of times this table has been vacuumed by the autovacuum
      daemon</td></tr><tr><td><code class="structfield">analyze_count</code></td><td><code class="type">bigint</code></td><td>Number of times this table has been manually analyzed</td></tr><tr><td><code class="structfield">autoanalyze_count</code></td><td><code class="type">bigint</code></td><td>Number of times this table has been analyzed by the autovacuum
      daemon</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_all_tables</code> view will contain
   one row for each table in the current database (including TOAST
   tables), showing statistics about accesses to that specific table. The
   <code class="structname">pg_stat_user_tables</code> and
   <code class="structname">pg_stat_sys_tables</code> views
   contain the same information,
   but filtered to only show user and system tables respectively.
  </p><div class="table" id="PG-STAT-ALL-INDEXES-VIEW"><p class="title"><strong>Table 28.14. <code class="structname">pg_stat_all_indexes</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_all_indexes View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">relid</code></td><td><code class="type">oid</code></td><td>OID of the table for this index</td></tr><tr><td><code class="structfield">indexrelid</code></td><td><code class="type">oid</code></td><td>OID of this index</td></tr><tr><td><code class="structfield">schemaname</code></td><td><code class="type">name</code></td><td>Name of the schema this index is in</td></tr><tr><td><code class="structfield">relname</code></td><td><code class="type">name</code></td><td>Name of the table for this index</td></tr><tr><td><code class="structfield">indexrelname</code></td><td><code class="type">name</code></td><td>Name of this index</td></tr><tr><td><code class="structfield">idx_scan</code></td><td><code class="type">bigint</code></td><td>Number of index scans initiated on this index</td></tr><tr><td><code class="structfield">idx_tup_read</code></td><td><code class="type">bigint</code></td><td>Number of index entries returned by scans on this index</td></tr><tr><td><code class="structfield">idx_tup_fetch</code></td><td><code class="type">bigint</code></td><td>Number of live table rows fetched by simple index scans using this
      index</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_all_indexes</code> view will contain
   one row for each index in the current database,
   showing statistics about accesses to that specific index. The
   <code class="structname">pg_stat_user_indexes</code> and
   <code class="structname">pg_stat_sys_indexes</code> views
   contain the same information,
   but filtered to only show user and system indexes respectively.
  </p><p>
   Indexes can be used by simple index scans, <span class="quote">“<span class="quote">bitmap</span>”</span> index scans,
   and the optimizer.  In a bitmap scan
   the output of several indexes can be combined via AND or OR rules,
   so it is difficult to associate individual heap row fetches
   with specific indexes when a bitmap scan is used.  Therefore, a bitmap
   scan increments the
   <code class="structname">pg_stat_all_indexes</code>.<code class="structfield">idx_tup_read</code>
   count(s) for the index(es) it uses, and it increments the
   <code class="structname">pg_stat_all_tables</code>.<code class="structfield">idx_tup_fetch</code>
   count for the table, but it does not affect
   <code class="structname">pg_stat_all_indexes</code>.<code class="structfield">idx_tup_fetch</code>.
   The optimizer also accesses indexes to check for supplied constants
   whose values are outside the recorded range of the optimizer statistics
   because the optimizer statistics might be stale.
  </p><div class="note"><h3 class="title">Note</h3><p>
    The <code class="structfield">idx_tup_read</code> and <code class="structfield">idx_tup_fetch</code> counts
    can be different even without any use of bitmap scans,
    because <code class="structfield">idx_tup_read</code> counts
    index entries retrieved from the index while <code class="structfield">idx_tup_fetch</code>
    counts live rows fetched from the table.  The latter will be less if any
    dead or not-yet-committed rows are fetched using the index, or if any
    heap fetches are avoided by means of an index-only scan.
   </p></div><div class="table" id="PG-STATIO-ALL-TABLES-VIEW"><p class="title"><strong>Table 28.15. <code class="structname">pg_statio_all_tables</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_statio_all_tables View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">relid</code></td><td><code class="type">oid</code></td><td>OID of a table</td></tr><tr><td><code class="structfield">schemaname</code></td><td><code class="type">name</code></td><td>Name of the schema that this table is in</td></tr><tr><td><code class="structfield">relname</code></td><td><code class="type">name</code></td><td>Name of this table</td></tr><tr><td><code class="structfield">heap_blks_read</code></td><td><code class="type">bigint</code></td><td>Number of disk blocks read from this table</td></tr><tr><td><code class="structfield">heap_blks_hit</code></td><td><code class="type">bigint</code></td><td>Number of buffer hits in this table</td></tr><tr><td><code class="structfield">idx_blks_read</code></td><td><code class="type">bigint</code></td><td>Number of disk blocks read from all indexes on this table</td></tr><tr><td><code class="structfield">idx_blks_hit</code></td><td><code class="type">bigint</code></td><td>Number of buffer hits in all indexes on this table</td></tr><tr><td><code class="structfield">toast_blks_read</code></td><td><code class="type">bigint</code></td><td>Number of disk blocks read from this table's TOAST table (if any)</td></tr><tr><td><code class="structfield">toast_blks_hit</code></td><td><code class="type">bigint</code></td><td>Number of buffer hits in this table's TOAST table (if any)</td></tr><tr><td><code class="structfield">tidx_blks_read</code></td><td><code class="type">bigint</code></td><td>Number of disk blocks read from this table's TOAST table indexes (if any)</td></tr><tr><td><code class="structfield">tidx_blks_hit</code></td><td><code class="type">bigint</code></td><td>Number of buffer hits in this table's TOAST table indexes (if any)</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_statio_all_tables</code> view will contain
   one row for each table in the current database (including TOAST
   tables), showing statistics about I/O on that specific table. The
   <code class="structname">pg_statio_user_tables</code> and
   <code class="structname">pg_statio_sys_tables</code> views
   contain the same information,
   but filtered to only show user and system tables respectively.
  </p><div class="table" id="PG-STATIO-ALL-INDEXES-VIEW"><p class="title"><strong>Table 28.16. <code class="structname">pg_statio_all_indexes</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_statio_all_indexes View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">relid</code></td><td><code class="type">oid</code></td><td>OID of the table for this index</td></tr><tr><td><code class="structfield">indexrelid</code></td><td><code class="type">oid</code></td><td>OID of this index</td></tr><tr><td><code class="structfield">schemaname</code></td><td><code class="type">name</code></td><td>Name of the schema this index is in</td></tr><tr><td><code class="structfield">relname</code></td><td><code class="type">name</code></td><td>Name of the table for this index</td></tr><tr><td><code class="structfield">indexrelname</code></td><td><code class="type">name</code></td><td>Name of this index</td></tr><tr><td><code class="structfield">idx_blks_read</code></td><td><code class="type">bigint</code></td><td>Number of disk blocks read from this index</td></tr><tr><td><code class="structfield">idx_blks_hit</code></td><td><code class="type">bigint</code></td><td>Number of buffer hits in this index</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_statio_all_indexes</code> view will contain
   one row for each index in the current database,
   showing statistics about I/O on that specific index. The
   <code class="structname">pg_statio_user_indexes</code> and
   <code class="structname">pg_statio_sys_indexes</code> views
   contain the same information,
   but filtered to only show user and system indexes respectively.
  </p><div class="table" id="PG-STATIO-ALL-SEQUENCES-VIEW"><p class="title"><strong>Table 28.17. <code class="structname">pg_statio_all_sequences</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_statio_all_sequences View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">relid</code></td><td><code class="type">oid</code></td><td>OID of a sequence</td></tr><tr><td><code class="structfield">schemaname</code></td><td><code class="type">name</code></td><td>Name of the schema this sequence is in</td></tr><tr><td><code class="structfield">relname</code></td><td><code class="type">name</code></td><td>Name of this sequence</td></tr><tr><td><code class="structfield">blks_read</code></td><td><code class="type">bigint</code></td><td>Number of disk blocks read from this sequence</td></tr><tr><td><code class="structfield">blks_hit</code></td><td><code class="type">bigint</code></td><td>Number of buffer hits in this sequence</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_statio_all_sequences</code> view will contain
   one row for each sequence in the current database,
   showing statistics about I/O on that specific sequence.
  </p><div class="table" id="PG-STAT-USER-FUNCTIONS-VIEW"><p class="title"><strong>Table 28.18. <code class="structname">pg_stat_user_functions</code> View</strong></p><div class="table-contents"><table class="table" summary="pg_stat_user_functions View" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Column</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="structfield">funcid</code></td><td><code class="type">oid</code></td><td>OID of a function</td></tr><tr><td><code class="structfield">schemaname</code></td><td><code class="type">name</code></td><td>Name of the schema this function is in</td></tr><tr><td><code class="structfield">funcname</code></td><td><code class="type">name</code></td><td>Name of this function</td></tr><tr><td><code class="structfield">calls</code></td><td><code class="type">bigint</code></td><td>Number of times this function has been called</td></tr><tr><td><code class="structfield">total_time</code></td><td><code class="type">double precision</code></td><td>Total time spent in this function and all other functions
     called by it, in milliseconds</td></tr><tr><td><code class="structfield">self_time</code></td><td><code class="type">double precision</code></td><td>Total time spent in this function itself, not including
     other functions called by it, in milliseconds</td></tr></tbody></table></div></div><br class="table-break" /><p>
   The <code class="structname">pg_stat_user_functions</code> view will contain
   one row for each tracked function, showing statistics about executions of
   that function.  The <a class="xref" href="runtime-config-statistics.html#GUC-TRACK-FUNCTIONS">track_functions</a> parameter
   controls exactly which functions are tracked.
  </p></div><div class="sect2" id="MONITORING-STATS-FUNCTIONS"><div class="titlepage"><div><div><h3 class="title">28.2.3. Statistics Functions</h3></div></div></div><p>
   Other ways of looking at the statistics can be set up by writing
   queries that use the same underlying statistics access functions used by
   the standard views shown above.  For details such as the functions' names,
   consult the definitions of the standard views.  (For example, in
   <span class="application">psql</span> you could issue <code class="literal">\d+ pg_stat_activity</code>.)
   The access functions for per-database statistics take a database OID as an
   argument to identify which database to report on.
   The per-table and per-index functions take a table or index OID.
   The functions for per-function statistics take a function OID.
   Note that only tables, indexes, and functions in the current database
   can be seen with these functions.
  </p><p>
   Additional functions related to statistics collection are listed in <a class="xref" href="monitoring-stats.html#MONITORING-STATS-FUNCS-TABLE" title="Table 28.19. Additional Statistics Functions">Table 28.19</a>.
  </p><div class="table" id="MONITORING-STATS-FUNCS-TABLE"><p class="title"><strong>Table 28.19. Additional Statistics Functions</strong></p><div class="table-contents"><table class="table" summary="Additional Statistics Functions" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Function</th><th>Return Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="literal"><code class="function">pg_backend_pid()</code></code></td><td><code class="type">integer</code></td><td>
       Process ID of the server process handling the current session
      </td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_activity</code>(<code class="type">integer</code>)</code><a id="id-1.6.15.7.7.4.2.2.2.1.2" class="indexterm"></a></td><td><code class="type">setof record</code></td><td>
       Returns a record of information about the backend with the specified PID, or
       one record for each active backend in the system if <code class="symbol">NULL</code> is
       specified. The fields returned are a subset of those in the
       <code class="structname">pg_stat_activity</code> view.
      </td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_snapshot_timestamp()</code></code><a id="id-1.6.15.7.7.4.2.2.3.1.2" class="indexterm"></a></td><td><code class="type">timestamp with time zone</code></td><td>
       Returns the timestamp of the current statistics snapshot
      </td></tr><tr><td><code class="literal"><code class="function">pg_stat_clear_snapshot()</code></code><a id="id-1.6.15.7.7.4.2.2.4.1.2" class="indexterm"></a></td><td><code class="type">void</code></td><td>
       Discard the current statistics snapshot
      </td></tr><tr><td><code class="literal"><code class="function">pg_stat_reset()</code></code><a id="id-1.6.15.7.7.4.2.2.5.1.2" class="indexterm"></a></td><td><code class="type">void</code></td><td>
       Reset all statistics counters for the current database to zero
       (requires superuser privileges by default, but EXECUTE for this
       function can be granted to others.)
      </td></tr><tr><td><code class="literal"><code class="function">pg_stat_reset_shared</code>(text)</code><a id="id-1.6.15.7.7.4.2.2.6.1.2" class="indexterm"></a></td><td><code class="type">void</code></td><td>
       Reset some cluster-wide statistics counters to zero, depending on the
       argument (requires superuser privileges by default, but EXECUTE for
       this function can be granted to others).
       Calling <code class="literal">pg_stat_reset_shared('bgwriter')</code> will zero all the
       counters shown in the <code class="structname">pg_stat_bgwriter</code> view.
       Calling <code class="literal">pg_stat_reset_shared('archiver')</code> will zero all the
       counters shown in the <code class="structname">pg_stat_archiver</code> view.
      </td></tr><tr><td><code class="literal"><code class="function">pg_stat_reset_single_table_counters</code>(oid)</code><a id="id-1.6.15.7.7.4.2.2.7.1.2" class="indexterm"></a></td><td><code class="type">void</code></td><td>
       Reset statistics for a single table or index in the current database to
       zero (requires superuser privileges by default, but EXECUTE for this
       function can be granted to others)
      </td></tr><tr><td><code class="literal"><code class="function">pg_stat_reset_single_function_counters</code>(oid)</code><a id="id-1.6.15.7.7.4.2.2.8.1.2" class="indexterm"></a></td><td><code class="type">void</code></td><td>
       Reset statistics for a single function in the current database to
       zero (requires superuser privileges by default, but EXECUTE for this
       function can be granted to others)
      </td></tr></tbody></table></div></div><br class="table-break" /><p>
   <code class="function">pg_stat_get_activity</code>, the underlying function of
   the <code class="structname">pg_stat_activity</code> view, returns a set of records
   containing all the available information about each backend process.
   Sometimes it may be more convenient to obtain just a subset of this
   information.  In such cases, an older set of per-backend statistics
   access functions can be used; these are shown in <a class="xref" href="monitoring-stats.html#MONITORING-STATS-BACKEND-FUNCS-TABLE" title="Table 28.20. Per-Backend Statistics Functions">Table 28.20</a>.
   These access functions use a backend ID number, which ranges from one
   to the number of currently active backends.
   The function <code class="function">pg_stat_get_backend_idset</code> provides a
   convenient way to generate one row for each active backend for
   invoking these functions.  For example, to show the <acronym class="acronym">PID</acronym>s and
   current queries of all backends:

</p><pre class="programlisting">
SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
       pg_stat_get_backend_activity(s.backendid) AS query
    FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
</pre><p>
  </p><div class="table" id="MONITORING-STATS-BACKEND-FUNCS-TABLE"><p class="title"><strong>Table 28.20. Per-Backend Statistics Functions</strong></p><div class="table-contents"><table class="table" summary="Per-Backend Statistics Functions" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Function</th><th>Return Type</th><th>Description</th></tr></thead><tbody><tr><td><code class="literal"><code class="function">pg_stat_get_backend_idset()</code></code></td><td><code class="type">setof integer</code></td><td>Set of currently active backend ID numbers (from 1 to the
       number of active backends)</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_activity(integer)</code></code></td><td><code class="type">text</code></td><td>Text of this backend's most recent query</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_activity_start(integer)</code></code></td><td><code class="type">timestamp with time zone</code></td><td>Time when the most recent query was started</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_client_addr(integer)</code></code></td><td><code class="type">inet</code></td><td>IP address of the client connected to this backend</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_client_port(integer)</code></code></td><td><code class="type">integer</code></td><td>TCP port number that the client is using for communication</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_dbid(integer)</code></code></td><td><code class="type">oid</code></td><td>OID of the database this backend is connected to</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_pid(integer)</code></code></td><td><code class="type">integer</code></td><td>Process ID of this backend</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_start(integer)</code></code></td><td><code class="type">timestamp with time zone</code></td><td>Time when this process was started</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_userid(integer)</code></code></td><td><code class="type">oid</code></td><td>OID of the user logged into this backend</td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_wait_event_type(integer)</code></code></td><td><code class="type">text</code></td><td>Wait event type name if backend is currently waiting, otherwise NULL.
        See <a class="xref" href="monitoring-stats.html#WAIT-EVENT-TABLE" title="Table 28.4. wait_event Description">Table 28.4</a> for details.
        </td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_wait_event(integer)</code></code></td><td><code class="type">text</code></td><td>Wait event name if backend is currently waiting, otherwise NULL.
       See <a class="xref" href="monitoring-stats.html#WAIT-EVENT-TABLE" title="Table 28.4. wait_event Description">Table 28.4</a> for details.
       </td></tr><tr><td><code class="literal"><code class="function">pg_stat_get_backend_xact_start(integer)</code></code></td><td><code class="type">timestamp with time zone</code></td><td>Time when the current transaction was started</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="monitoring-ps.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="monitoring.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="monitoring-locks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">28.1. Standard Unix Tools </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 28.3. Viewing Locks</td></tr></table></div></body></html>