27.2. The Cumulative Statistics System #

27.2.1. Statistics Collection Configuration
27.2.2. Viewing Statistics
27.2.3. pg_stat_activity
27.2.4. pg_stat_replication
27.2.5. pg_stat_replication_slots
27.2.6. pg_stat_wal_receiver
27.2.7. pg_stat_recovery_prefetch
27.2.8. pg_stat_subscription
27.2.9. pg_stat_subscription_stats
27.2.10. pg_stat_ssl
27.2.11. pg_stat_gssapi
27.2.12. pg_stat_archiver
27.2.13. pg_stat_io
27.2.14. pg_stat_bgwriter
27.2.15. pg_stat_checkpointer
27.2.16. pg_stat_wal
27.2.17. pg_stat_database
27.2.18. pg_stat_database_conflicts
27.2.19. pg_stat_all_tables
27.2.20. pg_stat_all_indexes
27.2.21. pg_statio_all_tables
27.2.22. pg_statio_all_indexes
27.2.23. pg_statio_all_sequences
27.2.24. pg_stat_user_functions
27.2.25. pg_stat_slru
27.2.26. Statistics Functions

PostgreSQL's cumulative statistics system supports collection and reporting of information about server activity. Presently, accesses to tables and indexes in both disk-block and individual-row terms are counted. The total number of rows in each table, and information about vacuum and analyze actions for each table are also counted. If enabled, calls to user-defined functions and the total time spent in each one are counted as well.

PostgreSQL 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 cumulative statistics system.

27.2.1. Statistics Collection Configuration #

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 postgresql.conf. (See Chapter 19 for details about setting configuration parameters.)

The parameter track_activities enables monitoring of the current command being executed by any server process.

The parameter track_cost_delay_timing enables monitoring of cost-based vacuum delay.

The parameter track_counts controls whether cumulative statistics are collected about table and index accesses.

The parameter track_functions enables tracking of usage of user-defined functions.

The parameter track_io_timing enables monitoring of block read, write, extend, and fsync times.

The parameter track_wal_io_timing enables monitoring of WAL read, write and fsync times.

Normally these parameters are set in postgresql.conf so that they apply to all server processes, but it is possible to turn them on or off in individual sessions using the SET command. (To prevent ordinary users from hiding their activity from the administrator, only superusers are allowed to change these parameters with SET.)

Cumulative statistics are collected in shared memory. Every PostgreSQL process collects statistics locally, then updates the shared data at appropriate intervals. When a server, including a physical replica, shuts down cleanly, a permanent copy of the statistics data is stored in the pg_stat subdirectory, so that statistics can be retained across server restarts. In contrast, when starting from an unclean shutdown (e.g., after an immediate shutdown, a server crash, starting from a base backup, and point-in-time recovery), all statistics counters are reset.

27.2.2. Viewing Statistics #

Several predefined views, listed in Table 27.1, are available to show the current state of the system. There are also several other views, listed in Table 27.2, available to show the accumulated statistics. Alternatively, one can build custom views using the underlying cumulative statistics functions, as discussed in Section 27.2.26.

When using the cumulative statistics views and functions to monitor collected data, it is important to realize that the information does not update instantaneously. Each individual server process flushes out accumulated statistics to shared memory just before going idle, but not more frequently than once per PGSTAT_MIN_INTERVAL milliseconds (1 second unless altered while building the server); so a query or transaction still in progress does not affect the displayed totals and the displayed information lags behind actual activity. However, current-query information collected by track_activities is always up-to-date.

Another important point is that when a server process is asked to display any of the accumulated statistics, accessed values are cached until the end of its current transaction in the default configuration. 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. When analyzing statistics interactively, or with expensive queries, the time delta between accesses to individual statistics can lead to significant skew in the cached statistics. To minimize skew, stats_fetch_consistency can be set to snapshot, at the price of increased memory usage for caching not-needed statistics data. Conversely, if it's known that statistics are only accessed once, caching accessed statistics is unnecessary and can be avoided by setting stats_fetch_consistency to none. You can invoke pg_stat_clear_snapshot() to discard the current transaction's statistics snapshot or cached values (if any). The next use of statistical information will (when in snapshot mode) cause a new snapshot to be built or (when in cache mode) accessed statistics to be cached.

A transaction can also see its own statistics (not yet flushed out to the shared memory statistics) in the views pg_stat_xact_all_tables, pg_stat_xact_sys_tables, pg_stat_xact_user_tables, and pg_stat_xact_user_functions. These numbers do not act as stated above; instead they update continuously throughout the transaction.

Some of the information in the dynamic statistics views shown in Table 27.1 is security restricted. Ordinary users can only see all the information about their own sessions (sessions belonging to a role that they are a member of). In rows about other sessions, many columns will be null. Note, however, that the existence of a session and its general properties such as its sessions user and database are visible to all users. Superusers and roles with privileges of built-in role pg_read_all_stats can see all the information about all sessions.

Table 27.1. Dynamic Statistics Views

View NameDescription
pg_stat_activity One row per server process, showing information related to the current activity of that process, such as state and current query. See pg_stat_activity for details.
pg_stat_replicationOne row per WAL sender process, showing statistics about replication to that sender's connected standby server. See pg_stat_replication for details.
pg_stat_wal_receiverOnly one row, showing statistics about the WAL receiver from that receiver's connected server. See pg_stat_wal_receiver for details.
pg_stat_recovery_prefetchOnly one row, showing statistics about blocks prefetched during recovery. See pg_stat_recovery_prefetch for details.
pg_stat_subscriptionAt least one row per subscription, showing information about the subscription workers. See pg_stat_subscription for details.
pg_stat_sslOne row per connection (regular and replication), showing information about SSL used on this connection. See pg_stat_ssl for details.
pg_stat_gssapiOne row per connection (regular and replication), showing information about GSSAPI authentication and encryption used on this connection. See pg_stat_gssapi for details.
pg_stat_progress_analyzeOne row for each backend (including autovacuum worker processes) running ANALYZE, showing current progress. See Section 27.4.1.
pg_stat_progress_create_indexOne row for each backend running CREATE INDEX or REINDEX, showing current progress. See Section 27.4.4.
pg_stat_progress_vacuumOne row for each backend (including autovacuum worker processes) running VACUUM, showing current progress. See Section 27.4.5.
pg_stat_progress_clusterOne row for each backend running CLUSTER or VACUUM FULL, showing current progress. See Section 27.4.2.
pg_stat_progress_basebackupOne row for each WAL sender process streaming a base backup, showing current progress. See Section 27.4.6.
pg_stat_progress_copyOne row for each backend running COPY, showing current progress. See Section 27.4.3.

Table 27.2. Collected Statistics Views

View NameDescription
pg_stat_archiverOne row only, showing statistics about the WAL archiver process's activity. See pg_stat_archiver for details.
pg_stat_bgwriterOne row only, showing statistics about the background writer process's activity. See pg_stat_bgwriter for details.
pg_stat_checkpointerOne row only, showing statistics about the checkpointer process's activity. See pg_stat_checkpointer for details.
pg_stat_databaseOne row per database, showing database-wide statistics. See pg_stat_database for details.
pg_stat_database_conflicts One row per database, showing database-wide statistics about query cancels due to conflict with recovery on standby servers. See pg_stat_database_conflicts for details.
pg_stat_io One row for each combination of backend type, context, and target object containing cluster-wide I/O statistics. See pg_stat_io for details.
pg_stat_replication_slotsOne row per replication slot, showing statistics about the replication slot's usage. See pg_stat_replication_slots for details.
pg_stat_slruOne row per SLRU, showing statistics of operations. See pg_stat_slru for details.
pg_stat_subscription_statsOne row per subscription, showing statistics about errors and conflicts. See pg_stat_subscription_stats for details.
pg_stat_walOne row only, showing statistics about WAL activity. See pg_stat_wal for details.
pg_stat_all_tables One row for each table in the current database, showing statistics about accesses to that specific table. See pg_stat_all_tables for details.
pg_stat_sys_tablesSame as pg_stat_all_tables, except that only system tables are shown.
pg_stat_user_tablesSame as pg_stat_all_tables, except that only user tables are shown.
pg_stat_xact_all_tablesSimilar to pg_stat_all_tables, but counts actions taken so far within the current transaction (which are not yet included in pg_stat_all_tables and related views). The columns for numbers of live and dead rows and vacuum and analyze actions are not present in this view.
pg_stat_xact_sys_tablesSame as pg_stat_xact_all_tables, except that only system tables are shown.
pg_stat_xact_user_tablesSame as pg_stat_xact_all_tables, except that only user tables are shown.
pg_stat_all_indexes One row for each index in the current database, showing statistics about accesses to that specific index. See pg_stat_all_indexes for details.
pg_stat_sys_indexesSame as pg_stat_all_indexes, except that only indexes on system tables are shown.
pg_stat_user_indexesSame as pg_stat_all_indexes, except that only indexes on user tables are shown.
pg_stat_user_functions One row for each tracked function, showing statistics about executions of that function. See pg_stat_user_functions for details.
pg_stat_xact_user_functionsSimilar to pg_stat_user_functions, but counts only calls during the current transaction (which are not yet included in pg_stat_user_functions).
pg_statio_all_tables One row for each table in the current database, showing statistics about I/O on that specific table. See pg_statio_all_tables for details.
pg_statio_sys_tablesSame as pg_statio_all_tables, except that only system tables are shown.
pg_statio_user_tablesSame as pg_statio_all_tables, except that only user tables are shown.
pg_statio_all_indexes One row for each index in the current database, showing statistics about I/O on that specific index. See pg_statio_all_indexes for details.
pg_statio_sys_indexesSame as pg_statio_all_indexes, except that only indexes on system tables are shown.
pg_statio_user_indexesSame as pg_statio_all_indexes, except that only indexes on user tables are shown.
pg_statio_all_sequences One row for each sequence in the current database, showing statistics about I/O on that specific sequence. See pg_statio_all_sequences for details.
pg_statio_sys_sequencesSame as pg_statio_all_sequences, except that only system sequences are shown. (Presently, no system sequences are defined, so this view is always empty.)
pg_statio_user_sequencesSame as pg_statio_all_sequences, except that only user sequences are shown.

The per-index statistics are particularly useful to determine which indexes are being used and how effective they are.

The pg_stat_io and pg_statio_ set of views are useful for determining the effectiveness of the buffer cache. They can be used to calculate a cache hit ratio. Note that while PostgreSQL's I/O statistics capture most instances in which the kernel was invoked in order to perform I/O, they do not differentiate between data which had to be fetched from disk and that which already resided in the kernel page cache. Users are advised to use the PostgreSQL statistics views in combination with operating system utilities for a more complete picture of their database's I/O performance.

