26.2. Система накопительной статистики#

26.2. Система накопительной статистики

26.2. Система накопительной статистики #

Tantor BE - система накопительной статистики поддерживает сбор и отчетность информации о активности сервера. В настоящее время подсчитываются доступы к таблицам и индексам как в терминах блоков диска, так и в терминах отдельных строк. Также подсчитывается общее количество строк в каждой таблице и информация о действиях по очистке и анализу для каждой таблицы. При включении также подсчитываются вызовы пользовательских функций и общее время, затраченное на каждую из них.

Tantor BE также поддерживает отчетность о динамической информации о том, что происходит в системе прямо сейчас, такой как точная команда, которая в данный момент выполняется другими процессами сервера, и какие другие соединения существуют в системе. Эта возможность независима от системы накопительной статистики.

26.2.1. Конфигурация сбора статистики #

С тех пор как сбор статистики добавляет некоторую нагрузку на выполнение запроса, система может быть настроена на сбор или несбор информации. Это контролируется параметрами конфигурации, которые обычно устанавливаются в файле postgresql.conf (См. раздел Глава 18 для получения подробной информации о настройке параметров конфигурации).

Параметр track_activities позволяет отслеживать текущую выполняемую команду любым процессом сервера.

Параметр track_counts управляет сбором накопительной статистики о доступах к таблицам и индексам.

Параметр track_functions позволяет отслеживать использование пользовательских функций.

Параметр track_io_timing включает мониторинг времени чтения, записи, расширения и fsync блоков.

Параметр track_wal_io_timing включает мониторинг времени записи и fsync WAL.

Обычно эти параметры устанавливаются в файле postgresql.conf, чтобы они применялись ко всем процессам сервера, но возможно включить или отключить их в отдельных сессиях с помощью команды SET. (Чтобы предотвратить обычным пользователям скрытие своей активности от администратора, только суперпользователям разрешено изменять эти параметры с помощью команды SET).

Кумулятивная статистика собирается в общей памяти. Каждый процесс Tantor BE собирает статистику локально, затем обновляет общие данные в соответствующие интервалы. Когда сервер, включая физическую реплику, закрывается корректно, постоянная копия данных статистики хранится в подкаталоге pg_stat, чтобы статистика могла сохраняться при перезапуске сервера. В отличие от этого, при запуске после некорректного завершения (например, после немедленного завершения, сбоя сервера, запуска с базовой резервной копии и восстановления до определенного момента времени), все счетчики статистики сбрасываются.

26.2.2. Просмотр статистики #

Несколько предопределенных представлений, перечисленных в Таблица 26.1, доступны для отображения текущего состояния системы. Также есть несколько других представлений, перечисленных в Таблица 26.2, доступных для отображения накопленной статистики. Кроме того, можно создавать пользовательские представления, используя соответствующие функции накопленной статистики, как обсуждается в Раздел 26.2.26.

При использовании представлений и функций накопительной статистики для мониторинга собранных данных важно понимать, что информация не обновляется мгновенно. Каждый отдельный процесс сервера сбрасывает накопленную статистику в общую память непосредственно перед переходом в режим ожидания, но не чаще, чем раз в PGSTAT_MIN_INTERVAL миллисекунд (1 секунда, если не изменено при сборке сервера); поэтому запрос или транзакция, находящиеся в процессе выполнения, не влияют на отображаемые итоги, и отображаемая информация отстает от фактической активности. Однако информация о текущем запросе, собранная с помощью track_activities, всегда актуальна.

Еще один важный момент заключается в том, что когда серверный процесс запрашивается на отображение любых накопленных статистических данных, доступные значения кешируются до конца текущей транзакции в конфигурации по умолчанию. Таким образом, статистика будет показывать статическую информацию, пока вы продолжаете текущую транзакцию. Аналогично, информация о текущих запросах всех сессий собирается, когда такая информация впервые запрашивается в рамках транзакции, и та же информация будет отображаться на протяжении всей транзакции. Это функция, а не ошибка, потому что она позволяет вам выполнять несколько запросов по статистике и сопоставлять результаты, не беспокоясь о том, что числа изменяются под вами. При интерактивном анализе статистики или с дорогостоящими запросами временной интервал между доступами к отдельной статистике может привести к значительному искажению в кешированной статистике. Чтобы минимизировать искажения, stats_fetch_consistency можно установить в snapshot, за счет увеличения использования памяти для кеширования ненужных статистических данных. Напротив, если известно, что статистика запрашивается только один раз, кеширование доступной статистики не требуется и может быть избегнуто путем установки stats_fetch_consistency в none. Вы можете вызвать pg_stat_clear_snapshot(), чтобы удалить снимок статистики текущей транзакции или кешированные значения (если таковые имеются). Следующее использование статистической информации (в режиме снимка) вызовет создание нового снимка или (в режиме кеша) кеширование доступной статистики.

Транзакция также может видеть свою статистику (еще не записанную в общую память статистики) в представлениях pg_stat_xact_all_tables, pg_stat_xact_sys_tables, pg_stat_xact_user_tables и pg_stat_xact_user_functions. Эти числа не действуют так, как указано выше; вместо этого они обновляются непрерывно в течение всей транзакции.

Некоторая информация в представлениях динамической статистики, показанных в Таблица 26.1, ограничена с точки зрения безопасности. Обычные пользователи могут видеть только всю информацию о своих сессиях (сессии, принадлежащие роли, к которой они принадлежат). В строках о других сессиях многие столбцы будут содержать значение null. Однако следует отметить, что существование сессии и ее общие свойства, такие как пользователь и база данных сессии, видны всем пользователям. Суперпользователи и роли с привилегиями встроенной роли pg_read_all_stats (см. также Раздел 20.5) могут видеть всю информацию о всех сессиях.

Таблица 26.1. Представления динамической статистики

Имя представленияОписание
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 Раздел 26.4.1.
pg_stat_progress_create_indexOne row for each backend running CREATE INDEX or REINDEX, showing current progress. See Раздел 26.4.4.
pg_stat_progress_vacuumOne row for each backend (including autovacuum worker processes) running VACUUM, showing current progress. See Раздел 26.4.5.
pg_stat_progress_clusterOne row for each backend running CLUSTER or VACUUM FULL, showing current progress. See Раздел 26.4.2.
pg_stat_progress_basebackupOne row for each WAL sender process streaming a base backup, showing current progress. See Раздел 26.4.6.
pg_stat_progress_copyOne row for each backend running COPY, showing current progress. See Раздел 26.4.3.

Таблица 26.2. Представления собранных статистических данных

Имя представленияОписание
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. 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.

Статистика по индексам особенно полезна чтобы определить, какие индексы используются и насколько они эффективны.

pg_stat_io и набор представлений pg_statio_ полезны для определения эффективности кеша буферов. Они могут быть использованы для расчета коэффициента попадания в кеш. Обратите внимание, что хотя статистика ввода-вывода Tantor BE фиксирует большинство случаев, когда ядро вызывалось для выполнения ввода-вывода, она не различает данные, которые нужно было извлечь с диска, и те, которые уже находились в кеше страниц ядра. Пользователям рекомендуется использовать представления статистики Tantor BE в сочетании с утилитами операционной системы для более полного представления о производительности ввода-вывода их базы данных.

26.2.3. pg_stat_activity #

Представление pg_stat_activity будет иметь одну строку на каждый серверный процесс, отображая информацию, связанную с текущей активностью этого процесса.

Таблица 26.3. pg_stat_activity View

Тип столбца

Описание

datid oid

OID базы данных, к которой подключен этот бэкенд

datname name

Имя базы данных, к которой подключен этот бэкенд

pid integer

Идентификатор процесса этого бэкенда

leader_pid integer

Идентификатор ведущего процесса группы параллельных процессов, если этот процесс является рабочим процессом параллельного запроса, или идентификатор ведущего процесса применения изменений, если этот процесс является параллельным рабочим процессом применения. NULL указывает, что этот процесс является ведущим процессом в группе параллельных процессов или ведущим процессов применения изменений, или не участвует в каких-либо параллельных операциях

usesysid oid

OID пользователя, вошедшего в этот бэкенд

usename name

Имя пользователя, вошедшего в этот бэкенд

application_name text

Имя приложения, подключенного к этому бэкенду

client_addr inet

IP-адрес клиента, подключенного к этому бэкенду. Если это поле равно null, это указывает на то, что клиент подключен через сокет Unix на серверной машине или что это внутренний процесс, такой как автоочистка.

client_hostname text

Имя хоста подключенного клиента, как сообщается при обратном DNS-поиске client_addr. Это поле будет непустым только для IP-подключений и только при включенной опции log_hostname.

client_port integer

Номер TCP порта, который клиент использует для связи с этим бэкендом, или -1, если используется сокет Unix. Если это поле равно null, это указывает на то, что это внутренний серверный процесс.

backend_start timestamp with time zone

Время, когда этот процесс был запущен. Для клиентских бэкендов это время, когда клиент подключился к серверу.

xact_start timestamp with time zone

Время, когда была запущена текущая транзакция этого процесса, или null, если транзакция не активна. Если текущий запрос является первым в своей транзакции, то это значение равно значению столбца query_start.

query_start timestamp with time zone

Время, когда был запущен текущий активный запрос, или если состояние state неактивно active, время запуска последнего запроса.

state_change timestamp with time zone

Время, когда последний раз изменялось состояние state

wait_event_type text

Тип события, на которое ожидает ответ бэкенд, если таковое имеется; в противном случае NULL. См. Таблица 26.4.

wait_event text

Имя события ожидания, если бэкенд в настоящее время находится в режиме ожидания, в противном случае NULL. См. Таблица 26.5 до Таблица 26.13.

state text

Текущее общее состояние этого бэкенда. Возможные значения:

  • active: Бэкенд выполняет запрос.

  • idle: Бэкенд ожидает новую команду клиента.

  • idle in transaction: Бэкенд находится в транзакции, но в данный момент не выполняет запрос.

  • Состояние idle in transaction (aborted): Это состояние аналогично состоянию idle in transaction, за исключением того, что один из операторов в транзакции вызвал ошибку.

  • fastpath function cal: Бэкенд выполняет вызов функции быстрого пути.

  • disabled: Это состояние сообщается, если track_activities отключено в этом бэкенде.

backend_xid xid

Идентификатор транзакции верхнего уровня этого бэкэнда, если имеется; см. Раздел 64.1.

backend_xmin xid

Текущий горизонт xmin бэкенда.

query_id bigint

Идентификатор последнего запроса этого бэкенда. Если state равно active, то это поле показывает идентификатор текущего выполняющегося запроса. Во всех остальных состояниях оно показывает идентификатор последнего выполненного запроса. Идентификаторы запросов по умолчанию не вычисляются, поэтому это поле будет пустым, если параметр compute_query_id не включен или не настроен сторонний модуль, вычисляющий идентификаторы запросов.

query text

Текст последнего запроса этого бэкенда. Если state равно active, то это поле показывает текущий выполняющийся запрос. Во всех остальных состояниях оно показывает последний выполненный запрос. По умолчанию текст запроса обрезается до 1024 байт; это значение можно изменить с помощью параметра track_activity_query_size.

backend_type text

Тип текущего бэкенда. Возможные типы: autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, archiver, standalone backend, startup, walreceiver, walsender, walwriter и walsummarizer. Кроме того, фоновые рабочие процессы, зарегистрированные расширениями, могут иметь дополнительные типы.


Примечание

Все столбцы wait_event и state являются независимыми. Если бэкенд находится в состоянии active, он может или не может ожидать (waiting) какое-либо событие. Если состояние active и wait_event не-null, это означает, что выполняется запрос, но он блокируется где-то в системе.

Таблица 26.4. Типы ожидания событий

Тип ожидаемого событияОписание
ActivityПроцесс сервера простаивает. Этот тип события указывает на процесс, ожидающий активности в своем основном цикле обработки. wait_event определит конкретную точку ожидания; см. Таблица 26.5.
BufferPinПроцесс сервера ожидает эксклюзивного доступа к буферу данных. Ожидание блокировки буфера может затянуться, если другой процесс удерживает открытый курсор, который последний раз читал данные из данного буфера. См. Таблица 26.6.
ClientПроцесс сервера ожидает активности на сокете, подключенном к пользовательскому приложению. Таким образом, сервер ожидает, что что-то произойдет, что не зависит от его внутренних процессов. wait_event определит конкретную точку ожидания; см. Таблица 26.7.
ExtensionПроцесс сервера ожидает некоторого условия, определенного модулем расширения. См. Таблица 26.8.
InjectionPointПроцесс сервера ожидает, когда точка инъекции достигнет результата, определенного в тесте. Этот тип не имеет предопределенных точек ожидания.
IOПроцесс сервера ожидает завершения операции ввода-вывода. wait_event определит конкретную точку ожидания; см. Таблица 26.9.
IPCПроцесс сервера ожидает взаимодействия с другим процессом сервера. wait_event определит конкретную точку ожидания; см. Таблица 26.10.
LockПроцесс сервера ожидает тяжеловесную блокировку. Тяжеловесные блокировки, также известные как блокировки менеджера блокировок или просто блокировки, в основном защищают SQL-видимые объекты, такие как таблицы. Однако они также используются для обеспечения взаимного исключения для определенных внутренних операций, таких как расширение отношений. wait_event определит тип ожидаемой блокировки; см. Таблица 26.11.
LWLock Серверный процесс ожидает легковесную блокировку. Большинство таких блокировок защищают конкретную структуру данных в общей памяти. wait_event будет содержать имя, идентифицирующее цель легковесной блокировки. (Некоторые блокировки имеют конкретные имена; другие являются частью группы блокировок с похожей целью). См. Таблица 26.12.
TimeoutПроцесс сервера ожидает истечения тайм-аута. wait_event определит конкретную точку ожидания; см. Таблица 26.13.

Таблица 26.5. Wait Events of Type Activity

Activity Wait EventDescription
ArchiverMainWaiting in main loop of archiver process.
AutovacuumMainWaiting in main loop of autovacuum launcher process.
BgwriterHibernateWaiting in background writer process, hibernating.
BgwriterMainWaiting in main loop of background writer process.
CheckpointerMainWaiting in main loop of checkpointer process.
LogicalApplyMainWaiting in main loop of logical replication apply process.
LogicalLauncherMainWaiting in main loop of logical replication launcher process.
LogicalParallelApplyMainWaiting in main loop of logical replication parallel apply process.
RecoveryWalStreamWaiting in main loop of startup process for WAL to arrive, during streaming recovery.
ReplicationSlotsyncMainWaiting in main loop of slot sync worker.
ReplicationSlotsyncShutdownWaiting for slot sync worker to shut down.
SysloggerMainWaiting in main loop of syslogger process.
WalReceiverMainWaiting in main loop of WAL receiver process.
WalSenderMainWaiting in main loop of WAL sender process.
WalSummarizerWalWaiting in WAL summarizer for more WAL to be generated.
WalWriterMainWaiting in main loop of WAL writer process.

Таблица 26.6. Wait Events of Type Bufferpin

BufferPin Wait EventDescription
BufferPinWaiting to acquire an exclusive pin on a buffer.

Таблица 26.7. Wait Events of Type Client

Client Wait EventDescription
ClientReadWaiting to read data from the client.
ClientWriteWaiting to write data to the client.
GssOpenServerWaiting to read data from the client while establishing a GSSAPI session.
LibpqwalreceiverConnectWaiting in WAL receiver to establish connection to remote server.
LibpqwalreceiverReceiveWaiting in WAL receiver to receive data from remote server.
SslOpenServerWaiting for SSL while attempting connection.
WaitForStandbyConfirmationWaiting for WAL to be received and flushed by the physical standby.
WalSenderWaitForWalWaiting for WAL to be flushed in WAL sender process.
WalSenderWriteDataWaiting for any activity when processing replies from WAL receiver in WAL sender process.

Таблица 26.8. Wait Events of Type Extension

Extension Wait EventDescription
ExtensionWaiting in an extension.

Таблица 26.9. Wait Events of Type Io

IO Wait EventDescription
BasebackupReadWaiting for base backup to read from a file.
BasebackupSyncWaiting for data written by a base backup to reach durable storage.
BasebackupWriteWaiting for base backup to write to a file.
BuffileReadWaiting for a read from a buffered file.
BuffileTruncateWaiting for a buffered file to be truncated.
BuffileWriteWaiting for a write to a buffered file.
ControlFileReadWaiting for a read from the pg_control file.
ControlFileSyncWaiting for the pg_control file to reach durable storage.
ControlFileSyncUpdateWaiting for an update to the pg_control file to reach durable storage.
ControlFileWriteWaiting for a write to the pg_control file.
ControlFileWriteUpdateWaiting for a write to update the pg_control file.
CopyFileReadWaiting for a read during a file copy operation.
CopyFileWriteWaiting for a write during a file copy operation.
DataFileExtendWaiting for a relation data file to be extended.
DataFileFlushWaiting for a relation data file to reach durable storage.
DataFileImmediateSyncWaiting for an immediate synchronization of a relation data file to durable storage.
DataFilePrefetchWaiting for an asynchronous prefetch from a relation data file.
DataFileReadWaiting for a read from a relation data file.
DataFileSyncWaiting for changes to a relation data file to reach durable storage.
DataFileTruncateWaiting for a relation data file to be truncated.
DataFileWriteWaiting for a write to a relation data file.
DsmAllocateWaiting for a dynamic shared memory segment to be allocated.
DsmFillZeroWriteWaiting to fill a dynamic shared memory backing file with zeroes.
LockFileAddtodatadirReadWaiting for a read while adding a line to the data directory lock file.
LockFileAddtodatadirSyncWaiting for data to reach durable storage while adding a line to the data directory lock file.
LockFileAddtodatadirWriteWaiting for a write while adding a line to the data directory lock file.
LockFileCreateReadWaiting to read while creating the data directory lock file.
LockFileCreateSyncWaiting for data to reach durable storage while creating the data directory lock file.
LockFileCreateWriteWaiting for a write while creating the data directory lock file.
LockFileRecheckdatadirReadWaiting for a read during recheck of the data directory lock file.
LogicalRewriteCheckpointSyncWaiting for logical rewrite mappings to reach durable storage during a checkpoint.
LogicalRewriteMappingSyncWaiting for mapping data to reach durable storage during a logical rewrite.
LogicalRewriteMappingWriteWaiting for a write of mapping data during a logical rewrite.
LogicalRewriteSyncWaiting for logical rewrite mappings to reach durable storage.
LogicalRewriteTruncateWaiting for truncate of mapping data during a logical rewrite.
LogicalRewriteWriteWaiting for a write of logical rewrite mappings.
RelationMapReadWaiting for a read of the relation map file.
RelationMapReplaceWaiting for durable replacement of a relation map file.
RelationMapWriteWaiting for a write to the relation map file.
ReorderBufferReadWaiting for a read during reorder buffer management.
ReorderBufferWriteWaiting for a write during reorder buffer management.
ReorderLogicalMappingReadWaiting for a read of a logical mapping during reorder buffer management.
ReplicationSlotReadWaiting for a read from a replication slot control file.
ReplicationSlotRestoreSyncWaiting for a replication slot control file to reach durable storage while restoring it to memory.
ReplicationSlotSyncWaiting for a replication slot control file to reach durable storage.
ReplicationSlotWriteWaiting for a write to a replication slot control file.
SlruFlushSyncWaiting for SLRU data to reach durable storage during a checkpoint or database shutdown.
SlruReadWaiting for a read of an SLRU page.
SlruSyncWaiting for SLRU data to reach durable storage following a page write.
SlruWriteWaiting for a write of an SLRU page.
SnapbuildReadWaiting for a read of a serialized historical catalog snapshot.
SnapbuildSyncWaiting for a serialized historical catalog snapshot to reach durable storage.
SnapbuildWriteWaiting for a write of a serialized historical catalog snapshot.
TimelineHistoryFileSyncWaiting for a timeline history file received via streaming replication to reach durable storage.
TimelineHistoryFileWriteWaiting for a write of a timeline history file received via streaming replication.
TimelineHistoryReadWaiting for a read of a timeline history file.
TimelineHistorySyncWaiting for a newly created timeline history file to reach durable storage.
TimelineHistoryWriteWaiting for a write of a newly created timeline history file.
TwophaseFileReadWaiting for a read of a two phase state file.
TwophaseFileSyncWaiting for a two phase state file to reach durable storage.
TwophaseFileWriteWaiting for a write of a two phase state file.
VersionFileSyncWaiting for the version file to reach durable storage while creating a database.
VersionFileWriteWaiting for the version file to be written while creating a database.
WalsenderTimelineHistoryReadWaiting for a read from a timeline history file during a walsender timeline command.
WalBootstrapSyncWaiting for WAL to reach durable storage during bootstrapping.
WalBootstrapWriteWaiting for a write of a WAL page during bootstrapping.
WalCopyReadWaiting for a read when creating a new WAL segment by copying an existing one.
WalCopySyncWaiting for a new WAL segment created by copying an existing one to reach durable storage.
WalCopyWriteWaiting for a write when creating a new WAL segment by copying an existing one.
WalInitSyncWaiting for a newly initialized WAL file to reach durable storage.
WalInitWriteWaiting for a write while initializing a new WAL file.
WalPrefetchWaiting for a prefetching a WAL in the xlogrecovery with the use of the fadvise.
WalReadWaiting for a read from a WAL file.
WalSummaryReadWaiting for a read from a WAL summary file.
WalSummaryWriteWaiting for a write to a WAL summary file.
WalSyncWaiting for a WAL file to reach durable storage.
WalSyncMethodAssignWaiting for data to reach durable storage while assigning a new WAL sync method.
WalWriteWaiting for a write to a WAL file.