27.2.3. pg_stat_activity #

The pg_stat_activity view will have one row per server process, showing information related to the current activity of that process.

Table 27.3. pg_stat_activity View

Column Type

Description

datid oid

OID of the database this backend is connected to

datname name

Name of the database this backend is connected to

pid integer

Process ID of this backend

leader_pid integer

Process ID of the parallel group leader if this process is a parallel query worker, or process ID of the leader apply worker if this process is a parallel apply worker. NULL indicates that this process is a parallel group leader or leader apply worker, or does not participate in any parallel operation.

usesysid oid

OID of the user logged into this backend

usename name

Name of the user logged into this backend

application_name text

Name of the application that is connected to this backend

client_addr inet

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.

client_hostname text

Host name of the connected client, as reported by a reverse DNS lookup of client_addr. This field will only be non-null for IP connections, and only when log_hostname is enabled.

client_port integer

TCP port number that the client is using for communication with this backend, or -1 if a Unix socket is used. If this field is null, it indicates that this is an internal server process.

backend_start timestamp with time zone

Time when this process was started. For client backends, this is the time the client connected to the server.

xact_start timestamp with time zone

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 query_start column.

query_start timestamp with time zone

Time when the currently active query was started, or if state is not active, when the last query was started

state_change timestamp with time zone

Time when the state was last changed

wait_event_type text

The type of event for which the backend is waiting, if any; otherwise NULL. See Table 27.4.

wait_event text

Wait event name if backend is currently waiting, otherwise NULL. See Table 27.5 through Table 27.13.

state text

Current overall state of this backend. Possible values are:

  • starting: The backend is in initial startup. Client authentication is performed during this phase.

  • active: The backend is executing a query.

  • idle: The backend is waiting for a new client command.

  • idle in transaction: The backend is in a transaction, but is not currently executing a query.

  • idle in transaction (aborted): This state is similar to idle in transaction, except one of the statements in the transaction caused an error.

  • fastpath function call: The backend is executing a fast-path function.

  • disabled: This state is reported if track_activities is disabled in this backend.

backend_xid xid

Top-level transaction identifier of this backend, if any; see Section 67.1.

backend_xmin xid

The current backend's xmin horizon.

query_id bigint

Identifier of this backend's most recent query. If state is active this field shows the identifier of the currently executing query. In all other states, it shows the identifier of last query that was executed. Query identifiers are not computed by default so this field will be null unless compute_query_id parameter is enabled or a third-party module that computes query identifiers is configured.

query text

Text of this backend's most recent query. If state is active 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 bytes; this value can be changed via the parameter track_activity_query_size.

backend_type text

Type of current backend. Possible types are autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, archiver, standalone backend, startup, walreceiver, walsender, walwriter and walsummarizer. In addition, background workers registered by extensions may have additional types.


Note

The wait_event and state columns are independent. If a backend is in the active state, it may or may not be waiting on some event. If the state is active and wait_event is non-null, it means that a query is being executed, but is being blocked somewhere in the system. To keep the reporting overhead low, the system does not attempt to synchronize different aspects of activity data for a backend. As a result, ephemeral discrepancies may exist between the view's columns.

Table 27.4. Wait Event Types

Wait Event TypeDescription
ActivityThe server process is idle. This event type indicates a process waiting for activity in its main processing loop. wait_event will identify the specific wait point; see Table 27.5.
BufferPinThe server process is waiting for exclusive access to a data buffer. Buffer pin waits can be protracted if another process holds an open cursor that last read data from the buffer in question. See Table 27.6.
ClientThe server process is waiting for activity on a socket connected to a user application. Thus, the server expects something to happen that is independent of its internal processes. wait_event will identify the specific wait point; see Table 27.7.
ExtensionThe server process is waiting for some condition defined by an extension module. See Table 27.8.
InjectionPointThe server process is waiting for an injection point to reach an outcome defined in a test. See Section 36.10.14 for more details. This type has no predefined wait points.
IOThe server process is waiting for an I/O operation to complete. wait_event will identify the specific wait point; see Table 27.9.
IPCThe server process is waiting for some interaction with another server process. wait_event will identify the specific wait point; see Table 27.10.
LockThe server process 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. wait_event will identify the type of lock awaited; see Table 27.11.
LWLock The server process is waiting for a lightweight lock. Most such locks protect a particular data structure in shared memory. wait_event 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.) See Table 27.12.
TimeoutThe server process is waiting for a timeout to expire. wait_event will identify the specific wait point; see Table 27.13.

Table 27.5. Eventos de espera de tipo Activity

Evento de espera de ActivityDescripción
ArchiverMainEsperando en el bucle principal del proceso archiver.
AutovacuumMainEsperando en el bucle principal del proceso lanzador de autovacuum.
BgwriterHibernateEsperando en el proceso background writer, hibernando.
BgwriterMainEsperando en el bucle principal del proceso background writer.
CheckpointerMainEsperando en el bucle principal del proceso checkpointer.
CheckpointerShutdownEsperando a que se termine el proceso checkpointer.
IoWorkerMainEsperando en el bucle principal del proceso IO Worker.
LogicalApplyMainEsperando en el bucle principal del proceso de aplicación de replicación lógica.
LogicalLauncherMainEsperando en el bucle principal del proceso lanzador de replicación lógica.
LogicalParallelApplyMainEsperando en el bucle principal del proceso de aplicación paralela de replicación lógica.
RecoveryWalStreamEsperando en el bucle principal del proceso de inicio a que llegue el WAL, durante la recuperación por flujo.
ReplicationSlotsyncMainEsperando en el bucle principal del trabajador de sincronización de ranuras.
ReplicationSlotsyncShutdownEsperando a que se apague el trabajador de sincronización de ranuras.
SysloggerMainEsperando en el bucle principal del proceso syslogger.
WalReceiverMainEsperando en el bucle principal del proceso receptor de WAL (WAL receiver).
WalSenderMainEsperando en el bucle principal del proceso emisor de WAL (WAL sender).
WalSummarizerWalEsperando en el resumidor de WAL a que se genere más WAL.
WalWriterMainEsperando en el bucle principal del proceso escritor de WAL (WAL writer).

Table 27.6. Eventos de espera de tipo Bufferpin

Evento de espera de BufferPinDescripción
BufferPinEsperando para adquirir una marca exclusiva (pin) en un búfer.

Table 27.7. Eventos de espera de tipo Client

Evento de espera de ClientDescripción
ClientReadEsperando para leer datos del cliente.
ClientWriteEsperando para escribir datos al cliente.
GssOpenServerEsperando para leer datos del cliente mientras se establece una sesión GSSAPI.
LibpqwalreceiverConnectEsperando en el receptor de WAL para establecer una conexión con el servidor remoto.
LibpqwalreceiverReceiveEsperando en el receptor de WAL para recibir datos del servidor remoto.
SslOpenServerEsperando por SSL mientras se intenta la conexión.
WaitForStandbyConfirmationEsperando a que el WAL sea recibido y vaciado por el servidor en espera (standby) físico.
WalSenderWaitForWalEsperando a que el WAL sea vaciado en el proceso emisor de WAL.
WalSenderWriteDataEsperando cualquier actividad al procesar respuestas del receptor de WAL en el proceso emisor de WAL.

Table 27.8. Eventos de espera de tipo Extension

Evento de espera de ExtensionDescripción
ExtensionEsperando en una extensión.

Table 27.9. Eventos de espera de tipo Io