Таблица 26.10. Wait Events of Type Ipc

IPC Wait EventDescription
AppendReadyWaiting for subplan nodes of an Append plan node to be ready.
ArchiveCleanupCommandWaiting for archive_cleanup_command to complete.
ArchiveCommandWaiting for archive_command to complete.
BackendTerminationWaiting for the termination of another backend.
BackupWaitWalArchiveWaiting for WAL files required for a backup to be successfully archived.
BgworkerShutdownWaiting for background worker to shut down.
BgworkerStartupWaiting for background worker to start up.
BtreePageWaiting for the page number needed to continue a parallel B-tree scan to become available.
BufferIoWaiting for buffer I/O to complete.
CheckpointDelayCompleteWaiting for a backend that blocks a checkpoint from completing.
CheckpointDelayStartWaiting for a backend that blocks a checkpoint from starting.
CheckpointDoneWaiting for a checkpoint to complete.
CheckpointStartWaiting for a checkpoint to start.
ExecuteGatherWaiting for activity from a child process while executing a Gather plan node.
HashBatchAllocateWaiting for an elected Parallel Hash participant to allocate a hash table.
HashBatchElectWaiting to elect a Parallel Hash participant to allocate a hash table.
HashBatchLoadWaiting for other Parallel Hash participants to finish loading a hash table.
HashBuildAllocateWaiting for an elected Parallel Hash participant to allocate the initial hash table.
HashBuildElectWaiting to elect a Parallel Hash participant to allocate the initial hash table.
HashBuildHashInnerWaiting for other Parallel Hash participants to finish hashing the inner relation.
HashBuildHashOuterWaiting for other Parallel Hash participants to finish partitioning the outer relation.
HashGrowBatchesDecideWaiting to elect a Parallel Hash participant to decide on future batch growth.
HashGrowBatchesElectWaiting to elect a Parallel Hash participant to allocate more batches.
HashGrowBatchesFinishWaiting for an elected Parallel Hash participant to decide on future batch growth.
HashGrowBatchesReallocateWaiting for an elected Parallel Hash participant to allocate more batches.
HashGrowBatchesRepartitionWaiting for other Parallel Hash participants to finish repartitioning.
HashGrowBucketsElectWaiting to elect a Parallel Hash participant to allocate more buckets.
HashGrowBucketsReallocateWaiting for an elected Parallel Hash participant to finish allocating more buckets.
HashGrowBucketsReinsertWaiting for other Parallel Hash participants to finish inserting tuples into new buckets.
LogicalApplySendDataWaiting for a logical replication leader apply process to send data to a parallel apply process.
LogicalParallelApplyStateChangeWaiting for a logical replication parallel apply process to change state.
LogicalSyncDataWaiting for a logical replication remote server to send data for initial table synchronization.
LogicalSyncStateChangeWaiting for a logical replication remote server to change state.
MessageQueueInternalWaiting for another process to be attached to a shared message queue.
MessageQueuePutMessageWaiting to write a protocol message to a shared message queue.
MessageQueueReceiveWaiting to receive bytes from a shared message queue.
MessageQueueSendWaiting to send bytes to a shared message queue.
MultixactCreationWaiting for a multixact creation to complete.
ParallelBitmapScanWaiting for parallel bitmap scan to become initialized.
ParallelCreateIndexScanWaiting for parallel CREATE INDEX workers to finish heap scan.
ParallelFinishWaiting for parallel workers to finish computing.
ProcarrayGroupUpdateWaiting for the group leader to clear the transaction ID at transaction end.
ProcSignalBarrierWaiting for a barrier event to be processed by all backends.
PromoteWaiting for standby promotion.
RecoveryConflictSnapshotWaiting for recovery conflict resolution for a vacuum cleanup.
RecoveryConflictTablespaceWaiting for recovery conflict resolution for dropping a tablespace.
RecoveryEndCommandWaiting for recovery_end_command to complete.
RecoveryPauseWaiting for recovery to be resumed.
ReplicationOriginDropWaiting for a replication origin to become inactive so it can be dropped.
ReplicationSlotDropWaiting for a replication slot to become inactive so it can be dropped.
RestoreCommandWaiting for restore_command to complete.
SafeSnapshotWaiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction.
SyncRepWaiting for confirmation from a remote server during synchronous replication.
WalReceiverExitWaiting for the WAL receiver to exit.
WalReceiverWaitStartWaiting for startup process to send initial data for streaming replication.
WalSummaryReadyWaiting for a new WAL summary to be generated.
XactGroupUpdateWaiting for the group leader to update transaction status at transaction end.

Таблица 26.11. Wait Events of Type Lock

Lock Wait EventDescription
advisoryWaiting to acquire an advisory user lock.
applytransactionWaiting to acquire a lock on a remote transaction being applied by a logical replication subscriber.
extendWaiting to extend a relation.
frozenidWaiting to update pg_database.datfrozenxid and pg_database.datminmxid.
objectWaiting to acquire a lock on a non-relation database object.
pageWaiting to acquire a lock on a page of a relation.
relationWaiting to acquire a lock on a relation.
spectokenWaiting to acquire a speculative insertion lock.
transactionidWaiting for a transaction to finish.
tupleWaiting to acquire a lock on a tuple.
userlockWaiting to acquire a user lock.
virtualxidWaiting to acquire a virtual transaction ID lock; see Раздел 64.1.

Таблица 26.12. Wait Events of Type Lwlock

LWLock Wait EventDescription
AddinShmemInitWaiting to manage an extension's space allocation in shared memory.
AutoFileWaiting to update the postgresql.auto.conf file.
AutovacuumWaiting to read or update the current state of autovacuum workers.
AutovacuumScheduleWaiting to ensure that a table selected for autovacuum still needs vacuuming.
BackgroundWorkerWaiting to read or update background worker state.
BtreeVacuumWaiting to read or update vacuum-related information for a B-tree index.
BufferContentWaiting to access a data page in memory.
BufferMappingWaiting to associate a data block with a buffer in the buffer pool.
CheckpointerCommWaiting to manage fsync requests.
CommitTsWaiting to read or update the last value set for a transaction commit timestamp.
CommitTsBufferWaiting for I/O on a commit timestamp SLRU buffer.
CommitTsSLRUWaiting to access the commit timestamp SLRU cache.
ControlFileWaiting to read or update the pg_control file or create a new WAL file.
DSMRegistryWaiting to read or update the dynamic shared memory registry.
DSMRegistryDSAWaiting to access dynamic shared memory registry's dynamic shared memory allocator.
DSMRegistryHashWaiting to access dynamic shared memory registry's shared hash table.
DynamicSharedMemoryControlWaiting to read or update dynamic shared memory allocation information.
InjectionPointWaiting to read or update information related to injection points.
LockFastPathWaiting to read or update a process' fast-path lock information.
LockManagerWaiting to read or update information about heavyweight locks.
LogicalRepLauncherDSAWaiting to access logical replication launcher's dynamic shared memory allocator.
LogicalRepLauncherHashWaiting to access logical replication launcher's shared hash table.
LogicalRepWorkerWaiting to read or update the state of logical replication workers.
MultiXactGenWaiting to read or update shared multixact state.
MultiXactMemberBufferWaiting for I/O on a multixact member SLRU buffer.
MultiXactMemberSLRUWaiting to access the multixact member SLRU cache.
MultiXactOffsetBufferWaiting for I/O on a multixact offset SLRU buffer.
MultiXactOffsetSLRUWaiting to access the multixact offset SLRU cache.
MultiXactTruncationWaiting to read or truncate multixact information.
NotifyBufferWaiting for I/O on a NOTIFY message SLRU buffer.
NotifyQueueWaiting to read or update NOTIFY messages.
NotifyQueueTailWaiting to update limit on NOTIFY message storage.
NotifySLRUWaiting to access the NOTIFY message SLRU cache.
OidGenWaiting to allocate a new OID.
ParallelAppendWaiting to choose the next subplan during Parallel Append plan execution.
ParallelHashJoinWaiting to synchronize workers during Parallel Hash Join plan execution.
ParallelQueryDSAWaiting for parallel query dynamic shared memory allocation.
ParallelVacuumDSAWaiting for parallel vacuum dynamic shared memory allocation.
PerSessionDSAWaiting for parallel query dynamic shared memory allocation.
PerSessionRecordTypeWaiting to access a parallel query's information about composite types.
PerSessionRecordTypmodWaiting to access a parallel query's information about type modifiers that identify anonymous record types.
PerXactPredicateListWaiting to access the list of predicate locks held by the current serializable transaction during a parallel query.
PgStatsDataWaiting for shared memory stats data access.
PgStatsDSAWaiting for stats dynamic shared memory allocator access.
PgStatsHashWaiting for stats shared memory hash table access.
PredicateLockManagerWaiting to access predicate lock information used by serializable transactions.
ProcArrayWaiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID).
RelationMappingWaiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs).
RelCacheInitWaiting to read or update a pg_internal.init relation cache initialization file.
ReplicationOriginWaiting to create, drop or use a replication origin.
ReplicationOriginStateWaiting to read or update the progress of one replication origin.
ReplicationSlotAllocationWaiting to allocate or free a replication slot.
ReplicationSlotControlWaiting to read or update replication slot state.
ReplicationSlotIOWaiting for I/O on a replication slot.
SerialBufferWaiting for I/O on a serializable transaction conflict SLRU buffer.
SerialControlWaiting to read or update shared pg_serial state.
SerializableFinishedListWaiting to access the list of finished serializable transactions.
SerializablePredicateListWaiting to access the list of predicate locks held by serializable transactions.
SerializableXactHashWaiting to read or update information about serializable transactions.
SerialSLRUWaiting to access the serializable transaction conflict SLRU cache.
SharedTidBitmapWaiting to access a shared TID bitmap during a parallel bitmap index scan.
SharedTupleStoreWaiting to access a shared tuple store during parallel query.
ShmemIndexWaiting to find or allocate space in shared memory.
SInvalReadWaiting to retrieve messages from the shared catalog invalidation queue.
SInvalWriteWaiting to add a message to the shared catalog invalidation queue.
SubtransBufferWaiting for I/O on a sub-transaction SLRU buffer.
SubtransSLRUWaiting to access the sub-transaction SLRU cache.
SyncRepWaiting to read or update information about the state of synchronous replication.
SyncScanWaiting to select the starting location of a synchronized table scan.
TablespaceCreateWaiting to create or drop a tablespace.
TwoPhaseStateWaiting to read or update the state of prepared transactions.
WaitEventCustomWaiting to read or update custom wait events information.
WALBufMappingWaiting to replace a page in WAL buffers.
WALInsertWaiting to insert WAL data into a memory buffer.
WALSummarizerWaiting to read or update WAL summarization state.
WALWriteWaiting for WAL buffers to be written to disk.
WrapLimitsVacuumWaiting to update limits on transaction id and multixact consumption.
XactBufferWaiting for I/O on a transaction status SLRU buffer.
XactSLRUWaiting to access the transaction status SLRU cache.
XactTruncationWaiting to execute pg_xact_status or update the oldest transaction ID available to it.
XidGenWaiting to allocate a new transaction ID.

Таблица 26.13. Wait Events of Type Timeout

Timeout Wait EventDescription
BaseBackupThrottleWaiting during base backup when throttling activity.
CheckpointWriteDelayWaiting between writes while performing a checkpoint.
PgSleepWaiting due to a call to pg_sleep or a sibling function.
RecoveryApplyDelayWaiting to apply WAL during recovery because of a delay setting.
RecoveryRetrieveRetryIntervalWaiting during recovery when WAL data is not available from any source (pg_wal, archive or stream).
RegisterSyncRequestWaiting while sending synchronization requests to the checkpointer, because the request queue is full.
SpinDelayWaiting while acquiring a contended spinlock.
VacuumDelayWaiting in a cost-based vacuum delay point.
VacuumTruncateWaiting to acquire an exclusive lock to truncate off any empty pages at the end of a table vacuumed.
WalSummarizerErrorWaiting after a WAL summarizer error.

Вот примеры того, как можно просматривать события ожидания:

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

Примечание

Расширения могут добавлять события Extension, InjectionPoint и LWLock в списки, показанные в Таблица 26.8 и Таблица 26.12. В некоторых случаях имя LWLock, назначенное расширением, может быть недоступно во всех процессах сервера. Оно может быть указано просто как extension, а не как имя, назначенное расширением.

26.2.4. pg_stat_replication #

Представление pg_stat_replication будет содержать одну строку для каждого процесса отправки WAL, показывая статистику о репликации на подключенном резервном сервере этого отправителя. В списке перечислены только прямо подключенные резервные серверы; нет доступной информации о резервных серверах нижестоящего уровня.

Таблица 26.14. pg_stat_replication View

Тип столбца

Описание

pid integer

Идентификатор процесса отправителя WAL

usesysid oid

OID пользователя, вошедшего в процесс отправки WAL

usename name

Имя пользователя, вошедшего в процесс отправки WAL

application_name text

Имя приложения, которое подключено к этому отправителю WAL

client_addr inet

IP-адрес клиента, подключенного к этому отправителю WAL. Если это поле равно null, это указывает на то, что клиент подключен через сокет Unix на серверной машине.

client_hostname text

Имя хоста подключенного клиента, как сообщается при обратном DNS-поиске client_addr. Это поле будет непустым только для IP-подключений и только при включенной опции log_hostname.

client_port integer

Номер TCP-порта, который клиент использует для связи с этим отправителем WAL, или -1, если используется сокет Unix

backend_start timestamp with time zone

Время, когда этот процесс был запущен, то есть, когда клиент подключился к этому отправителю WAL

backend_xmin xid

Горизонт xmin этого резервного экземпляра, сообщенный через hot_standby_feedback.

state text

Текущее состояние отправителя WAL. Возможные значения:

  • startup: Этот отправитель WAL запускается.

  • catchup: Этот отправитель WAL подключенного резервного экземпляра догоняет основной.

  • streaming: Этот отправитель WAL передает изменения после того, как его подключенный резервный сервер догоняет основной.

  • backup: Этот отправитель WAL выполняет резервное копирование.

  • stopping: Этот отправитель WAL останавливается.

sent_lsn pg_lsn

Последнее местоположение журнала предварительной записи, отправленное по этому соединению

write_lsn pg_lsn

Последнее местоположение журнала предварительной записи, записанное на диск этим резервным сервером

flush_lsn pg_lsn

Последнее местоположение журнала предварительной записи, сброшенного на диск этим резервным сервером

replay_lsn pg_lsn

Последнее местоположение журнала предварительной записи, воспроизведенное в базе данных на этом резервном сервере

write_lag interval

Время, прошедшее между сбросом недавно записанного WAL локально и получением уведомления о том, что этот сервер-резервный его записал (но еще не сбросил или применил). Это можно использовать для оценки задержки, вызванной уровнем synchronous_commit remote_write при коммите, если этот сервер был настроен как синхронный резервный.

flush_lag interval

Время, прошедшее между сбросом недавно записанного WAL локально и получением уведомления о том, что этот сервер-резервный записал и сбросил его (но еще не применил). Это можно использовать для оценки задержки, вызванной уровнем synchronous_commit on при коммите, если этот сервер был настроен как синхронный резервный.

replay_lag interval

Время, прошедшее между сбросом недавно записанного WAL локально и получением уведомления о том, что этот сервер-резервный записал, сбросил и применил его. Это можно использовать для оценки задержки, вызванной remote_apply уровня synchronous_commit при коммите, если этот сервер был настроен как синхронный резервный.

sync_priority integer

Приоритет этого резервного сервера для выбора в качестве синхронного резервного сервера в синхронной репликации на основе приоритета. Это не оказывает влияния на синхронную репликацию на основе кворума.

sync_state text

Синхронное состояние этого резервного сервера. Возможные значения:

  • async: Этот резервный сервер работает асинхронно.

  • potential: Этот резервный сервер теперь работает асинхронно, но может потенциально стать синхронным, если один из текущих синхронных серверов выйдет из строя.

  • sync: Этот резервный сервер является синхронным.

  • quorum: Этот резервный сервер считается кандидатом для резервных серверов кворума.

reply_time timestamp with time zone

Время отправки последнего ответного сообщения, полученного от резервного сервера


Времена задержки, отраженные в представлении pg_stat_replication, являются измерениями времени, затраченного на запись, сброс и воспроизведение последних WAL, а также на получение информации об этом отправителем. Эти времена представляют собой задержку коммита, которая была (или могла бы быть) введена каждым уровнем синхронного коммита, если удаленный сервер был настроен как синхронный резервный. Для асинхронного резервного сервера столбец replay_lag приближенно определяет задержку перед тем, как недавние транзакции станут видимыми для запросов. Если резервный сервер полностью догнал отправляющий сервер и больше нет активности WAL, то последние измеренные времена задержки будут продолжать отображаться в течение некоторого времени, а затем станут NULL.

Время задержки автоматически работает для физической репликации. Плагины логического декодирования могут дополнительно генерировать отслеживающие сообщения; если они этого не делают, механизм отслеживания просто будет отображать задержку NULL.

Примечание

Отставание, отражаемое в отчете, не является прогнозом того, сколько времени потребуется чтобы догнать резервный сервер с учетом текущей скорости воспроизведения. Такая система будет показывать похожие значения во время генерации новых WAL, но будет отличаться, когда отправитель станет бездействующим. В частности, когда резервный сервер полностью догонит, pg_stat_replication показывает время, затраченное на запись, сброс и воспроизведение самого последнего отражаемого местоположения WAL, а не ноль, как могли бы ожидать некоторые пользователи. Это соответствует цели измерения задержек синхронного коммита и видимости транзакций для недавних записей. Чтобы уменьшить путаницу для пользователей, ожидающих другую модель отставания, столбцы лага возвращаются к значению NULL после некоторого времени на полностью воспроизведенной бездействующей системе. Системы мониторинга должны выбрать, представлять ли это как отсутствующие данные, ноль или продолжать отображать последнее известное значение.

26.2.5. pg_stat_replication_slots #

Представление pg_stat_replication_slots будет содержать одну строку для каждого логического слота репликации, показывающую статистику его использования.

Таблица 26.15. pg_stat_replication_slots View

Тип столбца

Описание

slot_name text

Уникальный идентификатор для слота репликации, действующий в пределах всего кластера

spill_txns bigint

Количество транзакций, сброшенных на диск, когда объем памяти, используемой для логического декодирования изменений из WAL, превышает значение параметра logical_decoding_work_mem. Счетчик увеличивается как для верхнеуровневых транзакций, так и для подтранзакций.

spill_count bigint

Количество раз, когда транзакции были записаны на диск при декодировании изменений из WAL для этого слота. Этот счетчик увеличивается каждый раз, когда транзакция сбрасывается на диск, и одна и та же транзакция может быть записана на диск несколько раз.

spill_bytes bigint

Количество расшифрованных данных транзакции, вытекших на диск во время выполнения декодирования изменений из WAL для этого слота. Этот и другие счетчики переполнения могут быть использованы для оценки I/O, которое произошло во время логического декодирования и позволяют настроить logical_decoding_work_mem.

stream_txns bigint

Количество транзакций, находящихся в процессе передачи в декодирующий плагин вывода после превышения памяти, используемой логическим декодированием для декодирования изменений из WAL для этого слота, параметром logical_decoding_work_mem. Потоковая передача работает только с транзакциями верхнего уровня (подтранзакции не могут быть переданы независимо), поэтому счетчик не увеличивается для подтранзакций.

stream_countbigint

Количество раз, когда транзакции, находящиеся в процессе выполнения, были переданы в плагин вывода декодирования при декодировании изменений из WAL для этого слота. Этот счетчик увеличивается каждый раз, когда транзакция передается, и одна и та же транзакция может быть передана несколько раз.

stream_bytesbigint

Количество декодированных данных транзакции для потоковой передачи в процессе транзакций на декодирование выходного плагина при декодировании изменений из WAL для этого слота. Этот и другие счетчики потоковой передачи для этого слота могут использоваться для настройки logical_decoding_work_mem.

total_txns bigint

Количество декодированных транзакций, отправленных в плагин вывода декодирования для этого слота. Это число учитывает только транзакции верхнего уровня и не увеличивается для подтранзакций. Обратите внимание, что это включает транзакции, которые передаются потоком и/или сбрасываются.

total_bytesbigint