Evento de espera de IODescripción
AioIoCompletionEsperando a que otro proceso complete la E/S.
AioIoUringExecutionEsperando la ejecución de E/S a través de io_uring.
AioIoUringSubmitEsperando el envío de E/S a través de io_uring.
BasebackupReadEsperando a que la copia de seguridad base lea de un archivo.
BasebackupSyncEsperando a que los datos escritos por una copia de seguridad base lleguen a un almacenamiento duradero.
BasebackupWriteEsperando a que la copia de seguridad base escriba en un archivo.
BuffileReadEsperando una lectura de un archivo con búfer (buffered file).
BuffileTruncateEsperando que se trunque un archivo con búfer.
BuffileWriteEsperando una escritura en un archivo con búfer.
ControlFileReadEsperando una lectura del archivo pg_control.
ControlFileSyncEsperando que el archivo pg_control llegue a un almacenamiento duradero.
ControlFileSyncUpdateEsperando que una actualización del archivo pg_control llegue a un almacenamiento duradero.
ControlFileWriteEsperando una escritura en el archivo pg_control.
ControlFileWriteUpdateEsperando una escritura para actualizar el archivo pg_control.
CopyFileCopyEsperando una operación de copia de archivos.
CopyFileReadEsperando una lectura durante una operación de copia de archivos.
CopyFileWriteEsperando una escritura durante una operación de copia de archivos.
DataFileExtendEsperando a que se extienda un archivo de datos de relación.
DataFileFlushEsperando a que un archivo de datos de relación llegue a un almacenamiento duradero.
DataFileImmediateSyncEsperando una sincronización inmediata de un archivo de datos de relación a un almacenamiento duradero.
DataFilePrefetchEsperando una prelectura asíncrona de un archivo de datos de relación.
DataFileReadEsperando una lectura de un archivo de datos de relación.
DataFileSyncEsperando a que los cambios en un archivo de datos de relación lleguen a un almacenamiento duradero.
DataFileTruncateEsperando a que se trunque un archivo de datos de relación.
DataFileWriteEsperando una escritura en un archivo de datos de relación.
DsmAllocateEsperando a que se asigne un segmento de memoria compartida dinámica.
DsmFillZeroWriteEsperando para llenar con ceros un archivo de respaldo de memoria compartida dinámica.
LockFileAddtodatadirReadEsperando una lectura al agregar una línea al archivo de bloqueo del directorio de datos.
LockFileAddtodatadirSyncEsperando que los datos lleguen a un almacenamiento duradero al agregar una línea al archivo de bloqueo del directorio de datos.
LockFileAddtodatadirWriteEsperando una escritura al agregar una línea al archivo de bloqueo del directorio de datos.
LockFileCreateReadEsperando leer mientras se crea el archivo de bloqueo del directorio de datos.
LockFileCreateSyncEsperando que los datos lleguen a un almacenamiento duradero al crear el archivo de bloqueo del directorio de datos.
LockFileCreateWriteEsperando una escritura al crear el archivo de bloqueo del directorio de datos.
LockFileRecheckdatadirReadEsperando una lectura durante la nueva comprobación del archivo de bloqueo del directorio de datos.
LogicalRewriteCheckpointSyncEsperando que los mapeos de reescritura lógica lleguen a un almacenamiento duradero durante un punto de control.
LogicalRewriteMappingSyncEsperando que los datos de mapeo lleguen a un almacenamiento duradero durante una reescritura lógica.
LogicalRewriteMappingWriteEsperando una escritura de datos de mapeo durante una reescritura lógica.
LogicalRewriteSyncEsperando que los mapeos de reescritura lógica lleguen a un almacenamiento duradero.
LogicalRewriteTruncateEsperando el truncado de los datos de mapeo durante una reescritura lógica.
LogicalRewriteWriteEsperando una escritura de mapeos de reescritura lógica.
RelationMapReadEsperando una lectura del archivo de mapa de relaciones.
RelationMapReplaceEsperando el reemplazo duradero de un archivo de mapa de relaciones.
RelationMapWriteEsperando una escritura en el archivo de mapa de relaciones.
ReorderBufferReadEsperando una lectura durante la gestión del búfer de reordenamiento.
ReorderBufferWriteEsperando una escritura durante la gestión del búfer de reordenamiento.
ReorderLogicalMappingReadEsperando una lectura de un mapeo lógico durante la gestión del búfer de reordenamiento.
ReplicationSlotReadEsperando una lectura de un archivo de control de ranura de replicación.
ReplicationSlotRestoreSyncEsperando que un archivo de control de ranura de replicación llegue a un almacenamiento duradero mientras se restaura en la memoria.
ReplicationSlotSyncEsperando que un archivo de control de ranura de replicación llegue a un almacenamiento duradero.
ReplicationSlotWriteEsperando una escritura en un archivo de control de ranura de replicación.
SlruFlushSyncEsperando que los datos SLRU lleguen a un almacenamiento duradero durante un punto de control o apagado de la base de datos.
SlruReadEsperando una lectura de una página SLRU.
SlruSyncEsperando que los datos SLRU lleguen a un almacenamiento duradero después de una escritura de página.
SlruWriteEsperando una escritura de una página SLRU.
SnapbuildReadEsperando una lectura de una instantánea (snapshot) de catálogo histórico serializada.
SnapbuildSyncEsperando que una instantánea de catálogo histórico serializada llegue a un almacenamiento duradero.
SnapbuildWriteEsperando una escritura de una instantánea de catálogo histórico serializada.
TimelineHistoryFileSyncEsperando que un archivo de historial de línea de tiempo recibido a través de replicación por flujo llegue a un almacenamiento duradero.
TimelineHistoryFileWriteEsperando una escritura de un archivo de historial de línea de tiempo recibido a través de replicación por flujo.
TimelineHistoryReadEsperando una lectura de un archivo de historial de línea de tiempo.
TimelineHistorySyncEsperando que un archivo de historial de línea de tiempo recién creado llegue a un almacenamiento duradero.
TimelineHistoryWriteEsperando una escritura de un archivo de historial de línea de tiempo recién creado.
TwophaseFileReadEsperando una lectura de un archivo de estado de dos fases.
TwophaseFileSyncEsperando que un archivo de estado de dos fases llegue a un almacenamiento duradero.
TwophaseFileWriteEsperando una escritura de un archivo de estado de dos fases.
VersionFileSyncEsperando que el archivo de versión llegue a un almacenamiento duradero mientras se crea una base de datos.
VersionFileWriteEsperando que se escriba el archivo de versión mientras se crea una base de datos.
WalsenderTimelineHistoryReadEsperando una lectura de un archivo de historial de línea de tiempo durante un comando timeline de walsender.
WalBootstrapSyncEsperando que el WAL llegue a un almacenamiento duradero durante la inicialización (bootstrapping).
WalBootstrapWriteEsperando una escritura de una página WAL durante la inicialización.
WalCopyReadEsperando una lectura al crear un nuevo segmento de WAL copiando uno existente.
WalCopySyncEsperando que un nuevo segmento de WAL creado al copiar uno existente llegue a un almacenamiento duradero.
WalCopyWriteEsperando una escritura al crear un nuevo segmento de WAL copiando uno existente.
WalInitSyncEsperando que un archivo de WAL recién inicializado llegue a un almacenamiento duradero.
WalInitWriteEsperando una escritura al inicializar un nuevo archivo de WAL.
WalReadEsperando una lectura de un archivo de WAL.
WalSummaryReadEsperando una lectura de un archivo de resumen de WAL.
WalSummaryWriteEsperando una escritura en un archivo de resumen de WAL.
WalSyncEsperando que un archivo de WAL llegue a un almacenamiento duradero.
WalSyncMethodAssignEsperando que los datos tengan la oportunidad de llegar a un almacenamiento duradero al asignar un nuevo método de sincronización de WAL.
WalWriteEsperando una escritura en un archivo de WAL.

Table 27.10. Eventos de espera de tipo Ipc

Evento de espera de IPCDescripción
AppendReadyEsperando a que los nodos del subplan de un nodo de plan Append estén listos.
ArchiveCleanupCommandEsperando a que se complete archive_cleanup_command.
ArchiveCommandEsperando a que se complete archive_command.
BackendTerminationEsperando la finalización de otro backend.
BackupWaitWalArchiveEsperando a que los archivos WAL requeridos para una copia de seguridad se archiven correctamente.
BgworkerShutdownEsperando a que el trabajador en segundo plano (background worker) se apague.
BgworkerStartupEsperando a que el trabajador en segundo plano se inicie.
BtreePageEsperando a que esté disponible el número de página necesario para continuar un escaneo paralelo de árbol B.
BufferIoEsperando a que se complete la E/S de búfer.
CheckpointDelayCompleteEsperando a un backend que bloquea la finalización de un punto de control.
CheckpointDelayStartEsperando a un backend que bloquea el inicio de un punto de control.
CheckpointDoneEsperando a que se complete un punto de control.
CheckpointStartEsperando a que comience un punto de control.
ExecuteGatherEsperando actividad de un proceso hijo mientras se ejecuta un nodo de plan Gather.
HashBatchAllocateEsperando a que un participante elegido de Parallel Hash asigne una tabla hash.
HashBatchElectEsperando elegir un participante de Parallel Hash para asignar una tabla hash.
HashBatchLoadEsperando a que otros participantes de Parallel Hash terminen de cargar una tabla hash.
HashBuildAllocateEsperando a que un participante elegido de Parallel Hash asigne la tabla hash inicial.
HashBuildElectEsperando elegir un participante de Parallel Hash para asignar la tabla hash inicial.
HashBuildHashInnerEsperando a que otros participantes de Parallel Hash terminen de aplicar la función hash a la relación interna.
HashBuildHashOuterEsperando a que otros participantes de Parallel Hash terminen de particionar la relación externa.
HashGrowBatchesDecideEsperando elegir un participante de Parallel Hash para decidir sobre el crecimiento futuro de lotes.
HashGrowBatchesElectEsperando elegir un participante de Parallel Hash para asignar más lotes.
HashGrowBatchesFinishEsperando a que un participante elegido de Parallel Hash decida sobre el crecimiento futuro de lotes.
HashGrowBatchesReallocateEsperando a que un participante elegido de Parallel Hash asigne más lotes.
HashGrowBatchesRepartitionEsperando a que otros participantes de Parallel Hash terminen de reparticionar.
HashGrowBucketsElectEsperando elegir un participante de Parallel Hash para asignar más contenedores (buckets).
HashGrowBucketsReallocateEsperando a que un participante elegido de Parallel Hash termine de asignar más contenedores.
HashGrowBucketsReinsertEsperando a que otros participantes de Parallel Hash terminen de insertar tuplas en los nuevos contenedores.
LogicalApplySendDataEsperando a que un proceso de aplicación del líder de replicación lógica envíe datos a un proceso de aplicación paralelo.
LogicalParallelApplyStateChangeEsperando a que un proceso de aplicación paralelo de replicación lógica cambie de estado.
LogicalSyncDataEsperando a que un servidor remoto de replicación lógica envíe datos para la sincronización inicial de la tabla.
LogicalSyncStateChangeEsperando a que un servidor remoto de replicación lógica cambie de estado.
MessageQueueInternalEsperando a que otro proceso se asocie a una cola de mensajes compartida.
MessageQueuePutMessageEsperando para escribir un mensaje de protocolo en una cola de mensajes compartida.
MessageQueueReceiveEsperando recibir bytes de una cola de mensajes compartida.
MessageQueueSendEsperando enviar bytes a una cola de mensajes compartida.
MultixactCreationEsperando a que se complete la creación de una multixact.
ParallelBitmapScanEsperando a que se inicialice el escaneo de mapa de bits paralelo.
ParallelCreateIndexScanEsperando a que los trabajadores de CREATE INDEX en paralelo terminen el escaneo de heap.
ParallelFinishEsperando a que los trabajadores paralelos terminen de calcular.
ProcarrayGroupUpdateEsperando a que el líder del grupo borre el ID de transacción al finalizar la transacción.
ProcSignalBarrierEsperando a que un evento de barrera sea procesado por todos los backends.
PromoteEsperando la promoción del servidor en espera (standby).
RecoveryConflictSnapshotEsperando la resolución de conflicto de recuperación para una limpieza de vacuum.
RecoveryConflictTablespaceEsperando la resolución de conflicto de recuperación para la eliminación de un tablespace.
RecoveryEndCommandEsperando a que se complete recovery_end_command.
RecoveryPauseEsperando a que se reanude la recuperación.
ReplicationOriginDropEsperando a que un origen de replicación quede inactivo para poder eliminarlo.
ReplicationSlotDropEsperando a que una ranura de replicación quede inactiva para poder eliminarla.
RestoreCommandEsperando a que se complete restore_command.
SafeSnapshotEsperando obtener una instantánea válida para una transacción READ ONLY DEFERRABLE.
SyncRepEsperando confirmación de un servidor remoto durante la replicación síncrona.
WalReceiverExitEsperando a que salga el receptor de WAL.
WalReceiverWaitStartEsperando a que el proceso de inicio envíe datos iniciales para la replicación por flujo.
WalSummaryReadyEsperando a que se genere un nuevo resumen de WAL.
XactGroupUpdateEsperando a que el líder del grupo actualice el estado de la transacción al finalizar la transacción.

Table 27.11. Eventos de espera de tipo Lock