Количество декодированных данных транзакций для отправки транзакций в плагин вывода декодирования при декодировании изменений из WAL для этого слота. Обратите внимание, что это включает данные, которые передаются потоком и/или сбрасываются.

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


26.2.6. pg_stat_wal_receiver #

Представление pg_stat_wal_receiver будет содержать только одну строку, отображающую статистику о приемнике WAL от подключенного сервера.

Таблица 26.16. pg_stat_wal_receiver View

Тип столбца

Описание

pid integer

Идентификатор процесса приемника WAL

status text

Статус активности процесса приемника WAL

receive_start_lsn pg_lsn

Первое местоположение журнала предварительной записи, используемое при запуске приемника WAL

receive_start_tli integer

Первый номер временной шкалы, используемый при запуске приемника WAL

written_lsn pg_lsn

Последнее местоположение журнала предварительной записи уже получено и записано на диск, но не сброшено. Это не должно использоваться для проверки целостности данных.

flushed_lsn pg_lsn

Последнее местоположение журнала предварительной записи, уже полученное и записанное на диск, начальное значение этого поля является первым местоположением журнала, используемым при запуске приемника WAL

received_tli integer

Временная шкала номера последней записи журнала предварительной записи, полученной и сброшенной на диск, начальное значение этого поля - это номер временной шкалы первой записи журнала, используемой при запуске приемника WAL

last_msg_send_time timestamp with time zone

Время отправки последнего сообщения, полученного от исходного отправителя WAL

last_msg_receipt_time timestamp with time zone

Время получения последнего сообщения от источника отправителя WAL

latest_end_lsn pg_lsn

Последнее местоположение журнала предварительной записи, сообщенное отправителю WAL источника

latest_end_time timestamp with time zone

Время последней записи местоположения журнала предварительной записи, сообщенное отправителю WAL источника

slot_name text

Имя слота репликации, используемое этим приемником WAL

sender_host text

Хост экземпляра Tantor BE, к которому подключен этот приемник WAL. Это может быть имя хоста, IP-адрес или путь к каталогу, если соединение осуществляется через Unix-сокет. (Путь можно отличить, потому что он всегда будет абсолютным путем, начинающимся с /).

sender_port integer

Номер порта экземпляра Tantor BE, к которому подключен данный приемник WAL.

conninfo text

Строка подключения, используемая этим приемником WAL, с замаскированные полями, содержащими информацию о безопасности.


26.2.7. pg_stat_recovery_prefetch #

Представление pg_stat_recovery_prefetch будет содержать только одну строку. Столбцы wal_distance, block_distance и io_depth показывают текущие значения, а остальные столбцы показывают накопленные счетчики, которые можно сбросить с помощью функции pg_stat_reset_shared.

Таблица 26.17. pg_stat_recovery_prefetch View

Тип столбца

Описание

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены

prefetch bigint

Количество предварительно загруженных блоков, поскольку они отсутствовали в буферном пуле

hit bigint

Количество блоков, которые не были предварительно загружены, потому что они уже находились в буферном пуле

skip_init bigint

Количество блоков, которые не были предварительно загружены, потому что они были инициализированы нулями

skip_new bigint

Количество блоков, которые не были предварительно загружены, потому что они еще не существовали

skip_fpw bigint

Количество блоков, которые не были предварительно загружены, потому что полное изображение страницы было включено в WAL

skip_rep bigint

Количество блоков, которые не были предварительно загружены, потому что они уже были недавно предварительно загружены

wal_distance int

Сколько байтов вперед смотрит предварительная загрузка

block_distance int

На сколько блоков вперед смотрит предварительная загрузка

io_depth int

Сколько предварительных запросов было инициировано, но еще неизвестно, завершились ли они


26.2.8. pg_stat_subscription #

Таблица 26.18. pg_stat_subscription View

Тип столбца

Описание

subid oid

OID подписки

subname name

Имя подписки

worker_type text

Тип рабочего процесса подписки. Возможные типы: применение, параллельное применение и синхронизация таблицы.

pid integer

Идентификатор процесса рабочего процесса подписки

leader_pid integer

Идентификатор процесса ведущего рабочего процесса применения изменений, если этот процесс является параллельным рабочим процессом применения; NULL, если этот процесс является ведущим рабочим процессом применения или рабочим процессом синхронизации таблицы

relid oid

OID отношения, которое синхронизирует рабочий процесс; NULL для ведущего процесса применения изменений и параллельных рабочих процессов применения изменений

received_lsn pg_lsn

Последнее полученное местоположение журнала предзаписи, начальное значение этого поля равно 0; NULL для параллельных рабочих процессов применения изменений

last_msg_send_time timestamp with time zone

Время отправки последнего сообщения, полученного от исходного отправителя WAL; NULL для параллельных рабочих процессов применения изменений

last_msg_receipt_time timestamp with time zone

Время получения последнего сообщения от отправителя WAL из источника; NULL для параллельных рабочих процессов применения изменений

latest_end_lsn pg_lsn

Последнее местоположение журнала предзаписи, о котором сообщил отправитель WAL; NULL для параллельных рабочих процессов применения изменения

latest_end_time timestamp with time zone

Время последнего местоположения журнала предзаписи, сообщенного отправителю журнала предзаписи источника; NULL для параллельных рабочих процессов применения изменений


26.2.9. pg_stat_subscription_stats #

Представление pg_stat_subscription_stats будет содержать одну строку для каждой подписки.

Таблица 26.19. pg_stat_subscription_stats View

Тип столбца

Описание

subid oid

OID подписки

subname name

Имя подписки

apply_error_count bigint

Количество раз, когда произошла ошибка при применении изменений

sync_error_count bigint

Количество раз, когда произошла ошибка во время начальной синхронизации таблицы

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


26.2.10. pg_stat_ssl #

Представление pg_stat_ssl будет содержать одну строку для каждого процесса бэкенда или отправителя WAL, показывающую статистику использования SSL на этом соединении. Его можно объединить с pg_stat_activity или pg_stat_replication по столбцу pid, чтобы получить более подробную информацию о соединении.

Таблица 26.20. pg_stat_ssl View

Тип столбца

Описание

pid integer

Идентификатор процесса бэкенда или отправителя WAL

ssl boolean

True, если на этом соединении используется SSL

version text

Версия SSL, используемая на данном соединении, или NULL, если SSL не используется на данном соединении

cipher text

Имя используемого SSL-шифра или NULL, если SSL не используется на данном соединении

bits integer

Количество бит в используемом алгоритме шифрования или NULL, если SSL не используется в этом соединении

client_dn text

Поле Distinguished Name (DN) из клиентского сертификата, использованного, или NULL, если клиентский сертификат не был предоставлен или если SSL не используется в этом соединении. Это поле усекается, если поле DN длиннее NAMEDATALEN (64 символа в стандартной сборке).

client_serial numeric

Серийный номер клиентского сертификата или NULL, если клиентский сертификат не был предоставлен или если SSL не используется в этом соединении. Комбинация серийного номера сертификата и его эмитента уникально идентифицирует сертификат (если эмитент ошибочно повторно использует серийные номера).

issuer_dn text

DN эмитента клиентского сертификата или NULL, если клиентский сертификат не был предоставлен или если SSL не используется в этом соединении. Это поле обрезается, как client_dn.


26.2.11. pg_stat_gssapi #

Представление pg_stat_gssapi будет содержать одну строку для каждого бэкенда, отображающую информацию об использовании GSSAPI в этом соединении. Его можно объединить с представлениями pg_stat_activity или pg_stat_replication по столбцу pid, чтобы получить более подробную информацию о соединении.

Таблица 26.21. pg_stat_gssapi View

Тип столбца

Описание

pid integer

Идентификатор процесса бэкенда

gss_authenticated boolean

True если для этого соединения использовалась аутентификация GSSAPI

principal text

Principal используется для аутентификации данного соединения или NULL, если GSSAPI не использовался для аутентификации данного соединения. Это поле обрезается, если принципал длиннее NAMEDATALEN (64 символа в стандартной сборке).

encrypted boolean

True если на этом соединении используется шифрование GSSAPI

credentials_delegated boolean

Истина, если учетные данные GSSAPI были делегированы в этом соединении.


26.2.12. pg_stat_archiver #

Представление pg_stat_archiver всегда будет содержать одну строку, содержащую данные о процессе архивации кластера.

Таблица 26.22. pg_stat_archiver View

Тип столбца

Описание

archived_count bigint

Количество WAL-файлов, которые были успешно архивированы

last_archived_wal text

Имя последнего успешно архивированного файла журнала предзаписи

last_archived_time timestamp with time zone

Время последней успешной операции архивирования

failed_count bigint

Количество неудачных попыток архивации файлов журнала предзаписи

last_failed_wal text

Имя файла журнала предзаписи последней неудачной операции архивирования

last_failed_time timestamp with time zone

Время последней неудачной операции архивирования

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


Обычно файлы WAL архивируются в порядке от старых к новым, но это не гарантируется и не выполняется в особых случаях, таких как повышение резервной копии или после восстановления после сбоя. Поэтому нельзя считать безопасным предположение, что все файлы, старше last_archived_wal, также успешно архивированы.

26.2.13. pg_stat_io #

pg_stat_io представление будет содержать одну строку для каждой комбинации типа фонового процесса, целевого объекта ввода-вывода и контекста ввода-вывода, показывая статистику ввода-вывода для всего кластера. Комбинации, которые не имеют смысла, опущены.

В настоящее время отслеживается ввод-вывод на отношениях (например, таблицах, индексах). Однако ввод-вывод на отношениях, который обходит общие буферы (например, при перемещении таблицы из одного табличного пространства в другое), в настоящее время не отслеживается.

Таблица 26.23. pg_stat_io Представление

Тип столбца

Описание

backend_type text

Тип фонового процесса (например, фоновый рабочий процесс, рабочий процесс autovacuum). См. pg_stat_activity для получения дополнительной информации о backend_type. Некоторые backend_type не накапливают статистику операций ввода-вывода и не будут включены в представление.

object text

Целевой объект операции ввода-вывода. Возможные значения:

  • relation: Постоянные отношения.

  • temp relation: Временные отношения.

context text

Контекст операции ввода-вывода. Возможные значения:

  • normal: Значение по умолчанию или стандартный контекст для типа операции ввода-вывода. Например, по умолчанию данные отношения читаются и записываются из общих буферов. Таким образом, чтение и запись данных отношений в и из общих буферов отслеживаются в контексте normal.

  • vacuum: операции ввода-вывода, выполняемые вне общих буферов при очистке и анализе постоянных отношений. Очистка временных таблиц использует тот же локальный пул буферов, что и другие операции ввода-вывода временных таблиц, и отслеживается в context normal.

  • bulkread: Некоторые крупные операции чтения данных, выполняемые вне общих буферов, например, последовательное сканирование большой таблицы.

  • bulkwrite: Некоторые крупные операции записи ввода-вывода, выполняемые вне общих буферов, такие как COPY.