Evento de espera de LockDescripción
advisoryEsperando para adquirir un bloqueo de usuario consultivo (advisory).
applytransactionEsperando para adquirir un bloqueo en una transacción remota que está siendo aplicada por un suscriptor de replicación lógica.
extendEsperando para extender una relación.
frozenidEsperando para actualizar pg_database.datfrozenxid y pg_database.datminmxid.
objectEsperando para adquirir un bloqueo en un objeto de base de datos que no sea una relación.
pageEsperando para adquirir un bloqueo en una página de una relación.
relationEsperando para adquirir un bloqueo en una relación.
spectokenEsperando para adquirir un bloqueo de inserción especulativa.
transactionidEsperando a que termine una transacción.
tupleEsperando para adquirir un bloqueo en una tupla.
userlockEsperando para adquirir un bloqueo de usuario.
virtualxidEsperando para adquirir un bloqueo de ID de transacción virtual; consulta Section 67.1.

Table 27.12. Eventos de espera de tipo Lwlock

Evento de espera de LWLockDescripción
AddinShmemInitEsperando para gestionar la asignación de espacio de una extensión en la memoria compartida.
AioUringCompletionEsperando a que otro proceso complete la E/S a través de io_uring.
AioWorkerSubmissionQueueEsperando acceder a la cola de envío de los trabajadores AIO.
AutoFileEsperando para actualizar el archivo postgresql.auto.conf.
AutovacuumEsperando para leer o actualizar el estado actual de los trabajadores de autovacuum.
AutovacuumScheduleEsperando asegurar que una tabla seleccionada para autovacuum todavía necesita vacuum.
BackgroundWorkerEsperando para leer o actualizar el estado del trabajador en segundo plano.
BtreeVacuumEsperando para leer o actualizar información relacionada con el vacuum para un índice de árbol B.
BufferContentEsperando acceder a una página de datos en memoria.
BufferMappingEsperando asociar un bloque de datos con un búfer en el buffer pool.
CheckpointerCommEsperando gestionar solicitudes de fsync.
CommitTsEsperando para leer o actualizar el último valor establecido para una marca de tiempo de confirmación de transacción.
CommitTsBufferEsperando E/S en un búfer SLRU de marcas de tiempo de confirmación.
CommitTsSLRUEsperando acceder a la caché SLRU de marcas de tiempo de confirmación.
ControlFileEsperando para leer o actualizar el archivo pg_control o crear un nuevo archivo de WAL.
DSMRegistryEsperando para leer o actualizar el registro de memoria compartida dinámica.
DSMRegistryDSAEsperando acceder al asignador de memoria compartida dinámica del registro de memoria compartida dinámica.
DSMRegistryHashEsperando acceder a la tabla hash compartida del registro de memoria compartida dinámica.
DynamicSharedMemoryControlEsperando para leer o actualizar información de asignación de memoria compartida dinámica.
InjectionPointEsperando para leer o actualizar información relacionada con puntos de inyección.
LockFastPathEsperando para leer o actualizar la información de bloqueo por vía rápida (fast-path) de un proceso.
LockManagerEsperando para leer o actualizar información sobre bloqueos pesados (heavyweight).
LogicalRepLauncherDSAEsperando acceder al asignador de memoria compartida dinámica del lanzador de replicación lógica.
LogicalRepLauncherHashEsperando acceder a la tabla hash compartida del lanzador de replicación lógica.
LogicalRepWorkerEsperando para leer o actualizar el estado de los trabajadores de replicación lógica.
MultiXactGenEsperando para leer o actualizar el estado compartido de multixact.
MultiXactMemberBufferEsperando E/S en un búfer SLRU de miembros de multixact.
MultiXactMemberSLRUEsperando acceder a la caché SLRU de miembros de multixact.
MultiXactOffsetBufferEsperando E/S en un búfer SLRU de desplazamientos (offsets) de multixact.
MultiXactOffsetSLRUEsperando acceder a la caché SLRU de desplazamientos de multixact.
MultiXactTruncationEsperando para leer o truncar información de multixact.
NotifyBufferEsperando E/S en un búfer SLRU de mensajes de NOTIFY.
NotifyQueueEsperando para leer o actualizar mensajes de NOTIFY.
NotifyQueueTailEsperando para actualizar el límite en el almacenamiento de mensajes de NOTIFY.
NotifySLRUEsperando acceder a la caché SLRU de mensajes de NOTIFY.
OidGenEsperando para asignar un nuevo OID.
ParallelAppendEsperando elegir el siguiente subplan durante la ejecución del plan Parallel Append.
ParallelBtreeScanEsperando sincronizar trabajadores durante la ejecución del plan de escaneo de árbol B paralelo.
ParallelHashJoinEsperando sincronizar trabajadores durante la ejecución del plan de unión hash paralela (Parallel Hash Join).
ParallelQueryDSAEsperando la asignación de memoria compartida dinámica para la consulta paralela.
ParallelVacuumDSAEsperando la asignación de memoria compartida dinámica para el vacuum paralelo.
PerSessionDSAEsperando la asignación de memoria compartida dinámica para la consulta paralela.
PerSessionRecordTypeEsperando acceder a la información de una consulta paralela sobre tipos compuestos.
PerSessionRecordTypmodEsperando acceder a la información de una consulta paralela sobre modificadores de tipo que identifican tipos de registros anónimos.
PerXactPredicateListEsperando acceder a la lista de bloqueos de predicado mantenidos por la transacción serializable actual durante una consulta paralela.
PgStatsDataEsperando el acceso a los datos de estadísticas en memoria compartida.
PgStatsDSAEsperando el acceso al asignador de memoria compartida dinámica para estadísticas.
PgStatsHashEsperando el acceso a la tabla hash de estadísticas en memoria compartida.
PredicateLockManagerEsperando acceder a la información de bloqueos de predicado utilizada por transacciones serializables.
ProcArrayEsperando acceder a las estructuras de datos compartidas por proceso (normalmente, para obtener una instantánea o informar el ID de transacción de una sesión).
RelationMappingEsperando para leer o actualizar un archivo pg_filenode.map (utilizado para rastrear las asignaciones de filenode de ciertos catálogos del sistema).
RelCacheInitEsperando para leer o actualizar un archivo de inicialización de caché de relaciones pg_internal.init.
ReplicationOriginEsperando para crear, eliminar o usar un origen de replicación.
ReplicationOriginStateEsperando para leer o actualizar el progreso de un origen de replicación.
ReplicationSlotAllocationEsperando para asignar o liberar una ranura de replicación.
ReplicationSlotControlEsperando para leer o actualizar el estado de la ranura de replicación.
ReplicationSlotIOEsperando E/S en una ranura de replicación.
SerialBufferEsperando E/S en un búfer SLRU de conflictos de transacciones serializables.
SerialControlEsperando para leer o actualizar el estado compartido de pg_serial.
SerializableFinishedListEsperando acceder a la lista de transacciones serializables finalizadas.
SerializablePredicateListEsperando acceder a la lista de bloqueos de predicado mantenidos por transacciones serializables.
SerializableXactHashEsperando para leer o actualizar información sobre transacciones serializables.
SerialSLRUEsperando acceder a la caché SLRU de conflictos de transacciones serializables.
SharedTidBitmapEsperando acceder a un mapa de bits TID compartido durante un escaneo de índice de mapa de bits paralelo.
SharedTupleStoreEsperando acceder a un almacén de tuplas compartido durante una consulta paralela.
ShmemIndexEsperando encontrar o asignar espacio en la memoria compartida.
SInvalReadEsperando recuperar mensajes de la cola de invalidación del catálogo compartida.
SInvalWriteEsperando agregar un mensaje a la cola de invalidación del catálogo compartida.
SubtransBufferEsperando E/S en un búfer SLRU de subtransacciones.
SubtransSLRUEsperando acceder a la caché SLRU de subtransacciones.
SyncRepEsperando para leer o actualizar información sobre el estado de la replicación síncrona.
SyncScanEsperando seleccionar la ubicación inicial de un escaneo de tabla sincronizado.
TablespaceCreateEsperando para crear o eliminar un tablespace.
TwoPhaseStateEsperando para leer o actualizar el estado de las transacciones preparadas.
WaitEventCustomEsperando para leer o actualizar la información de eventos de espera personalizados.
WALBufMappingEsperando reemplazar una página en los buffers de WAL.
WALInsertEsperando para insertar datos WAL en un búfer de memoria.
WALSummarizerEsperando para leer o actualizar el estado de la resumulación de WAL.
WALWriteEsperando a que los buffers de WAL se escriban en el disco.
WrapLimitsVacuumEsperando actualizar los límites en el ID de transacción y el consumo de multixact.
XactBufferEsperando E/S en un búfer SLRU de estado de transacción.
XactSLRUEsperando acceder a la caché SLRU de estado de transacción.
XactTruncationEsperando para ejecutar pg_xact_status o actualizar el ID de transacción más antiguo disponible para ella.
XidGenEsperando para asignar un nuevo ID de transacción.

Table 27.13. Eventos de espera de tipo Timeout

Evento de espera de TimeoutDescripción
BaseBackupThrottleEsperando durante la copia de seguridad base al regular la actividad.
CheckpointWriteDelayEsperando entre escrituras mientras se realiza un punto de control.
PgSleepEsperando debido a una llamada a pg_sleep o a una función hermana.
RecoveryApplyDelayEsperando para aplicar WAL durante la recuperación debido a una configuración de retraso.
RecoveryRetrieveRetryIntervalEsperando durante la recuperación cuando los datos WAL no están disponibles en ninguna fuente (pg_wal, archivo o flujo).
RegisterSyncRequestEsperando mientras se envían solicitudes de sincronización al checkpointer, porque la cola de solicitudes está llena.
SpinDelayEsperando mientras se adquiere un spinlock con contención.
VacuumDelayEsperando en un punto de retraso de vacuum basado en costos.
VacuumTruncateEsperando adquirir un bloqueo exclusivo para truncar las páginas vacías al final de una tabla que ha sido objeto de vacuum.
WalSummarizerErrorEsperando después de un error del resumidor de WAL.

Here are examples of how wait events can be viewed:

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          | ProcArray
(2 rows)

SELECT a.pid, a.wait_event, w.description
  FROM pg_stat_activity a JOIN
       pg_wait_events w ON (a.wait_event_type = w.type AND
                            a.wait_event = w.name)
  WHERE a.wait_event is NOT NULL and a.state = 'active';
-[ RECORD 1 ]------------------------------------------------------​------------
pid         | 686674
wait_event  | WALInitSync
description | Waiting for a newly initialized WAL file to reach durable storage

Note

Extensions can add Extension, InjectionPoint, and LWLock events to the lists shown in Table 27.8 and Table 27.12. In some cases, the name of an LWLock assigned by an extension will not be available in all server processes. It might be reported as just extension rather than the extension-assigned name.

27.2.4. pg_stat_replication #

The pg_stat_replication 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.

Table 27.14. pg_stat_replication View

Column Type

Description

pid integer

Process ID of a WAL sender process

usesysid oid

OID of the user logged into this WAL sender process

usename name

Name of the user logged into this WAL sender process

application_name text

Name of the application that is connected to this WAL sender

client_addr inet

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.

client_hostname text

Host name of the connected client, as reported by a reverse DNS lookup of client_addr. This field will only be non-null for IP connections, and only when log_hostname is enabled.

client_port integer

TCP port number that the client is using for communication with this WAL sender, or -1 if a Unix socket is used

backend_start timestamp with time zone

Time when this process was started, i.e., when the client connected to this WAL sender

backend_xmin xid

This standby's xmin horizon reported by hot_standby_feedback.

state text

Current WAL sender state. Possible values are:

  • startup: This WAL sender is starting up.

  • catchup: This WAL sender's connected standby is catching up with the primary.

  • streaming: This WAL sender is streaming changes after its connected standby server has caught up with the primary.

  • backup: This WAL sender is sending a backup.

  • stopping: This WAL sender is stopping.

sent_lsn pg_lsn

Last write-ahead log location sent on this connection

write_lsn pg_lsn

Last write-ahead log location written to disk by this standby server

flush_lsn pg_lsn

Last write-ahead log location flushed to disk by this standby server

replay_lsn pg_lsn

Last write-ahead log location replayed into the database on this standby server

write_lag interval

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 synchronous_commit level remote_write incurred while committing if this server was configured as a synchronous standby.

flush_lag interval

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 synchronous_commit level on incurred while committing if this server was configured as a synchronous standby.

replay_lag interval

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 synchronous_commit level remote_apply incurred while committing if this server was configured as a synchronous standby.

sync_priority integer

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.

sync_state text

Synchronous state of this standby server. Possible values are:

  • async: This standby server is asynchronous.

  • potential: This standby server is now asynchronous, but can potentially become synchronous if one of current synchronous ones fails.

  • sync: This standby server is synchronous.

  • quorum: This standby server is considered as a candidate for quorum standbys.

reply_time timestamp with time zone

Send time of last reply message received from standby server


The lag times reported in the pg_stat_replication 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 replay_lag 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.

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.

Note

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, pg_stat_replication 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.

27.2.5. pg_stat_replication_slots #

The pg_stat_replication_slots view will contain one row per logical replication slot, showing statistics about its usage.

Table 27.15. pg_stat_replication_slots View

Column Type

Description

slot_name text

A unique, cluster-wide identifier for the replication slot

spill_txns bigint

Number of transactions spilled to disk once the memory used by logical decoding to decode changes from WAL has exceeded logical_decoding_work_mem. The counter gets incremented for both top-level transactions and subtransactions.

spill_count bigint

Number of times transactions were spilled to disk while decoding changes from WAL for this slot. This counter is incremented each time a transaction is spilled, and the same transaction may be spilled multiple times.

spill_bytes bigint

Amount of decoded transaction data spilled to disk while performing decoding of changes from WAL for this slot. This and other spill counters can be used to gauge the I/O which occurred during logical decoding and allow tuning logical_decoding_work_mem.

stream_txns bigint