reads bigint

Количество операций чтения, каждая из которых имеет размер, указанный в op_bytes.

время_чтения double precision

Время, затраченное на операции чтения, в миллисекундах (если track_io_timing включен, иначе ноль)

writes bigint

Количество операций записи, каждая из которых имеет размер, указанный в op_bytes.

время_записи double precision

Время, затраченное на операции записи, в миллисекундах (если track_io_timing включено, иначе ноль)

writebacks bigint

Количество единиц размера op_bytes, которые процесс запросил у ядра для записи на постоянное хранилище.

время_записи double precision

Время, затраченное на операции записи в миллисекундах (если track_io_timing включен, иначе ноль). Это включает время, затраченное на постановку запросов на запись в очередь и, возможно, время, затраченное на запись измененных данных.

extends bigint

Количество операций расширения отношения, каждая из которых имеет размер, указанный в op_bytes.

время_расширения double precision

Время, затраченное на операции расширения, в миллисекундах (если track_io_timing включено, иначе ноль)

op_bytes bigint

Количество байт на единицу ввода-вывода при чтении, записи или расширении.

Операции чтения, записи и расширения данных отношения выполняются в единицах block_size, полученных из параметра времени сборки BLCKSZ, который по умолчанию равен 8192.

hits bigint

Количество раз, когда нужный блок был найден в общей буферной памяти.

evictions bigint

Количество раз, когда блок был записан из общей или локальной буфера, чтобы сделать его доступным для другого использования.

В context normal, это подсчитывает количество раз, когда блок был вытеснен из буфера и заменен другим блоком. В contextах bulkwrite, bulkread и vacuum, это подсчитывает количество раз, когда блок был вытеснен из общих буферов для добавления общего буфера в отдельный, ограниченный по размеру кольцевой буфер для использования в операции массового ввода-вывода.

reuses bigint

Количество раз, когда существующий буфер в кольцевом буфере с ограниченным размером вне общих буферов был повторно использован в рамках операции ввода-вывода в bulkread, bulkwrite или vacuum contextах.

fsyncs bigint

Количество вызовов fsync. Они отслеживаются только в контексте normal.

время_синхронизации double precision

Время, затраченное на операции fsync, в миллисекундах (если track_io_timing включено, иначе ноль)

stats_reset timestamp with time zone

Время последнего сброса этой статистики.


Некоторые типы серверов никогда не выполняют операции ввода-вывода на некоторых объектах ввода-вывода и/или в некоторых контекстах ввода-вывода. Эти строки исключены из представления. Например, контрольная точка не создает контрольные точки для временных таблиц, поэтому не будет строк для backend_type checkpointer и object temp relation.

Кроме того, некоторые операции ввода-вывода никогда не будут выполняться определенными типами серверов или на определенных объектах ввода-вывода и/или в определенных контекстах ввода-вывода. Эти ячейки будут NULL. Например, временные таблицы не fsyncятся, поэтому fsyncs будет NULL для object temp relation. Также, фоновый писатель не выполняет чтения, поэтому reads будет NULL в строках для backend_type background writer.

pg_stat_io можно использовать для настройки базы данных. Например:

  • Высокий evictions счет может указывать на то, что объем разделяемых буферов следует увеличить.

  • Клиентские серверы полагаются на контрольную точку для обеспечения сохранения данных на постоянное хранилище. Большое количество fsyncs от client backend может указывать на неправильную настройку общих буферов или контрольной точки. Дополнительную информацию о настройке контрольной точки можно найти в Раздел 27.5.

  • Обычно клиентские серверы должны полагаться на вспомогательные процессы, такие как контрольная точка и фоновый писатель, для записи измененных данных насколько это возможно. Большое количество записей клиентскими серверами может указывать на неправильную настройку общих буферов или контрольной точки. Дополнительную информацию о настройке контрольной точки можно найти в Раздел 27.5.

Примечание

Столбцы, отслеживающие время ввода-вывода, будут ненулевыми только в том случае, если track_io_timing включен. Пользователь должен быть осторожен при обращении к этим столбцам в сочетании с их соответствующими операциями ввода-вывода, если track_io_timing не был включен все время с момента последнего сброса статистики.

26.2.14. pg_stat_bgwriter #

Представление pg_stat_bgwriter всегда будет иметь одну строку, содержащую данные о фоновой записи кластера.

Таблица 26.24. pg_stat_bgwriter View

Тип столбца

Описание

buffers_clean bigint

Количество буферов, записанных фоновым писателем

maxwritten_clean bigint

Количество раз, когда фоновый записывающий процесс останавливал процесс очистки, потому что он записал слишком много буферов

buffers_alloc bigint

Количество выделенных буферов

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


26.2.15. pg_stat_checkpointer #

Представление pg_stat_checkpointer всегда будет иметь одну строку, содержащую данные о процессе контрольной точки кластера.

Таблица 26.25. pg_stat_checkpointer Представление

Тип столбца

Описание

num_timed bigint

Количество запланированных контрольных точек из-за тайм-аута. Обратите внимание, что контрольные точки могут быть пропущены, если сервер был неактивен с момента последней, и это значение учитывает как завершенные, так и пропущенные контрольные точки

num_requested bigint

Количество выполненных запрошенных контрольных точек

restartpoints_timed bigint

Количество запланированных точек перезапуска из-за тайм-аута или после неудачной попытки его выполнения

restartpoints_req bigint

Количество запрашиваемых точек перезапуска

restartpoints_done bigint

Количество выполненных точек перезапуска

время_записи double precision

Общее количество времени, затраченного на часть обработки контрольных точек и точек перезапуска, где файлы записываются на диск, в миллисекундах

время_синхронизации double precision

Общее количество времени, затраченное на часть обработки контрольных точек и точек перезапуска, где файлы синхронизируются с диском, в миллисекундах

buffers_written bigint

Количество буферов, записанных во время контрольных точек и точек перезапуска

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


26.2.16. pg_stat_wal #

Представление pg_stat_wal всегда будет иметь одну строку, содержащую данные о активности WAL кластера.

Таблица 26.26. pg_stat_wal View

Тип столбца

Описание

wal_records bigint

Общее количество сгенерированных записей WAL

wal_fpi bigint

Общее количество сгенерированных полных страниц WAL

wal_bytes numeric

Общий объем сгенерированных WAL в байтах

wal_buffers_full bigint

Количество раз, когда данные WAL были записаны на диск, потому что буферы WAL стали полными

wal_write bigint

Количество раз, когда буферы WAL были записаны на диск с помощью запроса XLogWrite. См. Раздел 27.5 для получения дополнительной информации о внутренней функции WAL XLogWrite.

wal_sync bigint

Количество раз, когда файлы WAL были синхронизированы с диском с помощью запроса issue_xlog_fsync (если fsync включен и wal_sync_method равен fdatasync, fsync или fsync_writethrough, в противном случае ноль). См. Раздел 27.5 для получения дополнительной информации о внутренней функции WAL issue_xlog_fsync.

wal_write_time double precision

Время, затраченное на запись буферов WAL на диск с помощью запроса XLogWrite, в миллисекундах (если track_wal_io_timing включено, в противном случае ноль). Это включает время синхронизации, когда wal_sync_method равен либо open_datasync, либо open_sync.

wal_sync_time double precision

Суммарное время, затраченное на синхронизацию WAL-файлов на диск с помощью запроса issue_xlog_fsync, в миллисекундах (если track_wal_io_timing включено, fsync равно on, и wal_sync_method равно либо fdatasync, fsync или fsync_writethrough, в противном случае ноль).

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


26.2.17. pg_stat_database #

Представление pg_stat_database будет содержать одну строку для каждой базы данных в кластере, а также одну для общих объектов, отображающую статистику по всей базе данных.

Таблица 26.27. pg_stat_database View

Тип столбца

Описание

datid oid

OID этой базы данных или 0 для объектов, принадлежащих общему отношению

datname name

Название этой базы данных или NULL для общих объектов.

numbackends integer

Количество подключенных в настоящий момент к этой базе данных бэкендов или NULL для общих объектов. Это единственный столбец в этом представлении, который возвращает значение, отражающее текущее состояние; все остальные столбцы возвращают накопленные значения с момента последней сброса.

xact_commit bigint

Количество транзакций в этой базе данных, которые были подтверждены

xact_rollback bigint

Количество транзакций в этой базе данных, которые были отменены

blks_read bigint

Количество считанных дисковых блоков в этой базе данных

blks_hit bigint

Количество раз, когда блоки диска уже были найдены в кеше буфера, так что чтение не было необходимо (это включает только попадания в кеш буфера PostgreSQL, а не в кеш файловой системы операционной системы)

tup_returned bigint

Количество активных строк, полученных последовательным сканированием, и записей индекса, возвращенных индексным сканированием в этой базе данных

tup_fetched bigint

Количество активных строк, извлеченных индексными сканированиями в этой базе данных

tup_inserted bigint

Количество строк, вставленных запросами в эту базу данных

tup_updated bigint

Количество строк, обновленных запросами в этой базе данных

tup_deleted bigint

Количество удаленных строк запросами в этой базе данных

conflicts bigint

Количество запросов, отмененных из-за конфликтов с восстановлением в этой базе данных. (Конфликты возникают только на резервных серверах; см. pg_stat_database_conflicts для получения подробной информации).

temp_files bigint

Количество временных файлов, созданных запросами в этой базе данных. Все временные файлы учитываются, независимо от того, для чего был создан временный файл (например, для сортировки или хеширования), и независимо от настройки log_temp_files.

temp_bytes bigint

Общий объем данных, записанных во временные файлы запросами в этой базе данных. Все временные файлы учитываются, независимо от причины их создания и независимо от настройки log_temp_files.

deadlocks bigint

Количество обнаруженных блокировок в этой базе данных

checksum_failures bigint

Количество обнаруженных ошибок контрольных сумм страниц данных в этой базе данных (или на общем объекте), или NULL, если контрольные суммы данных не включены.

checksum_last_failure timestamp with time zone

Время, когда была обнаружена последняя ошибка контрольной суммы на странице данных в этой базе данных (или на общем объекте), или NULL, если контрольные суммы данных не включены.

blk_read_time double precision

Время, затраченное на чтение блоков данных процессами бэкендаи в этой базе данных, в миллисекундах (если track_io_timing включено, в противном случае ноль)

blk_write_time double precision

Время, затраченное на запись блоков данных процессами бэкендаи в этой базе данных, в миллисекундах (если track_io_timing включено, в противном случае ноль)

session_time double precision

Время, затраченное сессиями базы данных в этой базе данных, в миллисекундах (обратите внимание, что статистика обновляется только при изменении состояния сессии, поэтому, если сессии были бездействующими в течение длительного времени, это бездействие не будет учтено)

active_time double precision

Время, затраченное на выполнение SQL-запросов в этой базе данных, в миллисекундах (это соответствует состояниям active и fastpath function call в pg_stat_activity)

idle_in_transaction_time double precision

Время, проведенное в простое во время транзакции в этой базе данных, в миллисекундах (это соответствует состояниям idle in transaction и idle in transaction (aborted) в pg_stat_activity)

sessions bigint

Общее количество установленных сессий для этой базы данных

sessions_abandoned bigint

Количество сессий базы данных в этой базе данных, которые были завершены из-за потери соединения с клиентом

sessions_fatal bigint

Количество сессий базы данных, завершенных из-за критических ошибок

sessions_killed bigint

Количество сессий базы данных, завершенных оператором вмешательством

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


26.2.18. pg_stat_database_conflicts #

Представление pg_stat_database_conflicts будет содержать одну строку для каждой базы данных, отображающую общую статистику по отмене запросов, вызванной конфликтами с восстановлением на резервных серверах. Это представление будет содержать информацию только о резервных серверах, так как конфликты не возникают на основных серверах.

Таблица 26.28. pg_stat_database_conflicts View

Тип столбца

Описание

datid oid

OID базы данных

datname name

Название этой базы данных

confl_tablespace bigint

Количество запросов в этой базе данных, которые были отменены из-за удаленных табличных пространств

confl_lock bigint

Количество запросов в этой базе данных, которые были отменены из-за истечения времени блокировки

confl_snapshot bigint

Количество запросов в этой базе данных, которые были отменены из-за старых снимков

confl_bufferpin bigint

Количество запросов в этой базе данных, которые были отменены из-за закрепленных буферов

confl_deadlock bigint

Количество запросов в этой базе данных, которые были отменены из-за взаимоблокировок

confl_active_logicalslot bigint

Количество использований логических слотов в этой базе данных, которые были отменены из-за старых снимков или слишком низкого wal_level на первичном сервере


26.2.19. pg_stat_all_tables #

Представление pg_stat_all_tables будет содержать одну строку для каждой таблицы в текущей базе данных (включая TOAST таблицы), показывающую статистику обращений к этой конкретной таблице. Представления pg_stat_user_tables и pg_stat_sys_tables содержат ту же информацию, но отфильтрованную для отображения только пользовательских и системных таблиц соответственно.

Таблица 26.29. pg_stat_all_tables View

Тип столбца

Описание

relid oid

OID таблицы

schemaname name

Имя схемы, в которой находится эта таблица

relname name

Название этой таблицы

seq_scan bigint

Количество последовательных сканирований, инициированных на этой таблице

last_seq_scan timestamp with time zone

Время последнего последовательного сканирования этой таблицы, основанное на времени остановки последней транзакции

seq_tup_read bigint

Количество активных строк, извлеченных последовательным сканированием

idx_scan bigint

Количество инициированных индексных сканирований на этой таблице

последнее_сканирование_индекса timestamp with time zone

Время последнего индексного сканирования на этой таблице, основанное на времени остановки последней транзакции

idx_tup_fetch bigint

Количество активных строк, извлеченных индексным сканированием

n_tup_ins bigint

Общее количество вставленных строк

n_tup_upd bigint

Общее количество обновленных строк. (Это включает обновления строк, учитываемые в n_tup_hot_upd и n_tup_newpage_upd, а также оставшиеся не-HOT обновления.)

n_tup_del bigint

Общее количество удаленных строк

n_tup_hot_upd bigint

Количество строк обновлено HOT. Это обновления, для которых не требуются последующие версии в индексах.

n_tup_newpage_upd bigint

Количество обновленных строк, где следующая версия попадает на новую страницу кучи, оставляя позади оригинальную версию с полем t_ctid , которое указывает на другую страницу кучи. Это всегда не-HOT обновления.

n_live_tup bigint

Оценочное количество активных строк

n_dead_tup bigint

Оценочное количество удаленных строк

n_mod_since_analyze bigint

Оценочное количество измененных строк с момента последнего анализа этой таблицы

n_ins_since_vacuum bigint

Оценочное количество строк, вставленных с момента последней операции очистки для этой таблицы

last_vacuum timestamp with time zone

Последний раз, когда эта таблица была вручную проанализирована (не считая VACUUM FULL)

last_autovacuum timestamp with time zone

Последний раз, когда эта таблица была очищена с помощью процесса автоочистки

last_analyze timestamp with time zone

Последний раз, когда эта таблица была проанализирована вручную

last_autoanalyze timestamp with time zone

Последнее время, когда эта таблица была проанализирована автоматическим демоном autovacuum

vacuum_count bigint

Количество раз, когда эта таблица была вручную проанализирована (не считая VACUUM FULL)

autovacuum_count bigint

Количество раз, когда эта таблица была просмотрена фоновым процессом автоматической очистки

analyze_count bigint

Количество раз, когда эта таблица была проанализирована вручную

autoanalyze_count bigint

Количество раз, когда эту таблицу анализировал демон автоочистки


26.2.20. pg_stat_all_indexes #

Представление pg_stat_all_indexes будет содержать одну строку для каждого индекса в текущей базе данных, показывая статистику об обращениях к этому конкретному индексу. Представления pg_stat_user_indexes и pg_stat_sys_indexes содержат ту же информацию, но отфильтрованную для отображения только пользовательских и системных индексов соответственно.

Таблица 26.30. pg_stat_all_indexes View

Тип столбца

Описание

relid oid

OID таблицы для этого индекса

indexrelid oid

OID этого индекса

schemaname name

Имя схемы, в которой находится данный индекс

relname name

Имя таблицы для этого индекса

indexrelname name

Название этого индекса

idx_scan bigint

Количество инициированных сканирований индекса

последнее_сканирование_индекса timestamp with time zone

Время последнего сканирования этого индекса, основанное на времени остановки последней транзакции

idx_tup_read bigint

Количество записей индекса, возвращаемых сканированием этого индекса

idx_tup_fetch bigint

Количество активных строк таблицы, полученных при простом сканировании индекса с использованием этого индекса


Все индексы могут использоваться простыми сканированиями индексов, сканированиями индексов по битовой карте и оптимизатором. При сканировании по битовой карте результаты нескольких индексов могут быть объединены с помощью правил AND или OR, поэтому сложно связать отдельные выборки строк кучи с конкретными индексами при использовании сканирования по битовой карте. Поэтому сканирование по битовой карте увеличивает счетчик(ы) pg_stat_all_indexes.idx_tup_read для используемого(ых) индекса(-ов), а также увеличивает счетчик pg_stat_all_tables.idx_tup_fetch для таблицы, но не влияет на pg_stat_all_indexes.idx_tup_fetch. Оптимизатор также обращается к индексам для проверки предоставленных констант, значения которых находятся за пределами записанного диапазона статистики оптимизатора, поскольку статистика оптимизатора может быть устаревшей.

Примечание

Счетчики idx_tup_read и idx_tup_fetch могут отличаться даже без использования сканирований по битовой карте, поскольку idx_tup_read отражает количество извлеченных записей из индекса, в то время как idx_tup_fetch отражает количество извлеченных живых строк из таблицы. Последнее значение будет меньше, если при использовании индекса извлекаются удаленные или еще не подтвержденные строки, или если избегаются извлечения из кучи с помощью сканирования index-only.

Примечание

Запросы, которые используют определенные конструкции SQL для поиска строк, соответствующих любому значению из списка или массива нескольких скалярных значений (см. Раздел 9.25) выполняют несколько примитивных индексаций (до одной примитивной индексации на каждое скалярное значение) во время выполнения запроса. Каждое внутреннее примитивное индексное сканирование увеличивает pg_stat_all_indexes.idx_scan, поэтому количество индексных сканирований может значительно превышать общее количество выполнений узлов индексного сканирования.

26.2.21. pg_statio_all_tables #

Представление pg_statio_all_tables будет содержать одну строку для каждой таблицы в текущей базе данных (включая TOAST таблицы), показывающую статистику ввода-вывода для этой конкретной таблицы. Представления pg_statio_user_tables и pg_statio_sys_tables содержат ту же информацию, но фильтруются для отображения только пользовательских и системных таблиц соответственно.

Таблица 26.31. pg_statio_all_tables View

Тип столбца

Описание

relid oid

OID таблицы

schemaname name

Имя схемы, в которой находится эта таблица

relname name

Название этой таблицы

heap_blks_read bigint

Количество блоков диска, прочитанных из этой таблицы

heap_blks_hit bigint

Количество попаданий в буфер для этой таблицы

idx_blks_read bigint

Количество блоков диска, прочитанных из всех индексов этой таблицы

idx_blks_hit bigint

Количество попаданий буфера во всех индексах этой таблицы

toast_blks_read bigint

Количество блоков диска, прочитанных из TOAST-таблицы этой таблицы (если есть)

toast_blks_hit bigint

Количество попаданий буфера в TOAST-таблицу этой таблицы (если есть)

tidx_blks_read bigint

Количество блоков диска, прочитанных из индексов TOAST-таблицы этой таблицы (если они есть)

tidx_blks_hit bigint

Количество попаданий в буфер в индексах TOAST-таблицы этой таблицы (если они есть)


26.2.22. pg_statio_all_indexes #

Представление pg_statio_all_indexes будет содержать одну строку для каждого индекса в текущей базе данных, показывающую статистику ввода-вывода для этого конкретного индекса. Представления pg_statio_user_indexes и pg_statio_sys_indexes содержат ту же информацию, но фильтруются для отображения только пользовательских и системных индексов соответственно.

Таблица 26.32. pg_statio_all_indexes View

Тип столбца

Описание

relid oid

OID таблицы для этого индекса

indexrelid oid

OID этого индекса

schemaname name

Имя схемы, в которой находится данный индекс

relname name

Имя таблицы для этого индекса

indexrelname name

Название этого индекса

idx_blks_read bigint

Количество блоков диска, прочитанных из этого индекса

idx_blks_hit bigint

Количество попаданий в буфер для данного индекса


26.2.23. pg_statio_all_sequences #