Number of in-progress transactions streamed to the decoding output plugin after the memory used by logical decoding to decode changes from WAL for this slot has exceeded logical_decoding_work_mem. Streaming only works with top-level transactions (subtransactions can't be streamed independently), so the counter is not incremented for subtransactions.

stream_countbigint

Número de veces que las transacciones en curso se transmitieron al plugin de salida de decodificación al decodificar los cambios del WAL para este slot. Este contador se incrementa cada vez que se transmite una transacción, y la misma transacción puede transmitirse varias veces.

stream_bytesbigint

Cantidad de datos de transacción decodificados para la transmisión de transacciones en curso al plugin de salida de decodificación al decodificar los cambios del WAL para este slot. Este y otros contadores de transmisión para este slot se pueden utilizar para ajustar logical_decoding_work_mem.

total_txns bigint

Número de transacciones decodificadas enviadas al plugin de salida de decodificación para este slot. Esto cuenta solo transacciones de nivel superior, y no se incrementa para subtransacciones. Ten en cuenta que esto incluye las transacciones que se transmiten y/o se descargan (spilled).

total_bytesbigint

Cantidad de datos de transacciones decodificados para enviar transacciones al plugin de salida de decodificación al decodificar los cambios del WAL para este slot. Ten en cuenta que esto incluye los datos que se transmiten y/o se descargan.

stats_reset timestamp with time zone

Hora en la que estas estadísticas se restablecieron por última vez


27.2.6. pg_stat_wal_receiver #

La vista pg_stat_wal_receiver contendrá solo una fila, mostrando estadísticas sobre el receptor de WAL (WAL receiver) desde el servidor conectado a ese receptor.

Table 27.16. Vista pg_stat_wal_receiver

Tipo de columna

Descripción

pid integer

ID de proceso del proceso receptor de WAL

status text

Estado de actividad del proceso receptor de WAL

receive_start_lsn pg_lsn

Primera ubicación del registro de escritura anticipada (WAL) utilizada cuando se inicia el receptor de WAL

receive_start_tli integer

Primer número de línea de tiempo (timeline) utilizado cuando se inicia el receptor de WAL

written_lsn pg_lsn

Última ubicación del registro de escritura anticipada (WAL) ya recibida y escrita en disco, pero no vaciada. Esto no debe usarse para comprobaciones de integridad de datos.

flushed_lsn pg_lsn

Última ubicación del registro de escritura anticipada (WAL) ya recibida y vaciada a disco, siendo el valor inicial de este campo la primera ubicación de registro utilizada cuando se inicia el receptor de WAL

received_tli integer

Número de línea de tiempo (timeline) de la última ubicación del registro de escritura anticipada (WAL) recibida y vaciada a disco, siendo el valor inicial de este campo el número de línea de tiempo de la primera ubicación de registro utilizada cuando se inicia el receptor de WAL

last_msg_send_time timestamp with time zone

Hora de envío del último mensaje recibido desde el emisor de WAL (WAL sender) de origen

last_msg_receipt_time timestamp with time zone

Hora de recepción del último mensaje recibido desde el emisor de WAL de origen

latest_end_lsn pg_lsn

Última ubicación del registro de escritura anticipada (WAL) reportada al emisor de WAL de origen

latest_end_time timestamp with time zone

Hora de la última ubicación del registro de escritura anticipada (WAL) reportada al emisor de WAL de origen

slot_name text

Nombre del slot de replicación utilizado por este receptor de WAL

sender_host text

Host de la instancia de PostgreSQL a la que está conectado este receptor de WAL. Puede ser un nombre de host, una dirección IP o una ruta de directorio si la conexión es a través de un socket Unix. (El caso de la ruta se puede distinguir porque siempre será una ruta absoluta, que comienza con /).

sender_port integer

Número de puerto de la instancia de PostgreSQL a la que está conectado este receptor de WAL.

conninfo text

Cadena de conexión utilizada por este receptor de WAL, con los campos sensibles a la seguridad ocultos.


27.2.7. pg_stat_recovery_prefetch #

La vista pg_stat_recovery_prefetch contendrá una sola fila. Las columnas wal_distance, block_distance e io_depth muestran valores actuales, y las otras columnas muestran contadores acumulativos que se pueden restablecer con la función pg_stat_reset_shared.

Table 27.17. Vista pg_stat_recovery_prefetch

Tipo de columna

Descripción

stats_reset timestamp with time zone

Hora en la que estas estadísticas se restablecieron por última vez

prefetch bigint

Número de bloques precargados (prefetched) porque no estaban en el pool de búferes (buffer pool)

hit bigint

Número de bloques no precargados porque ya estaban en el pool de búferes

skip_init bigint

Número de bloques no precargados porque se inicializarían a cero

skip_new bigint

Número de bloques no precargados porque aún no existían

skip_fpw bigint

Número de bloques no precargados porque se incluyó una imagen de página completa en el WAL

skip_rep bigint

Número de bloques no precargados porque ya se habían precargado recientemente

wal_distance int

Cuántos bytes por delante está buscando el prefetcher

block_distance int

Cuántos bloques por delante está buscando el prefetcher

io_depth int

Cuántas precargas se han iniciado pero aún no se sabe si se han completado


27.2.8. pg_stat_subscription #

Table 27.18. Vista pg_stat_subscription

Columna Tipo

Descripción

subid oid

OID de la suscripción

subname name

Nombre de la suscripción

worker_type text

Tipo de proceso worker de la suscripción. Los tipos posibles son apply, parallel apply, y table synchronization.

pid integer

ID de proceso del proceso worker de la suscripción

leader_pid integer

ID de proceso del worker apply líder si este proceso es un worker parallel apply; NULL si este proceso es un worker apply líder o un worker de table synchronization

relid oid

OID de la relación que el worker está sincronizando; NULL para el worker apply líder y los workers parallel apply

received_lsn pg_lsn

Última ubicación del write-ahead log recibida, siendo 0 el valor inicial de este campo; NULL para los workers parallel apply

last_msg_send_time timestamp with time zone

Hora de envío del último mensaje recibido desde el WAL sender de origen; NULL para los workers parallel apply

last_msg_receipt_time timestamp with time zone

Hora de recepción del último mensaje recibido desde el WAL sender de origen; NULL para los workers parallel apply

latest_end_lsn pg_lsn

Última ubicación del write-ahead log reportada al WAL sender de origen; NULL para los workers parallel apply

latest_end_time timestamp with time zone

Hora de la última ubicación del write-ahead log reportada al WAL sender de origen; NULL para los workers parallel apply


27.2.9. pg_stat_subscription_stats #

La vista pg_stat_subscription_stats contendrá una fila por suscripción.

Table 27.19. Vista pg_stat_subscription_stats

Columna Tipo

Descripción

subid oid

OID de la suscripción

subname name

Nombre de la suscripción

apply_error_count bigint

Número de veces que ocurrió un error al aplicar cambios. Ten en cuenta que cualquier conflicto que resulte en un error de aplicación se contará tanto en apply_error_count como en el recuento de conflictos correspondiente (por ejemplo, confl_*).

sync_error_count bigint

Número de veces que ocurrió un error durante la sincronización inicial de tablas

confl_insert_exists bigint

Número de veces que la inserción de una fila violó una restricción única NOT DEFERRABLE durante la aplicación de cambios. Consulta la insert_exists para obtener detalles sobre este conflicto.

confl_update_origin_differs bigint

Número de veces que se aplicó una actualización a una fila que había sido modificada previamente por otra fuente durante la aplicación de cambios. Consulta la update_origin_differs para obtener detalles sobre este conflicto.

confl_update_exists bigint

Número de veces que un valor de fila actualizado violó una restricción única NOT DEFERRABLE durante la aplicación de cambios. Consulta la update_exists para obtener detalles sobre este conflicto.

confl_update_missing bigint

Número de veces que no se encontró la tupla a actualizar durante la aplicación de cambios. Consulta la update_missing para obtener detalles sobre este conflicto.

confl_delete_origin_differs bigint

Número de veces que se aplicó una operación de eliminación a una fila que había sido modificada previamente por otra fuente durante la aplicación de cambios. Consulta la delete_origin_differs para obtener detalles sobre este conflicto.

confl_delete_missing bigint

Número de veces que no se encontró la tupla a eliminar durante la aplicación de cambios. Consulta la delete_missing para obtener detalles sobre este conflicto.

confl_multiple_unique_conflicts bigint

Número de veces que la inserción de una fila o los valores de una fila actualizada violaron múltiples restricciones únicas NOT DEFERRABLE durante la aplicación de cambios. Consulta la multiple_unique_conflicts para obtener detalles sobre este conflicto.

stats_reset timestamp with time zone

Momento en el que se reiniciaron estas estadísticas por última vez


27.2.10. pg_stat_ssl #

La vista pg_stat_ssl contendrá una fila por proceso de backend o WAL sender, mostrando estadísticas sobre el uso de SSL en esta conexión. Se puede asociar con pg_stat_activity o pg_stat_replication en la columna pid para obtener más detalles sobre la conexión.

Table 27.20. Vista pg_stat_ssl

Columna Tipo

Descripción

pid integer

ID de proceso de un proceso de backend o WAL sender

ssl boolean

True si se usa SSL en esta conexión

version text

Versión de SSL en uso, o NULL si no se usa SSL en esta conexión

cipher text

Nombre del cifrado SSL en uso, o NULL si no se usa SSL en esta conexión

bits integer

Número de bits en el algoritmo de cifrado utilizado, o NULL si no se usa SSL en esta conexión

client_dn text

Campo Distinguished Name (DN) del certificado del cliente utilizado, o NULL si no se proporcionó ningún certificado de cliente o si SSL no está en uso en esta conexión. Este campo se trunca si el campo DN es más largo que NAMEDATALEN (64 caracteres en una compilación estándar).

client_serial numeric

Número de serie del certificado del cliente, o NULL si no se proporcionó ningún certificado de cliente o si SSL no está en uso en esta conexión. La combinación del número de serie del certificado y el emisor del certificado identifica de forma única un certificado (a menos que el emisor reutilice erróneamente los números de serie).

issuer_dn text

DN del emisor del certificado del cliente, o NULL si no se proporcionó ningún certificado de cliente o si SSL no está en uso en esta conexión. Este campo se trunca al igual que client_dn.


27.2.11. pg_stat_gssapi #

La vista pg_stat_gssapi contendrá una fila por backend, mostrando información sobre el uso de GSSAPI en esta conexión. Se puede asociar con pg_stat_activity o pg_stat_replication en la columna pid para obtener más detalles sobre la conexión.

Table 27.21. Vista pg_stat_gssapi

Columna Tipo

Descripción

pid integer

ID de proceso de un backend

gss_authenticated boolean

True si se usó la autenticación GSSAPI para esta conexión

principal text

Principal utilizado para autenticar esta conexión, o NULL si no se usó GSSAPI para autenticar esta conexión. Este campo se trunca si el principal es más largo que NAMEDATALEN (64 caracteres en una compilación estándar).

encrypted boolean

True si el cifrado GSSAPI está en uso en esta conexión

credentials_delegated boolean

True si las credenciales GSSAPI fueron delegadas en esta conexión.


27.2.12. pg_stat_archiver #

La vista pg_stat_archiver siempre tendrá una única fila, que contiene datos sobre el proceso archiver del cluster.

Table 27.22. Vista pg_stat_archiver

Columna Tipo

Descripción

archived_count bigint

Número de archivos WAL que se han archivado correctamente

last_archived_wal text

Nombre del archivo WAL archivado correctamente más reciente

last_archived_time timestamp with time zone

Hora de la operación de archivado exitosa más reciente

failed_count bigint

Número de intentos fallidos de archivado de archivos WAL

last_failed_wal text

Nombre del archivo WAL de la operación de archivado fallida más reciente

last_failed_time timestamp with time zone

Hora de la operación de archivado fallida más reciente

stats_reset timestamp with time zone

Momento en el que se reiniciaron estas estadísticas por última vez


Normalmente, los archivos WAL se archivan en orden, del más antiguo al más nuevo, pero eso no está garantizado y no se cumple en circunstancias especiales como al promover un standby o después de la recuperación de una caída. Por lo tanto, no es seguro asumir que todos los archivos anteriores a last_archived_wal también se han archivado correctamente.

27.2.13. pg_stat_io #

The pg_stat_io view will contain one row for each combination of backend type, target I/O object, and I/O context, showing cluster-wide I/O statistics. Combinations which do not make sense are omitted.

Currently, I/O on relations (e.g. tables, indexes) and WAL activity are tracked. However, relation I/O which bypasses shared buffers (e.g. when moving a table from one tablespace to another) is currently not tracked.

Table 27.23. pg_stat_io View

Column Type

Description

backend_type text

Type of backend (e.g. background worker, autovacuum worker). See pg_stat_activity for more information on backend_types. Some backend_types do not accumulate I/O operation statistics and will not be included in the view.

object text

Target object of an I/O operation. Possible values are:

  • relation: Permanent relations.

  • temp relation: Temporary relations.

  • wal: Write Ahead Logs.

context text

The context of an I/O operation. Possible values are:

  • normal: The default or standard context for a type of I/O operation. For example, by default, relation data is read into and written out from shared buffers. Thus, reads and writes of relation data to and from shared buffers are tracked in context normal.

  • init: I/O operations performed while creating the WAL segments are tracked in context init.

  • vacuum: I/O operations performed outside of shared buffers while vacuuming and analyzing permanent relations. Temporary table vacuums use the same local buffer pool as other temporary table I/O operations and are tracked in context normal.

  • bulkread: Certain large read I/O operations done outside of shared buffers, for example, a sequential scan of a large table.

  • bulkwrite: Certain large write I/O operations done outside of shared buffers, such as COPY.

reads bigint

Number of read operations.

read_bytes numeric

The total size of read operations in bytes.

read_time double precision

Time spent waiting for read operations in milliseconds (if track_io_timing is enabled and object is not wal, or if track_wal_io_timing is enabled and object is wal, otherwise zero)

writes bigint

Number of write operations.

write_bytes numeric

The total size of write operations in bytes.

write_time double precision

Time spent waiting for write operations in milliseconds (if track_io_timing is enabled and object is not wal, or if track_wal_io_timing is enabled and object is wal, otherwise zero)

writebacks bigint

Number of units of size BLCKSZ (typically 8kB) which the process requested the kernel write out to permanent storage.

writeback_time double precision

Time spent waiting for writeback operations in milliseconds (if track_io_timing is enabled, otherwise zero). This includes the time spent queueing write-out requests and, potentially, the time spent to write out the dirty data.

extends bigint

Number of relation extend operations.

extend_bytes numeric

The total size of relation extend operations in bytes.

extend_time double precision

Time spent waiting for extend operations in milliseconds. (if track_io_timing is enabled and object is not wal, or if track_wal_io_timing is enabled and object is wal, otherwise zero)

hits bigint

The number of times a desired block was found in a shared buffer.

evictions bigint

Number of times a block has been written out from a shared or local buffer in order to make it available for another use.

In context normal, this counts the number of times a block was evicted from a buffer and replaced with another block. In contexts bulkwrite, bulkread, and vacuum, this counts the number of times a block was evicted from shared buffers in order to add the shared buffer to a separate, size-limited ring buffer for use in a bulk I/O operation.

reuses bigint

The number of times an existing buffer in a size-limited ring buffer outside of shared buffers was reused as part of an I/O operation in the bulkread, bulkwrite, or vacuum contexts.

fsyncs bigint

Number of fsync calls. These are only tracked in context normal.

fsync_time double precision

Time spent waiting for fsync operations in milliseconds (if track_io_timing is enabled and object is not wal, or if track_wal_io_timing is enabled and object is wal, otherwise zero)

stats_reset timestamp with time zone

Time at which these statistics were last reset.


Some backend types never perform I/O operations on some I/O objects and/or in some I/O contexts. These rows are omitted from the view. For example, the checkpointer does not checkpoint temporary tables, so there will be no rows for backend_type checkpointer and object temp relation.

In addition, some I/O operations will never be performed either by certain backend types or on certain I/O objects and/or in certain I/O contexts. These cells will be NULL. For example, temporary tables are not fsynced, so fsyncs will be NULL for object temp relation. Also, the background writer does not perform reads, so reads will be NULL in rows for backend_type background writer.

For the object wal, fsyncs and fsync_time track the fsync activity of WAL files done in issue_xlog_fsync. writes and write_time track the write activity of WAL files done in XLogWrite. See Section 28.5 for more information.

pg_stat_io can be used to inform database tuning. For example:

  • A high evictions count can indicate that shared buffers should be increased.

  • Client backends rely on the checkpointer to ensure data is persisted to permanent storage. Large numbers of fsyncs by client backends could indicate a misconfiguration of shared buffers or of the checkpointer. More information on configuring the checkpointer can be found in Section 28.5.

  • Normally, client backends should be able to rely on auxiliary processes like the checkpointer and the background writer to write out dirty data as much as possible. Large numbers of writes by client backends could indicate a misconfiguration of shared buffers or of the checkpointer. More information on configuring the checkpointer can be found in Section 28.5.

Note

Columns tracking I/O wait time will only be non-zero when track_io_timing is enabled. The user should be careful when referencing these columns in combination with their corresponding I/O operations in case track_io_timing was not enabled for the entire time since the last stats reset.

27.2.14. pg_stat_bgwriter #

The pg_stat_bgwriter view will always have a single row, containing data about the background writer of the cluster.

Table 27.24. pg_stat_bgwriter View

Column Type

Description

buffers_clean bigint

Number of buffers written by the background writer

maxwritten_clean bigint

Number of times the background writer stopped a cleaning scan because it had written too many buffers

buffers_alloc bigint

Number of buffers allocated

stats_reset timestamp with time zone

Time at which these statistics were last reset


27.2.15. pg_stat_checkpointer #

The pg_stat_checkpointer view will always have a single row, containing data about the checkpointer process of the cluster.

Table 27.25. pg_stat_checkpointer View

Column Type

Description

num_timed bigint

Number of scheduled checkpoints due to timeout

num_requested bigint

Number of requested checkpoints

num_done bigint

Number of checkpoints that have been performed

restartpoints_timed bigint

Number of scheduled restartpoints due to timeout or after a failed attempt to perform it

restartpoints_req bigint

Number of requested restartpoints

restartpoints_done bigint

Number of restartpoints that have been performed

write_time double precision

Total amount of time that has been spent in the portion of processing checkpoints and restartpoints where files are written to disk, in milliseconds

sync_time double precision

Total amount of time that has been spent in the portion of processing checkpoints and restartpoints where files are synchronized to disk, in milliseconds

buffers_written bigint

Number of shared buffers written during checkpoints and restartpoints

slru_written bigint

Number of SLRU buffers written during checkpoints and restartpoints

stats_reset timestamp with time zone

Time at which these statistics were last reset


Checkpoints may be skipped if the server has been idle since the last one. num_timed and num_requested count both completed and skipped checkpoints, while num_done tracks only the completed ones. Similarly, restartpoints may be skipped if the last replayed checkpoint record is already the last restartpoint. restartpoints_timed and restartpoints_req count both completed and skipped restartpoints, while restartpoints_done tracks only the completed ones.

27.2.16. pg_stat_wal #

The pg_stat_wal view will always have a single row, containing data about WAL activity of the cluster.

Table 27.26. pg_stat_wal View

Column Type

Description

wal_records bigint

Total number of WAL records generated

wal_fpi bigint

Total number of WAL full page images generated

wal_bytes numeric

Total amount of WAL generated in bytes

wal_buffers_full bigint

Number of times WAL data was written to disk because WAL buffers became full

stats_reset timestamp with time zone

Time at which these statistics were last reset


27.2.17. pg_stat_database #

The pg_stat_database view will contain one row for each database in the cluster, plus one for shared objects, showing database-wide statistics.

Table 27.27. pg_stat_database View

Column Type

Description

datid oid

OID of this database, or 0 for objects belonging to a shared relation

datname name

Name of this database, or NULL for shared objects.

numbackends integer

Number of backends currently connected to this database, or NULL for shared objects. 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.

xact_commit bigint

Number of transactions in this database that have been committed

xact_rollback bigint

Number of transactions in this database that have been rolled back

blks_read bigint

Number of disk blocks read in this database

blks_hit bigint

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)