Представление pg_statio_all_sequences будет содержать одну строку для каждой последовательности в текущей базе данных, отображая статистику о вводе-выводе для этой конкретной последовательности.

Таблица 26.33. pg_statio_all_sequences View

Тип столбца

Описание

relid oid

OID последовательности

schemaname name

Имя схемы, в которой находится данная последовательность

relname name

Имя этой последовательности

blks_read bigint

Количество блоков диска, прочитанных из этой последовательности

blks_hit bigint

Количество попаданий в буфер в этой последовательности


26.2.24. pg_stat_user_functions #

Представление pg_stat_user_functions будет содержать одну строку для каждой отслеживаемой функции, показывая статистику выполнения этой функции. Параметр track_functions управляет тем, какие функции отслеживаются.

Таблица 26.34. pg_stat_user_functions View

Тип столбца

Описание

funcid oid

OID функции

schemaname name

Имя схемы, в которой находится эта функция

funcname name

Название этой функции

calls bigint

Количество раз, когда эта функция была вызвана

total_time double precision

Общее время, затраченное на выполнение этой функции и всех других функций, вызываемых ею, в миллисекундах

self_time double precision

Общее время, затраченное на выполнение этой функции самой по себе, не включая другие функции, вызываемые ею, в миллисекундах


26.2.25. pg_stat_slru #

Tantor BE получает доступ к определенной информации на диске через SLRU (простые кеши с вытеснением наименее недавно использованных данных). Представление pg_stat_slru будет содержать одну строку для каждого отслеживаемого кеша SLRU, показывая статистику доступа к кешированным страницам.

Для каждого SLRU кеша, который является частью основного сервера, существует параметр конфигурации, который контролирует его размер, с добавленным суффиксом _buffers.

Таблица 26.35. pg_stat_slru View

Тип столбца

Описание

name text

Имя SLRU

blks_zeroed bigint

Количество блоков, обнуленных во время инициализации

blks_hit bigint

Количество раз, когда дисковые блоки уже были найдены в SLRU, так что чтение не было необходимо (это включает только попадания в SLRU, а не в кеш файловой системы операционной системы)

blks_read bigint

Количество считанных дисковых блоков для данного SLRU

blks_written bigint

Количество записанных дисковых блоков для данного SLRU

blks_exists bigint

Количество проверенных блоков на наличие для этого SLRU

flushes bigint

Количество сбросов грязных данных для этого SLRU

truncates bigint

Количество обрезок для этого SLRU

stats_reset timestamp with time zone

Время, когда эти статистические данные были последний раз сброшены


26.2.26. Функции статистики #

Другие способы просмотра статистики могут быть настроены путем написания запросов, которые используют те же функции доступа к статистике, что и стандартные представления, показанные выше. Для получения подробностей, таких как имена функций, обратитесь к определениям стандартных представлений. (Например, в psql вы можете выполнить команду \d+ pg_stat_activity). Функции доступа к статистике для статистики по базе данных принимают идентификатор базы данных (OID) в качестве аргумента для указания базы данных, о которой нужно сообщить. Функции для статистики по таблицам и индексам принимают идентификатор таблицы или индекса. Функции для статистики по функциям принимают идентификатор функции. Обратите внимание, что с помощью этих функций можно видеть только таблицы, индексы и функции в текущей базе данных.

Дополнительные функции, связанные с системой накопительной статистики, перечислены в Таблица 26.36.

Таблица 26.36. Дополнительные функции статистики

Функция

Описание

pg_backend_pid () → integer

Возвращает идентификатор процесса сервера, присоединенного к текущей сессии.

pg_stat_get_activity ( integer ) → setof record

Возвращает запись с информацией о бэкенде с указанным идентификатором процесса или одну запись для каждого активного бэкенда в системе, если указано значение NULL. Возвращаемые поля являются подмножеством полей в представлении pg_stat_activity.

pg_stat_get_snapshot_timestamp () → timestamp with time zone

Возвращает временную метку текущего снимка статистики или NULL, если снимок статистики не был сделан. Снимок делается в первый раз, когда накопленная статистика запрашивается в транзакции, если stats_fetch_consistency установлено в snapshot.

pg_stat_get_xact_blocks_fetched ( oid ) → bigint

Возвращает количество запросов на чтение блоков для таблицы или индекса в текущей транзакции. Это число минус pg_stat_get_xact_blocks_hit дает количество вызовов ядра read(); количество фактических физических чтений обычно меньше из-за буферизации на уровне ядра.

pg_stat_get_xact_blocks_hit ( oid ) → bigint

Возвращает количество запросов на чтение блоков для таблицы или индекса в текущей транзакции, найденных в кеше (не вызывающих ядерные read() вызовы).

pg_stat_clear_snapshot () → void

Отбрасывает текущую статистическую снимок или кешированную информацию.

pg_stat_reset () → void

Сбрасывает все счетчики статистики для текущей базы данных в ноль.

Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.

pg_stat_reset_shared ( [ target text DEFAULT NULL ] ) → void

Сбрасывает некоторые счетчики статистики всего кластера на ноль, в зависимости от аргумента. target может быть:

  • archiver: Сбросить все счетчики, отображаемые в представлении pg_stat_archiver.

  • bgwriter: Сбросить все счетчики, показанные в pg_stat_bgwriter представлении.

  • checkpointer: Сбросить все счетчики, показанные в pg_stat_checkpointer представлении.

  • io: Сбросить все счетчики, показанные в pg_stat_io представлении.

  • recovery_prefetch: Сбросить все счетчики, показанные в представлении pg_stat_recovery_prefetch.

  • slru: Сбросить все счетчики, показанные в pg_stat_slru представлении.

  • wal: Сбросить все счетчики, отображаемые в pg_stat_wal представлении.

  • NULL или не указано: Все счетчики из перечисленных выше представлений сбрасываются.

Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.

pg_stat_reset_single_table_counters ( oid ) → void

Сбрасывает статистику для одной таблицы или индекса в текущей базе данных или общую для всех баз данных в кластере на ноль.

Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.

pg_stat_reset_single_function_counters ( oid ) → void

Сбрасывает статистику для одной функции в текущей базе данных на ноль.

Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.

pg_stat_reset_slru ( [ target text DEFAULT NULL ] ) → void

Сбрасывает статистику до нуля для одного SLRU-кеша или для всех SLRU в кластере. Если target имеет значение NULL или не указан, все счетчики, показанные в представлении pg_stat_slru для всех SLRU-кешей, сбрасываются. Аргумент может быть одним из commit_timestamp, multixact_member, multixact_offset, notify, serializable, subtransaction или transaction, чтобы сбросить счетчики только для этой записи. Если аргумент равен other (или, действительно, любое нераспознанное имя), то счетчики для всех других SLRU-кешей, таких как кеши, определенные расширениями, сбрасываются.

Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.

pg_stat_reset_replication_slot ( text ) → void

Сбрасывает статистику слота репликации, определенного аргументом. Если аргумент равен NULL, сбрасывает статистику для всех слотов репликации.

Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.

pg_stat_reset_subscription_stats ( oid ) → void

Сбрасывает статистику для одной подписки, отображаемой в представлении pg_stat_subscription_stats, на ноль. Если аргумент равен NULL, сбрасывает статистику для всех подписок.

Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.


Предупреждение

С использованием функции pg_stat_reset() также сбрасываются счетчики, которые использует автоочистку для определения момента запуска операции очистки или анализа. Сброс этих счетчиков может привести к тому, что автоочистка не будет выполнять необходимую работу, что может вызвать проблемы, такие как накопление мусора в таблице или устаревшая статистика таблицы. Рекомендуется выполнить ANALYZE для всей базы данных после сброса статистики.

pg_stat_get_activity, основная функция представления pg_stat_activity, возвращает набор записей, содержащих всю доступную информацию о каждом процессе бэкенда. Иногда может быть удобнее получить только подмножество этой информации. В таких случаях можно использовать другой набор функций доступа к статистике по каждому бэкенду; они показаны в Таблица 26.37. Эти функции доступа используют номер идентификатора бэкенда сессии, который является небольшим целым числом (>= 0), отличающимся от идентификатора бэкенда любой параллельной сессии, хотя идентификатор сессии может быть переработан сразу после ее завершения. Идентификатор бэкенда используется, среди прочего, для идентификации временной схемы сессии, если она есть. Функция pg_stat_get_backend_idset предоставляет удобный способ перечисления всех активных номеров идентификаторов бэкендов для вызова этих функций. Например, чтобы показать PID и текущие запросы всех бэкендов:

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;

Таблица 26.37. Функции статистики для каждого бэкенда

Функция

Описание

pg_stat_get_backend_activity ( integer ) → text

Возвращает текст последнего запроса этого бэкенда.

pg_stat_get_backend_activity_start ( integer ) → timestamp with time zone

Возвращает время, когда был запущен последний запрос бэкенда.

pg_stat_get_backend_client_addr ( integer ) → inet

Возвращает IP-адрес клиента, подключенного к этому бэкенду.

pg_stat_get_backend_client_port ( integer ) → integer

Возвращает номер TCP-порта, который клиент использует для связи.

pg_stat_get_backend_dbid ( integer ) → oid

Возвращает OID базы данных, к которой подключен данный backend.

pg_stat_get_backend_idset () → setof integer

Возвращает набор текущих активных номеров идентификаторов фоновых процессов.

pg_stat_get_backend_pid ( integer ) → integer

Возвращает идентификатор процесса этого бэкенда.

pg_stat_get_backend_start ( integer ) → timestamp with time zone

Возвращает время, когда этот процесс был запущен.

pg_stat_get_backend_subxact ( integer ) → record

Возвращает запись с информацией о подтранзакциях бэкенда с указанным идентификатором. Возвращаемые поля: subxact_count, которое представляет собой количество подтранзакций в кеше подтранзакций бэкенда, и subxact_overflow, которое указывает, переполнен ли кеш подтранзакций бэкенда или нет.

pg_stat_get_backend_userid ( integer ) → oid

Возвращает OID пользователя, вошедшего в этот бэкенд.

pg_stat_get_backend_wait_event ( integer ) → text

Возвращает имя события ожидания, если данный процесс в настоящее время находится в состоянии ожидания, в противном случае NULL. См. таблицу активности ожидания (Таблица 26.5) до таблицы таймаута ожидания (Таблица 26.13).

pg_stat_get_backend_wait_event_type ( integer ) → text

Возвращает имя типа ожидаемого события, если данный backend в настоящее время находится в состоянии ожидания, в противном случае NULL. См. Таблица 26.4 для получения подробной информации.

pg_stat_get_backend_xact_start ( integer ) → timestamp with time zone

Возвращает время, когда была начата текущая транзакция бэкенда.