tup_returned bigint

Number of live rows fetched by sequential scans and index entries returned by index scans in this database

tup_fetched bigint

Number of live rows fetched by index scans in this database

tup_inserted bigint

Number of rows inserted by queries in this database

tup_updated bigint

Number of rows updated by queries in this database

tup_deleted bigint

Number of rows deleted by queries in this database

conflicts bigint

Number of queries canceled due to conflicts with recovery in this database. (Conflicts occur only on standby servers; see pg_stat_database_conflicts for details.)

temp_files bigint

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 log_temp_files setting.

temp_bytes bigint

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 log_temp_files setting.

deadlocks bigint

Number of deadlocks detected in this database

checksum_failures bigint

Number of data page checksum failures detected in this database (or on a shared object), or NULL if data checksums are disabled.

checksum_last_failure timestamp with time zone

Time at which the last data page checksum failure was detected in this database (or on a shared object), or NULL if data checksums are disabled.

blk_read_time double precision

Time spent reading data file blocks by backends in this database, in milliseconds (if track_io_timing is enabled, otherwise zero)

blk_write_time double precision

Time spent writing data file blocks by backends in this database, in milliseconds (if track_io_timing is enabled, otherwise zero)

session_time double precision

Time spent by database sessions in this database, in milliseconds (note that statistics are only updated when the state of a session changes, so if sessions have been idle for a long time, this idle time won't be included)

active_time double precision

Time spent executing SQL statements in this database, in milliseconds (this corresponds to the states active and fastpath function call in pg_stat_activity)

idle_in_transaction_time double precision

Time spent idling while in a transaction in this database, in milliseconds (this corresponds to the states idle in transaction and idle in transaction (aborted) in pg_stat_activity)

sessions bigint

Total number of sessions established to this database

sessions_abandoned bigint

Number of database sessions to this database that were terminated because connection to the client was lost

sessions_fatal bigint

Number of database sessions to this database that were terminated by fatal errors

sessions_killed bigint

Number of database sessions to this database that were terminated by operator intervention

parallel_workers_to_launch bigint

Number of parallel workers planned to be launched by queries on this database

parallel_workers_launched bigint

Number of parallel workers launched by queries on this database

stats_reset timestamp with time zone

Time at which these statistics were last reset


27.2.18. pg_stat_database_conflicts #

The pg_stat_database_conflicts 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 primary servers.

Table 27.28. pg_stat_database_conflicts View

Column Type

Description

datid oid

OID of a database

datname name

Name of this database

confl_tablespace bigint

Number of queries in this database that have been canceled due to dropped tablespaces

confl_lock bigint

Number of queries in this database that have been canceled due to lock timeouts

confl_snapshot bigint

Number of queries in this database that have been canceled due to old snapshots

confl_bufferpin bigint

Number of queries in this database that have been canceled due to pinned buffers

confl_deadlock bigint

Number of queries in this database that have been canceled due to deadlocks

confl_active_logicalslot bigint

Number of uses of logical slots in this database that have been canceled due to old snapshots or too low a wal_level on the primary


27.2.19. pg_stat_all_tables #

The pg_stat_all_tables view will contain one row for each table in the current database (including TOAST tables), showing statistics about accesses to that specific table. The pg_stat_user_tables and pg_stat_sys_tables views contain the same information, but filtered to only show user and system tables respectively.

Table 27.29. pg_stat_all_tables View

Column Type

Description

relid oid

OID of a table

schemaname name

Name of the schema that this table is in

relname name

Name of this table

seq_scan bigint

Number of sequential scans initiated on this table

last_seq_scan timestamp with time zone

The time of the last sequential scan on this table, based on the most recent transaction stop time

seq_tup_read bigint

Number of live rows fetched by sequential scans

idx_scan bigint

Number of index scans initiated on this table

last_idx_scan timestamp with time zone

The time of the last index scan on this table, based on the most recent transaction stop time

idx_tup_fetch bigint

Number of live rows fetched by index scans

n_tup_ins bigint

Total number of rows inserted

n_tup_upd bigint

Total number of rows updated. (This includes row updates counted in n_tup_hot_upd and n_tup_newpage_upd, and remaining non-HOT updates.)

n_tup_del bigint

Total number of rows deleted

n_tup_hot_upd bigint

Number of rows HOT updated. These are updates where no successor versions are required in indexes.

n_tup_newpage_upd bigint

Number of rows updated where the successor version goes onto a new heap page, leaving behind an original version with a t_ctid field that points to a different heap page. These are always non-HOT updates.

n_live_tup bigint

Estimated number of live rows

n_dead_tup bigint

Estimated number of dead rows

n_mod_since_analyze bigint

Estimated number of rows modified since this table was last analyzed

n_ins_since_vacuum bigint

Estimated number of rows inserted since this table was last vacuumed (not counting VACUUM FULL)

last_vacuum timestamp with time zone

Last time at which this table was manually vacuumed (not counting VACUUM FULL)

last_autovacuum timestamp with time zone

Last time at which this table was vacuumed by the autovacuum daemon

last_analyze timestamp with time zone

Last time at which this table was manually analyzed

last_autoanalyze timestamp with time zone

Last time at which this table was analyzed by the autovacuum daemon

vacuum_count bigint

Number of times this table has been manually vacuumed (not counting VACUUM FULL)

autovacuum_count bigint

Number of times this table has been vacuumed by the autovacuum daemon

analyze_count bigint

Number of times this table has been manually analyzed

autoanalyze_count bigint

Number of times this table has been analyzed by the autovacuum daemon

total_vacuum_time double precision

Total time this table has been manually vacuumed, in milliseconds (not counting VACUUM FULL). (This includes the time spent sleeping due to cost-based delays.)

total_autovacuum_time double precision

Total time this table has been vacuumed by the autovacuum daemon, in milliseconds. (This includes the time spent sleeping due to cost-based delays.)

total_analyze_time double precision

Total time this table has been manually analyzed, in milliseconds. (This includes the time spent sleeping due to cost-based delays.)

total_autoanalyze_time double precision

Total time this table has been analyzed by the autovacuum daemon, in milliseconds. (This includes the time spent sleeping due to cost-based delays.)


27.2.20. pg_stat_all_indexes #

The pg_stat_all_indexes view will contain one row for each index in the current database, showing statistics about accesses to that specific index. The pg_stat_user_indexes and pg_stat_sys_indexes views contain the same information, but filtered to only show user and system indexes respectively.

Table 27.30. pg_stat_all_indexes View

Column Type

Description

relid oid

OID of the table for this index

indexrelid oid

OID of this index

schemaname name

Name of the schema this index is in

relname name

Name of the table for this index

indexrelname name

Name of this index

idx_scan bigint

Number of index scans initiated on this index

last_idx_scan timestamp with time zone

The time of the last scan on this index, based on the most recent transaction stop time

idx_tup_read bigint

Number of index entries returned by scans on this index

idx_tup_fetch bigint

Number of live table rows fetched by simple index scans using this index


Indexes can be used by simple index scans, bitmap 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 pg_stat_all_indexes.idx_tup_read count(s) for the index(es) it uses, and it increments the pg_stat_all_tables.idx_tup_fetch count for the table, but it does not affect pg_stat_all_indexes.idx_tup_fetch. 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.

Note

The idx_tup_read and idx_tup_fetch counts can be different even without any use of bitmap scans, because idx_tup_read counts index entries retrieved from the index while idx_tup_fetch 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.

Note

Index scans may sometimes perform multiple index searches per execution. Each index search increments pg_stat_all_indexes.idx_scan, so it's possible for the count of index scans to significantly exceed the total number of index scan executor node executions.

This can happen with queries that use certain SQL constructs to search for rows matching any value out of a list or array of multiple scalar values (see Section 9.25). It can also happen to queries with a column_name = value1 OR column_name = value2 ... construct, though only when the optimizer transforms the construct into an equivalent multi-valued array representation. Similarly, when B-tree index scans use the skip scan optimization, an index search is performed each time the scan is repositioned to the next index leaf page that might have matching tuples (see Section 11.3).

Tip

EXPLAIN ANALYZE outputs the total number of index searches performed by each index scan node. See Section 14.1.2 for an example demonstrating how this works.

27.2.21. pg_statio_all_tables #

The pg_statio_all_tables 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 pg_statio_user_tables and pg_statio_sys_tables views contain the same information, but filtered to only show user and system tables respectively.

Table 27.31. pg_statio_all_tables View

Column Type

Description

relid oid

OID of a table

schemaname name

Name of the schema that this table is in

relname name

Name of this table

heap_blks_read bigint

Number of disk blocks read from this table

heap_blks_hit bigint

Number of buffer hits in this table

idx_blks_read bigint

Number of disk blocks read from all indexes on this table

idx_blks_hit bigint

Number of buffer hits in all indexes on this table

toast_blks_read bigint

Number of disk blocks read from this table's TOAST table (if any)

toast_blks_hit bigint

Number of buffer hits in this table's TOAST table (if any)

tidx_blks_read bigint

Number of disk blocks read from this table's TOAST table indexes (if any)

tidx_blks_hit bigint

Number of buffer hits in this table's TOAST table indexes (if any)


27.2.22. pg_statio_all_indexes #

The pg_statio_all_indexes view will contain one row for each index in the current database, showing statistics about I/O on that specific index. The pg_statio_user_indexes and pg_statio_sys_indexes views contain the same information, but filtered to only show user and system indexes respectively.

Table 27.32. pg_statio_all_indexes View

Column Type

Description

relid oid

OID of the table for this index

indexrelid oid

OID of this index

schemaname name

Name of the schema this index is in

relname name

Name of the table for this index

indexrelname name

Name of this index

idx_blks_read bigint

Number of disk blocks read from this index

idx_blks_hit bigint

Number of buffer hits in this index


27.2.23. pg_statio_all_sequences #

The pg_statio_all_sequences view will contain one row for each sequence in the current database, showing statistics about I/O on that specific sequence.

Table 27.33. pg_statio_all_sequences View

Column Type

Description

relid oid

OID of a sequence

schemaname name

Name of the schema this sequence is in

relname name

Name of this sequence

blks_read bigint

Number of disk blocks read from this sequence

blks_hit bigint

Number of buffer hits in this sequence


27.2.24. pg_stat_user_functions #

The pg_stat_user_functions view will contain one row for each tracked function, showing statistics about executions of that function. The track_functions parameter controls exactly which functions are tracked.

Table 27.34. pg_stat_user_functions View

Column Type

Description

funcid oid

OID of a function

schemaname name

Name of the schema this function is in

funcname name

Name of this function

calls bigint

Number of times this function has been called

total_time double precision

Total time spent in this function and all other functions called by it, in milliseconds

self_time double precision

Total time spent in this function itself, not including other functions called by it, in milliseconds


27.2.25. pg_stat_slru #

PostgreSQL accesses certain on-disk information via SLRU (simple least-recently-used) caches. The pg_stat_slru view will contain one row for each tracked SLRU cache, showing statistics about access to cached pages.

For each SLRU cache that's part of the core server, there is a configuration parameter that controls its size, with the suffix _buffers appended.

Table 27.35. pg_stat_slru View

Column Type

Description

name text

Name of the SLRU

blks_zeroed bigint

Number of blocks zeroed during initializations

blks_hit bigint

Number of times disk blocks were found already in the SLRU, so that a read was not necessary (this only includes hits in the SLRU, not the operating system's file system cache)

blks_read bigint

Number of disk blocks read for this SLRU

blks_written bigint

Number of disk blocks written for this SLRU

blks_exists bigint

Number of blocks checked for existence for this SLRU

flushes bigint

Number of flushes of dirty data for this SLRU

truncates bigint

Number of truncates for this SLRU

stats_reset timestamp with time zone

Time at which these statistics were last reset


27.2.26. Statistics Functions #

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 psql you could issue \d+ pg_stat_activity.) 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.

Additional functions related to the cumulative statistics system are listed in Table 27.36.

Table 27.36. Additional Statistics Functions

Function

Description

pg_backend_pid () → integer

Returns the process ID of the server process attached to the current session.

pg_stat_get_backend_io ( integer ) → setof record

Returns I/O statistics about the backend with the specified process ID. The output fields are exactly the same as the ones in the pg_stat_io view.

The function does not return I/O statistics for the checkpointer, the background writer, the startup process and the autovacuum launcher as they are already visible in the pg_stat_io view and there is only one of each.

pg_stat_get_activity ( integer ) → setof record

Returns a record of information about the backend with the specified process ID, or one record for each active backend in the system if NULL is specified. The fields returned are a subset of those in the pg_stat_activity view.

pg_stat_get_backend_wal ( integer ) → record

Returns WAL statistics about the backend with the specified process ID. The output fields are exactly the same as the ones in the pg_stat_wal view.

The function does not return WAL statistics for the checkpointer, the background writer, the startup process and the autovacuum launcher.

pg_stat_get_snapshot_timestamp () → timestamp with time zone

Returns the timestamp of the current statistics snapshot, or NULL if no statistics snapshot has been taken. A snapshot is taken the first time cumulative statistics are accessed in a transaction if stats_fetch_consistency is set to snapshot

pg_stat_get_xact_blocks_fetched ( oid ) → bigint

Returns the number of block read requests for table or index, in the current transaction. This number minus pg_stat_get_xact_blocks_hit gives the number of kernel read() calls; the number of actual physical reads is usually lower due to kernel-level buffering.

pg_stat_get_xact_blocks_hit ( oid ) → bigint

Returns the number of block read requests for table or index, in the current transaction, found in cache (not triggering kernel read() calls).

pg_stat_clear_snapshot () → void

Discards the current statistics snapshot or cached information.

pg_stat_reset () → void

Resets all statistics counters for the current database to zero.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.

pg_stat_reset_shared ( [ target text DEFAULT NULL ] ) → void

Resets some cluster-wide statistics counters to zero, depending on the argument. target can be:

  • archiver: Reset all the counters shown in the pg_stat_archiver view.

  • bgwriter: Reset all the counters shown in the pg_stat_bgwriter view.

  • checkpointer: Reset all the counters shown in the pg_stat_checkpointer view.

  • io: Reset all the counters shown in the pg_stat_io view.

  • recovery_prefetch: Reset all the counters shown in the pg_stat_recovery_prefetch view.

  • slru: Reset all the counters shown in the pg_stat_slru view.

  • wal: Reset all the counters shown in the pg_stat_wal view.

  • NULL or not specified: All the counters from the views listed above are reset.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.

pg_stat_reset_single_table_counters ( oid ) → void

Resets statistics for a single table or index in the current database or shared across all databases in the cluster to zero.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.

pg_stat_reset_backend_stats ( integer ) → void

Resets statistics for a single backend with the specified process ID to zero.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.

pg_stat_reset_single_function_counters ( oid ) → void

Resets statistics for a single function in the current database to zero.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.

pg_stat_reset_slru ( [ target text DEFAULT NULL ] ) → void

Resets statistics to zero for a single SLRU cache, or for all SLRUs in the cluster. If target is NULL or is not specified, all the counters shown in the pg_stat_slru view for all SLRU caches are reset. The argument can be one of commit_timestamp, multixact_member, multixact_offset, notify, serializable, subtransaction, or transaction to reset the counters for only that entry. If the argument is other (or indeed, any unrecognized name), then the counters for all other SLRU caches, such as extension-defined caches, are reset.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.

pg_stat_reset_replication_slot ( text ) → void

Resets statistics of the replication slot defined by the argument. If the argument is NULL, resets statistics for all the replication slots.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.

pg_stat_reset_subscription_stats ( oid ) → void

Resets statistics for a single subscription shown in the pg_stat_subscription_stats view to zero. If the argument is NULL, reset statistics for all subscriptions.

This function is restricted to superusers by default, but other users can be granted EXECUTE to run the function.


Warning

Using pg_stat_reset() also resets counters that autovacuum uses to determine when to trigger a vacuum or an analyze. Resetting these counters can cause autovacuum to not perform necessary work, which can cause problems such as table bloat or out-dated table statistics. A database-wide ANALYZE is recommended after the statistics have been reset.

pg_stat_get_activity, the underlying function of the pg_stat_activity 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, another set of per-backend statistics access functions can be used; these are shown in Table 27.37. These access functions use the session's backend ID number, which is a small integer (>= 0) that is distinct from the backend ID of any concurrent session, although a session's ID can be recycled as soon as it exits. The backend ID is used, among other things, to identify the session's temporary schema if it has one. The function pg_stat_get_backend_idset provides a convenient way to list all the active backends' ID numbers for invoking these functions. For example, to show the PIDs and current queries of all backends:

SELECT pg_stat_get_backend_pid(backendid) AS pid,
       pg_stat_get_backend_activity(backendid) AS query
FROM pg_stat_get_backend_idset() AS backendid;

Table 27.37. Per-Backend Statistics Functions

Function

Description

pg_stat_get_backend_activity ( integer ) → text

Returns the text of this backend's most recent query.

pg_stat_get_backend_activity_start ( integer ) → timestamp with time zone

Returns the time when the backend's most recent query was started.

pg_stat_get_backend_client_addr ( integer ) → inet

Returns the IP address of the client connected to this backend.

pg_stat_get_backend_client_port ( integer ) → integer

Returns the TCP port number that the client is using for communication.

pg_stat_get_backend_dbid ( integer ) → oid

Returns the OID of the database this backend is connected to.

pg_stat_get_backend_idset () → setof integer

Returns the set of currently active backend ID numbers.

pg_stat_get_backend_pid ( integer ) → integer

Returns the process ID of this backend.

pg_stat_get_backend_start ( integer ) → timestamp with time zone

Returns the time when this process was started.

pg_stat_get_backend_subxact ( integer ) → record

Returns a record of information about the subtransactions of the backend with the specified ID. The fields returned are subxact_count, which is the number of subtransactions in the backend's subtransaction cache, and subxact_overflow, which indicates whether the backend's subtransaction cache is overflowed or not.

pg_stat_get_backend_userid ( integer ) → oid

Returns the OID of the user logged into this backend.

pg_stat_get_backend_wait_event ( integer ) → text

Returns the wait event name if this backend is currently waiting, otherwise NULL. See Table 27.5 through Table 27.13.

pg_stat_get_backend_wait_event_type ( integer ) → text

Returns the wait event type name if this backend is currently waiting, otherwise NULL. See Table 27.4 for details.

pg_stat_get_backend_xact_start ( integer ) → timestamp with time zone

Returns the time when the backend's current transaction was started.