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

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

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



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

Поскольку сбор статистики несколько увеличивает затраты на выполнение запроса, систему можно настроить так, чтобы она собирала или не собирала информацию. Это контролируется параметрами конфигурации, которые обычно устанавливаются в qhb.conf. (Подробную информацию об установке параметров конфигурации см. в главе Конфигурация сервера).

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

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

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

Параметр track_io_timing включает мониторинг времени чтения, записи, расширения и синхронизации (с файловой системой) блоков.

Параметр track_wal_io_timing включает мониторинг времени записи и синхронизации (с файловой системой) WAL.

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

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



Просмотр статистики

Для отображения текущего состояния системы имеется несколько предопределенных представлений, перечисленных в Таблице 1. Кроме того, имеется несколько других представлений, перечисленных в Таблице 2, отображающих накопленную статистику. В качестве альтернативы с помощью нижележащих функций накопительной статистики можно создавать собственные представления, как описано в подразделе Функции статистики.

При использовании представлений и функций накопительной статистики для мониторинга собранных данных важно понимать, что информация обновляется не мгновенно. Каждый отдельный процесс сервера сбрасывает накопленную статистику в разделяемую память непосредственно перед тем, как перейти в режим ожидания, но не чаще одного раза в 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. Эти данные ведут себя не так, как описано выше; напротив, они постоянно обновляются на протяжении всей транзакции.

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

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

Имя представленияОписание
pg_stat_activityПо одной строке для каждого серверного процесса, отображающей информацию, связанную с текущей активностью этого процесса, например состояние и текущий запрос. Подробную информацию см. в справке по pg_stat_activity.
pg_stat_replicationПо одной строке для каждого процесса отправителя WAL, отображающей статистику по репликации на подключенном резервном сервере этого отправителя. Подробную информацию см. в справке по pg_stat_replication.
pg_stat_wal_receiverТолько одна строка, отображающая статистику о получателе WAL с подключенного сервера этого получателя. Подробную информацию см. в справке по pg_stat_wal_receiver.
pg_stat_recovery_prefetchТолько одна строка, отображающая статистику о блоках, предварительно извлеченных во время восстановления Подробную информацию см. в справке по pg_stat_recovery_prefetch.
pg_stat_subscriptionКак минимум по одной строке для каждой подписки, отображающей информацию о рабочих процессах подписки. Подробную информацию см. в справке по pg_stat_subscription.
pg_stat_sslПо одной строке для каждого подключения (обычного и реплицирующего), отображающей информацию о SSL, используемом для этого соединения. Подробную информацию см. в справке по pg_stat_ssl.
pg_stat_gssapiПо одной строке для каждого подключения (обычного и реплицирующего), отображающей информацию об аутентификации и шифровании GSSAPI, используемых в этом соединении. Подробную информацию см. в справке по pg_stat_gssapi.
pg_stat_progress_analyzeПо одной строке, отображающей текущий прогресс, для каждого обслуживающего процесса (включая рабочие процессы автовакуума), в котором выполняется ANALYZE. См. подраздел Отчет о ходе выполнения ANALYZE.
pg_stat_progress_create_indexПо одной строке, отображающей текущий прогресс, для каждого обслуживающего процесса, в котором выполняется CREATE INDEX или REINDEX. См. подраздел Отчет о ходе выполнения CREATE INDEX.
pg_stat_progress_vacuumПо одной строке, отображающей текущий прогресс, для каждого обслуживающего процесса (включая рабочие процессы автовакуума), в котором выполняется VACUUM. См. подраздел Отчет о ходе выполнения VACUUM.
pg_stat_progress_clusterПо одной строке, отображающей текущий прогресс, для каждого обслуживающего процесса, в котором выполняется CLUSTER или VACUUM FULL. См. подраздел Отчет о ходе выполнения CLUSTER.
pg_stat_progress_basebackupПо одной строке, отображающей текущий прогресс, для каждого процесса отправителя WAL, поточно передающего базовую копию. См. подраздел Отчет о ходе выполнения базового резервного копирования.
pg_stat_progress_copyПо одной строке, отображающей текущий прогресс, для каждого обслуживающего процесса, в котором выполняется COPY. См. подраздел Отчет о ходе выполнения COPY.

Таблица 2. Представления по собранной статистике

Имя представленияОписание
pg_stat_archiverТолько одна строка, отображающая статистику о работе процесса архиватора WAL. Подробную информацию см. в справке по pg_stat_archiver.
pg_stat_bgwriterТолько одна строка, отображающая статистику о работе фонового процесса записи. Подробную информацию см. в справке по pg_stat_bgwriter.
pg_stat_databaseПо одной строке на каждую базу данных, отображающей статистику на уровне базы данных. Подробную информацию см. в справке по pg_stat_database.
pg_stat_database_conflictsПо одной строке на каждую базу данных, отображающей статистику на уровне базы данных по отменам запросов из-за конфликта с восстановлением на резервных серверах. Подробную информацию см. в справке по pg_stat_database_conflicts.
pg_stat_ioПо одной строке для каждой комбинации типа обслуживающего процесса, контекста и целевого объекта, содержащего статистику ввода/вывода на уровне кластера. Подробную информацию см. в справке по pg_stat_io.
pg_stat_replication_slotsПо одной строке для каждого слота репликации, отображающей статистику по использованию этого слота. Подробную информацию см. в справке по pg_stat_replication_slots.
pg_stat_slruПо одной строке для каждого SLRU-кеша, отображающей статистику операций. Подробную информацию см. в справке по pg_stat_slru.
pg_stat_subscription_statsПо одной строке для каждой подписки, отображающей статистику по ошибкам. Подробную информацию см. в справке по pg_stat_subscription_stats.
pg_stat_walТолько одна строка, отображающая статистику о работе WAL. Подробную информацию см. в справке по pg_stat_wal.
pg_stat_all_tablesПо одной строке для каждой таблицы в текущей базе данных, отображающей статистику обращений к этой конкретной таблице. Подробную информацию см. в справке по pg_stat_all_tables.
pg_stat_sys_tablesТо же, что и pg_stat_all_tables, за исключением того, что отображаются только системные таблицы.
pg_stat_user_tablesТо же, что и pg_stat_all_tables, за исключением того, что отображаются только пользовательские таблицы.
pg_stat_xact_all_tablesПохоже на pg_stat_all_tables, но подсчитывает действия, совершенные к настоящему моменту в текущей транзакции (которые еще не включены в pg_stat_all_tables и связанные представления). Столбцы с количеством активных и нерабочих строк, а также с данными по операциям очистки и анализа в этом представлении отсутствуют.
pg_stat_xact_sys_tablesТо же, что и pg_stat_xact_all_tables, за исключением того, что отображаются только системные таблицы.
pg_stat_xact_user_tablesТо же, что и pg_stat_xact_all_tables, за исключением того, что отображаются только пользовательские таблицы.
pg_stat_all_indexesПо одной строке для каждого индекса в текущей базе данных, отображающей статистику обращений к этому конкретному индексу. Подробную информацию см. в справке по pg_stat_all_indexes.
pg_stat_sys_indexesТо же, что и pg_stat_all_indexes, за исключением того, что отображаются только индексы по системным таблицам.
pg_stat_user_indexesТо же, что и pg_stat_all_indexes, за исключением того, что отображаются только индексы по пользовательским таблицам.
pg_stat_user_functionsПо одной строке для каждой отслеживаемой функции, отображающей статистику выполнения этой функции. Подробную информацию см. в справке по pg_stat_user_functions.
pg_stat_xact_user_functionsПохоже на pg_stat_user_functions, но подсчитывает только вызовы во время текущей транзакции (которые еще не включены в pg_stat_user_functions).
pg_statio_all_tablesПо одной строке для каждой таблицы в текущей базе данных, отображающей статистику операций ввода/вывода для этой конкретной таблицы. Подробную информацию см. в справке по pg_statio_all_tables.
pg_statio_sys_tablesТо же, что и pg_statio_all_tables, за исключением того, что отображаются только системные таблицы.
pg_statio_user_tablesТо же, что и pg_statio_all_tables, за исключением того, что отображаются только пользовательские таблицы.
pg_statio_all_indexesПо одной строке для каждого индекса в текущей базе данных, отображающей статистику операций ввода/вывода для этого конкретного индекса. Подробную информацию см. в справке по pg_statio_all_indexes.
pg_statio_sys_indexesТо же, что и pg_statio_all_indexes, за исключением того, что отображаются только индексы по системным таблицам.
pg_statio_user_indexesТо же, что и pg_statio_all_indexes, за исключением того, что отображаются только индексы по пользовательским таблицам.
pg_statio_all_sequencesПо одной строке для каждой последовательности в текущей базе данных, отображающей статистику операций ввода/вывода для этой конкретной последовательности. Подробную информацию см. в справке по pg_statio_all_sequences.
pg_statio_sys_sequencesТо же, что и pg_statio_all_sequences, за исключением того, что отображаются только системные последовательности. (В настоящее время системные последовательности не определены, поэтому это представление всегда пусто.)
pg_statio_user_sequencesТо же, что и pg_statio_all_sequences, за исключением того, что отображаются только пользовательские последовательности.

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

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



pg_stat_activity

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

Таблица 3. Представление pg_stat_activity

Столбец ТипОписание
datid oidOID базы данных, к которой подключен этот обслуживающий процесс
datname nameИмя базы данных, к которой подключен этот обслуживающий процесс
pid integerPID этого обслуживающего процесса
leader_pid integerPID ведущего процесса параллельной группы, если этот процесс является рабочим процессом параллельного запроса, или PID ведущего процесса применения изменений, если этот процесс является рабочим процессом параллельного применения. NULL, если этот процесс является ведущим процессом параллельной группы или ведущим процессом применения изменений либо не участвует ни в какой параллельной операции.
usesysid oidOID пользователя, подсоединившегося к этому обслуживающему процессу
usename nameИмя пользователя, подсоединившегося к этому обслуживающему процессу
application_name textИмя приложения, подключенного к этому обслуживающему процессу
client_addr inetIP-адрес клиента, подключенного к этому обслуживающему процессу. Если данное поле равно NULL, это показывает, что клиент подключен через сокет домена Unix на компьютере сервера или что это внутренний процесс, например автоочистка.
client_hostname textИмя хоста подключенного клиента, получаемое обратным поиском в DNS по client_addr. Это поле будет отлично от NULL только для 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. См. Таблицу 4.
wait_event textИмя ожидаемого события, если обслуживающий процесс в настоящий момент находится в ожидании, в противном случае NULL. См. с Таблицы 5 по Таблицу 13.
state textОбщее текущее состояние этого обслуживающего процесса. Возможные значения:
- active: Обслуживающий процесс выполняет запрос.
- idle: Обслуживающий процесс ожидает новой команды от клиента.
- idle in transaction: Обслуживающий процесс находится внутри транзакции, но в настоящее время не выполняет запрос.
- idle in transaction (aborted): Этот состояние схоже с idle in transaction, за исключением того, что один из операторов в транзакции вызвал ошибку.
- fastpath function call: Обслуживающий процесс выполняет функцию по быстрому пути (fast-path).
- disabled: Это состояние отображается, если в этом обслуживающем процессе отключен параметр track_activities.
backend_xid xidИдентификатор транзакции верхнего уровня этого обслуживающего процесса, если таковая имеется; см. раздел Транзакции и идентификаторы.
backend_xmin xidГраница xmin текущего обслуживающего процесса.
query_id bigintИдентификатор последнего запроса этого обслуживающего процесса. Если state имеет значение active, в этом поле отображается идентификатор запроса, выполняемого в настоящий момент. При всех остальных состояниях в нем отображается идентификатор последнего выполненного запроса. По умолчанию идентификаторы запросов не вычисляются, поэтому если не включен параметр compute_query_id или не сконфигурирован сторонний модуль, вычисляющий идентификаторы запросов, данное поле будет равно NULL.
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. Кроме того, у фоновых рабочих процессов, регистрируемых расширениями, могут быть дополнительные типы.

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

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

Тип события ожиданияОписание
ActivityСерверный процесс бездействует. Этот тип события показывает, что процесс ожидает активности в своем основном цикле обработки. В wait_event будет указана конкретная точка ожидания; см. Таблицу 5.
BufferPinСерверный процесс ожидает эксклюзивного доступа к буферу данных. Ожидание закрепления буфера может затянуться, если другой процесс удерживает открытый курсор, который последним читал данные из указанного буфера. См. Таблицу 6.
ClientСерверный процесс ожидает активность в сокете, подключенном к пользовательскому приложению. Таким образом, сервер ожидает, что произойдет событие, не зависящее от его внутренних процессов. В wait_event будет указана конкретная точка ожидания; см. Таблицу 7.
ExtensionСерверный процесс ожидает некоторого условия, определяемого модулем расширения. См. Таблицу 8.
IOСерверный процесс ожидает завершения операции ввода/вывода. В wait_event будет указана конкретная точка ожидания; см. Таблицу 9.
IPCСерверный процесс ожидает некоторого взаимодействия с другим серверным процессом. В wait_event будет указана конкретная точка ожидания; см. Таблицу 10.
LockСерверный процесс ожидает тяжелую блокировку. Тяжелые блокировки, также известные как блокировки менеджера блокировок или просто блокировки, в основном защищают видимые SQL объекта, например, таблицы. Однако они также используются для обеспечения взаимного исключения некоторых внутренних операций, например, расширения отношений. В wait_event будет указан тип ожидаемой блокировки; см. Таблицу 11.
LWLockСерверный процесс ожидает легкую блокировку. Большинство таких блокировок защищают конкретные структуры данных в разделяемой памяти. В wait_event будет содержаться имя, указывающее на цель этой легкой блокировки. (Некоторые блокировки имеют особые имена; другие являются частью группы блокировок с похожим предназначением.) См. Таблицу 12.
TimeoutСерверный процесс ожидает истечения тайм-аута. В wait_event будет указана конкретная точка ожидания; см. Таблицу 13.

Таблица 5. События ожидания типа Activity

Событие ожидания ActivityОписание
ArchiverMainОжидание в основном цикле процесса архиватора.
AutoVacuumMainОжидание в основном цикле процесса запуска автовакуума.
BgWriterHibernateОжидание в фоновом процессе записи, переход в спящий режим.
BgWriterMainОжидание в основном цикле фонового процесса записи.
CheckpointerMainОжидание в основном цикле процесса контрольной точки.
LogicalApplyMainОжидание в основном цикле процесса применения логической репликации.
LogicalLauncherMainОжидание в основном цикле процесса запуска логической репликации.
LogicalParallelApplyMainОжидание в основном цикле параллельного процесса применения логической репликации.
RecoveryWalStreamОжидание поступления WAL в основном цикле процесса запуска во время потокового восстановления.
SysLoggerMainОжидание в основном цикле процесса системного журнала (syslogger).
WalReceiverMainОжидание в основном цикле процесса-получателя WAL.
WalSenderMainОжидание в основном цикле процесса-отправителя WAL.
WalWriterMainОжидание в основном цикле процесса записи WAL.

Таблица 6. События ожидания типа BufferPin

Событие ожидания BufferPinОписание
BufferPinОжидание при получении эксклюзивного закрепления буфера.

Таблица 7. События ожидания типа Client

Событие ожидания ClientОписание
ClientReadОжидание при чтении данных, получаемых от клиента.
ClientWriteОжидание при записи данных, передаваемых клиенту.
GSSOpenServerОжидание при чтении данных, получаемых от клиента, при установлении сеанса GSSAPI.
LibPQWalReceiverConnectОжидание в получателе WAL при установлении подключения к удаленному серверу.
LibPQWalReceiverReceiveОжидание в получателе WAL при получении данных от удаленного сервера.
SSLOpenServerОжидание SSL при попытке подключения.
WalSenderWaitForWALОжидание сброса WAL на диск в процессе-отправителе WAL.
WalSenderWriteDataОжидание какой-либо активности при обработке ответов от получателя WAL в процессе-отправителе WAL.

Таблица 8. События ожидания типа Extension

Событие ожидания ExtensionОписание
ExtensionОжидание в расширении.

Таблица 9. События ожидания типа IO

Событие ожидания IOОписание
BaseBackupReadОжидание чтения базовой резервной копии из файла.
BaseBackupSyncОжидание помещения данных, записанных процессом базового резервного копирования, в долговременное хранилище.
BaseBackupWriteОжидание записи базовой резервной копии в файл.
BufFileReadОжидание чтения из буферизованного файла.
BufFileTruncateОжидание усечения буферизованного файла.
BufFileWriteОжидание записи в буферизованный файл.
ControlFileReadОжидание чтения из файла pg_control.
ControlFileSyncОжидание помещения файла pg_control в долговременное хранилище.
ControlFileSyncUpdateОжидание помещения изменений файла pg_control в долговременное хранилище.
ControlFileWriteОжидание записи в файл pg_control.
ControlFileWriteUpdateОжидание записи изменения файла pg_control.
CopyFileReadОжидание чтения во время операции копирования файла.
CopyFileWriteОжидание записи во время операции копирования файла.
DSMAllocateОжидание выделения сегмента динамической разделяемой памяти.
DSMFillZeroWriteОжидание при заполнении нулями поддерживающего файла динамической разделяемой памяти.
DataFileExtendОжидание расширения файла данных отношения.
DataFileFlushОжидание помещения файла данных отношения в долговременное хранилище.
DataFileImmediateSyncОжидание немедленной синхронизации файла данных отношения с долговременным хранилищем.
DataFilePrefetchОжидание асинхронной предварительной выборки из файла данных отношения.
DataFileReadОжидание чтения из файла данных отношения.
DataFileSyncОжидание помещения изменений файла данных отношения в долговременное хранилище.
DataFileTruncateОжидание усечения файла данных отношения.
DataFileWriteОжидание записи в файл данных отношения.
LockFileAddToDataDirReadОжидание чтения при добавлении строки в файл блокировки каталога данных.
LockFileAddToDataDirSyncОжидание помещения данных в долговременное хранилище при добавлении строки в файл блокировки каталога данных.
LockFileAddToDataDirWriteОжидание записи при добавлении строки в файл блокировки каталога данных.
LockFileCreateReadОжидание чтения при создании файла блокировки каталога данных.
LockFileCreateSyncОжидание помещения данных в долговременное хранилище при создании файла блокировки каталога данных.
LockFileCreateWriteОжидание записи при создании файла блокировки каталога данных.
LockFileReCheckDataDirReadОжидание чтения во время повторной проверки файла блокировки каталога данных.
LogicalRewriteCheckpointSyncОжидание помещения сопоставлений логической перезаписи в долговременное хранилище во время контрольной точки.
LogicalRewriteMappingSyncОжидание помещения данных сопоставлений в долговременное хранилище во время логической перезаписи.
LogicalRewriteMappingWriteОжидание записи данных сопоставлений во время логической перезаписи.
LogicalRewriteSyncОжидание помещения сопоставлений логической перезаписи в долговременное хранилище.
LogicalRewriteTruncateОжидание усечения данных сопоставлений во время логической перезаписи.
LogicalRewriteWriteОжидание записи сопоставлений логической перезаписи.
RelationMapReadОжидание чтения из файла карты отношений.
RelationMapReplaceОжидание долговременной замены файла карты отношений.
RelationMapWriteОжидание записи в файл карты отношений.
ReorderBufferReadОжидание чтения во время работы с буфером переупорядочивания.
ReorderBufferWriteОжидание записи во время работы с буфером переупорядочивания.
ReorderLogicalMappingReadОжидание чтения логического сопоставления во время работы с буфером переупорядочивания.
ReplicationSlotReadОжидание чтения из управляющего файла слота репликации.
ReplicationSlotRestoreSyncОжидание помещения управляющего файла слота репликации в долговременное хранилище при восстановлении его в памяти.
ReplicationSlotSyncОжидание помещения управляющего файла слота репликации в долговременное хранилище.
ReplicationSlotWriteОжидание записи в управляющий файл слота репликации.
SLRUFlushSyncОжидание помещения данных SLRU в долговременное хранилище во время контрольной точки или выключения базы данных.
SLRUReadОжидание чтения из страницы SLRU.
SLRUSyncОжидание помещения данных SLRU в долговременное хранилище после записи страницы.
SLRUWriteОжидание записи на страницу SLRU.
SnapbuildReadОжидание чтения сериализованного исторического снимка каталога.
SnapbuildSyncОжидание помещения сериализованного исторического снимка каталога в долговременное хранилище.
SnapbuildWriteОжидание записи сериализованного исторического снимка каталога.
TimelineHistoryFileSyncОжидание помещения файла истории временной шкалы, полученного посредством потоковой репликации, в долговременное хранилище.
TimelineHistoryFileWriteОжидание записи в файл истории временной шкалы, полученного посредством потоковой репликации.
TimelineHistoryReadОжидание чтения из файла истории временной шкалы.
TimelineHistorySyncОжидание помещения только что созданного файла истории временной шкалы в долговременное хранилище.
TimelineHistoryWriteОжидание записи в только что созданный файл истории временной шкалы.
TwophaseFileReadОжидание чтения из файла двухфазного состояния.
TwophaseFileSyncОжидание помещения файла двухфазного состояния в долговременное хранилище.
TwophaseFileWriteОжидание записи в файл двухфазного состояния.
VersionFileSyncОжидание помещения файла версии в долговременное хранилище при создании базы данных.
VersionFileWriteОжидание записи файла версии во время создания базы данных.
WALBootstrapSyncОжидание помещения WAL в долговременное хранилище во время начальной загрузки.
WALBootstrapWriteОжидание записи в WAL во время начальной загрузки.
WALCopyReadОжидание чтения при создании нового сегмента WAL путем копирования существующего.
WALCopySyncОжидание помещения нового сегмента WAL, созданного путем копирования существующего, в долговременное хранилище.
WALCopyWriteОжидание записи при создании нового сегмента WAL путем копирования существующего.
WALInitSyncОжидание помещения только что инициализированного файла WAL в долговременное хранилище.
WALInitWriteОжидание записи при инициализации нового файла WAL.
WALReadОжидание чтения из файла WAL.
WALSenderTimelineHistoryReadОжидание чтения из файла истории временной шкалы во время обработки команды временной шкалы процессом-отправителем WAL.
WALSyncОжидание помещения файла WAL в долговременное хранилище.
WALSyncMethodAssignОжидание помещения данных в долговременное хранилище при назначении нового метода синхронизации WAL.
WALWriteОжидание записи в файл WAL.

Таблица 10. События ожидания типа IPC

Событие ожидания IPCОписание
AppendReadyОжидание готовности вложенных узлов планового узла Append.
ArchiveCleanupCommandОжидание завершения archive_cleanup_command.
ArchiveCommandОжидание завершения archive_command.
BackendTerminationОжидание завершения другого обслуживающего процесса.
BackupWaitWalArchiveОжидание файлов WAL, необходимых для успешного архивирования резервной копии.
BgWorkerShutdownОжидание завершения фонового рабочего процесса.
BgWorkerStartupОжидание запуска фонового рабочего процесса.
BtreePageОжидание доступности номера страницы, необходимого для продолжения параллельного сканирования B-дерева.
BufferIOОжидание завершения буферного ввода/вывода.
CheckpointDoneОжидание завершения контрольной точки.
CheckpointStartОжидание запуска контрольной точки.
ExecuteGatherОжидание активности от дочернего процесса при выполнении планового узла Gather.
HashBatchAllocateОжидание выделения хеш-таблицы выбранным участником параллельного хеширования.
HashBatchElectОжидание при выборе участника параллельного хеширования для выделения хеш-таблицы.
HashBatchLoadОжидание завершения загрузки хеш-таблицы другими участниками параллельного хеширования.
HashBuildAllocateОжидание выделения начальной хеш-таблицы выбранным участником параллельного хеширования.
HashBuildElectОжидание при выборе участника параллельного хеширования для выделения начальной хеш-таблицы.
HashBuildHashInnerОжидание завершения хеширования внутреннего отношения другими участниками параллельного хеширования.
HashBuildHashOuterОжидание завершения хеширования внешнего отношения другими участниками параллельного хеширования.
HashGrowBatchesDecideОжидание при выборе участника параллельного хеширования для принятия решения о предстоящем увеличении числа пакетов.
HashGrowBatchesElectОжидание при выборе участника параллельного хеширования для выделения дополнительных пакетов.
HashGrowBatchesFinishОжидание принятия решения о предстоящем увеличении числа пакетов выбранным участником параллельного хеширования.
HashGrowBatchesReallocateОжидание выделения дополнительных пакетов выбранным участником параллельного хеширования.
HashGrowBatchesRepartitionОжидание завершения повторного партиционирования другими участниками параллельного хеширования.
HashGrowBucketsElectОжидание при выборе участника параллельного хеширования для выделения дополнительных блоков.
HashGrowBucketsReallocateОжидание завершения выделения дополнительных блоков выбранным участником параллельного хеширования.
HashGrowBucketsReinsertОжидание завершения добавления кортежей в новые блоки другими участниками параллельного хеширования.
LogicalApplySendDataОжидание передачи данных ведущим процессом применения изменений логической репликации параллельному процессу применения изменений.
LogicalParallelApplyStateChangeОжидание изменения состояния параллельного процесса применения изменений логической репликации.
LogicalSyncDataОжидание передачи данных для начальной синхронизации таблиц удаленным сервером логической репликации.
LogicalSyncStateChangeОжидание изменения состояния удаленного сервера логической репликации.
MessageQueueInternalОжидание присоединения другого процесса к общей очереди сообщений.
MessageQueuePutMessageОжидание при записи сообщения протокола в общую очередь сообщений.
MessageQueueReceiveОжидание при получении байтов из общей очереди сообщений.
MessageQueueSendОжидание при передаче байтов в общую очередь сообщений.
ParallelBitmapScanОжидание инициализации параллельного сканирования по битовой карте.
ParallelCreateIndexScanОжидание завершения сканирования кучи параллельными рабочими процессами CREATE INDEX.
ParallelFinishОжидание завершения вычислений параллельными рабочими процессами.
ProcArrayGroupUpdateОжидание обнуления идентификатора транзакции ведущим процессом группы в конце транзакции.
ProcSignalBarrierОжидание обработки события барьера всеми обслуживающими процессами.
PromoteОжидание повышения резервного сервера.
RecoveryConflictSnapshotОжидание разрешения конфликта восстановления для проведения очистки.
RecoveryConflictTablespaceОжидание разрешения конфликта восстановления для удаления табличного пространства.
RecoveryEndCommandОжидание завершения recovery_end_command.
RecoveryPauseОжидание возобновления восстановления.
ReplicationOriginDropОжидание перехода источника репликации в неактивное состояние, чтобы его можно было удалить.
ReplicationSlotDropОжидание перехода слота репликации в неактивное состояние, чтобы его можно было удалить.
RestoreCommandОжидание завершения restore_command.
SafeSnapshotОжидание при получении допустимого снимка для транзакции READ ONLY DEFERRABLE.
SyncRepОжидание подтверждения от удаленного сервера во время синхронной репликации.
WalReceiverExitОжидание завершения процесса-получателя WAL.
WalReceiverWaitStartОжидание передачи процессом запуска начальных данных для потоковой репликации.
XactGroupUpdateОжидание изменения статуса транзакции ведущим процессом группы в конце транзакции.

Таблица 11. События ожидания типа Lock

Событие ожидания LockОписание
advisoryОжидание при получении рекомендательной пользовательской блокировки.
applytransactionОжидание при получении блокировки для удаленной транзакции, применяемой подписчиком логической репликации.
extendОжидание при расширении отношения.
frozenidОжидание при изменении полей pg_database.datfrozenxid и pg_database.datminmxid.
objectОжидание при получении блокировки для нереляционного объекта базы данных.
pageОжидание при получении блокировки для страницы отношения.
relationОжидание при получении блокировки для отношения.
spectokenОжидание при получении блокировки спекулятивного добавления.
transactionidОжидание завершения транзакции.
tupleОжидание при получении блокировки для кортежа.
userlockОжидание при получении пользовательской блокировки.
virtualxidОжидание при получении блокировки виртуального идентификатора транзакции; см. раздел Транзакции и идентификаторы.

Таблица 12. События ожидания типа LWLock

Событие ожидания LWLockОписание
AddinShmemInitОжидание при обработке выделения области в разделяемой памяти для расширений.
AutoFileОжидание при изменении файла qhb.auto.conf.
AutovacuumОжидание при чтении или изменении текущего состояния рабочих процессов автовакуума.
AutovacuumScheduleОжидание при подтверждении, что таблице, выбранной для автоочистки, все еще необходима очистка.
BackgroundWorkerОжидание при чтении или изменении состояния фонового рабочего процесса.
BtreeVacuumОжидание при чтении или изменении информации, связанной с очисткой, для индекса B-дерева.
BufferContentОжидание при обращении к странице данных в памяти.
BufferMappingОжидание при связывании блока данных с буфером в пуле буферов.
CheckpointerCommОжидание при обработке запросов fsync.
CommitTsОжидание при чтении или записи последнего значения, установленного для времени фиксирования транзакции.
CommitTsBufferОжидание ввода/вывода с SLRU-буфером данных о времени фиксирования.
CommitTsSLRUОжидание при обращении к SLRU-кешу данных о времени фиксирования.
ControlFileОжидание при чтении или изменении файла pg_control или создании нового файла WAL.
DynamicSharedMemoryControlОжидание при чтении или изменении информации о выделении динамической разделяемой памяти.
LockFastPathОжидание при чтении или изменении информации процесса о блокировке по быстрому пути.
LockManagerОжидание при чтении или изменении информации о «тяжелых» блокировках.
LogicalRepLauncherDSAОжидание при обращении к процессу выделения области динамической разделяемой памяти процесса запуска логической репликации.
LogicalRepLauncherHashОжидание при обращении к разделяемой хеш-таблице процесса запуска логической репликации.
LogicalRepWorkerОжидание при чтении или изменении состояния рабочих процессов логической репликации.
MultiXactGenОжидание при чтении или изменении общего состояния мультитранзакций.
MultiXactMemberBufferОжидание ввода/вывода с SLRU-буфером данных о членах мультитранзакций.
MultiXactMemberSLRUОжидание при обращении к SLRU-кешу данных о членах мультитранзакций.
MultiXactOffsetBufferОжидание ввода/вывода с SLRU-буфером данных о смещениях мультитранзакций.
MultiXactOffsetSLRUОжидание при обращении к SLRU-кешу данных о смещениях мультитранзакций.
MultiXactTruncationОжидание при чтении или усечении информации мультитранзакции.
NotifyBufferОжидание ввода/вывода с SLRU-буфером сообщений NOTIFY.
NotifyQueueОжидание при чтении или изменении сообщений NOTIFY.
NotifyQueueTailОжидание изменения границы хранилища сообщений NOTIFY.
NotifySLRUОжидание при обращении к SLRU-кешу сообщений NOTIFY.
OidGenОжидание при выделении нового OID.
OldSnapshotTimeMapОжидание при чтении или изменении информации по управлению старым снимком.
ParallelAppendОжидание при выборе следующего подплана во время выполнения плана параллельного добавления (Parallel Append).
ParallelHashJoinОжидание при синхронизации рабочих процессов во время выполнения плана параллельного соединения по хешу (Parallel Hash Join).
ParallelQueryDSAОжидание выделения динамической разделяемой памяти для параллельного запроса.
PerSessionDSAОжидание выделения динамической разделяемой памяти для параллельного запроса.
PerSessionRecordTypeОжидание при обращении к информации параллельного запроса о составных типах.
PerSessionRecordTypmodОжидание при обращении к информации параллельного запроса о модификаторах типа, определяющих типы анонимных записей.
PerXactPredicateListОжидание при обращении к списку предикатных блокировок, удерживаемых текущей сериализуемой транзакцией, во время параллельного запроса.
PgStatsDataОжидание обращения к данным статистики в разделяемой памяти.
PgStatsDSAОжидание обращения к процессу выделения области динамической разделяемой памяти для статистики.
PgStatsHashОжидание обращения к хеш-таблице в разделяемой памяти.
PredicateLockManagerОжидание при обращении к информации о предикатных блокировках, используемых сериализуемыми транзакциями.
ProcArrayОжидание при обращении к общим структурам данных в рамках процесса (обычно при получении снимка или отображении идентификатора транзакции в сеансе).
RelationMappingОжидание при чтении или изменении файла pg_filenode.map (используемого для отслеживания назначений файловых узлов определенных системных каталогов).
RelCacheInitОжидание при чтении или изменении файла инициализации кеша отношения (pg_internal.init).
ReplicationOriginОжидание при создании, удалении или использовании источника репликации.
ReplicationOriginStateОжидание при чтении или изменении состояния одного источника репликации.
ReplicationSlotAllocationОжидание при выделении или освобождении слота репликации.
ReplicationSlotControlОжидание при чтении или изменении состояния слота репликации.
ReplicationSlotIOОжидание ввода/вывода со слотом репликации.
SerialBufferОжидание ввода/вывода с SLRU-буфером данных о конфликтах сериализуемых транзакций.
SerializableFinishedListОжидание при обращении к списку завершенных сериализуемых транзакций.
SerializablePredicateListОжидание при обращении к списку предикатных блокировок, удерживаемых сериализуемыми транзакциями.
SerializableXactHashОжидание при чтении или изменении информации о сериализуемых транзакциях.
SerialSLRUОжидание при обращении к SLRU-кешу данных о конфликтах сериализуемых транзакций.
SharedTidBitmapОжидание при обращении к разделяемой битовой карте TID во время параллельного сканирования индекса по битовой карте.
SharedTupleStoreОжидание при обращении к разделяемому хранилищу кортежей во время параллельного запроса.
ShmemIndexОжидание при поиске или выделении области в разделяемой памяти.
SInvalReadОжидание при получении сообщений из общей очереди сообщений аннулирования каталогов.
SInvalWriteОжидание при добавлении сообщения в общую очередь сообщений аннулирования каталогов.
SubtransBufferОжидание ввода-вывода с SLRU-буфером данных о субтранзакциях.
SubtransSLRUОжидание при обращении к к SLRU-кешу данных о субтранзакциях.
SyncRepОжидание при чтении или записи информации о состоянии синхронной репликации.
SyncScanОжидание при выборе начального положения для синхронизированного сканирования таблицы.
TablespaceCreateОжидание при создании или удалении табличного пространства.
TwoPhaseStateОжидание при чтении или записи состояния подготовленных транзакций.
WALBufMappingОжидание при замене страницы в буферах WAL.
WALInsertОжидание при добавлении данных WAL в буфер памяти.
WALWriteОжидание записи буферов WAL на диск.
WrapLimitsVacuumОжидание при изменении пределов потребления идентификаторов транзакций и мультитранзакций.
XactBufferОжидание ввода/вывода с SLRU-буфером данных о статусе транзакций.
XactSLRUОжидание при обращении к SLRU-кешу данных о статусе транзакций.
XactTruncationОжидание при выполнении pg_xact_status или изменении самого старого доступного ей идентификатора транзакции.
XidGenОжидание при выделении нового идентификатора транзакции.

Примечание
Расширения могут добавлять типы LWLock в список, приведенный в Таблице 12. В некоторых случаях имя, назначенное расширением, станет невидимым во всех серверных процессах; поэтому событие ожидания LWLock может отображаться с именем «extension», а не тем, что было назначено расширением.

Таблица 13. События ожидания типа Timeout

Событие ожидания TimeoutОписание
BaseBackupThrottleОжидание во время базового резервного копирования, когда ограничена активность.
CheckpointWriteDelayОжидание между операциями записи при выполнении контрольной точки.
PgSleepОжидание в результате вызова pg_sleep или родственной ей функции.
RecoveryApplyDelayОжидание при применении WAL во время восстановления вследствие установленной задержки.
RecoveryRetrieveRetryIntervalОжидание во время восстановления, когда данные WAL нельзя получить ни из какого источника (каталога pg_wal, архива или потока).
RegisterSyncRequestОжидание при передаче запросов синхронизации процессу контрольной точки вследствие переполнения очереди запросов.
SpinDelayОжидание при получении конкурирующей спин-блокировки.
VacuumDelayОжидание в точке задержки очистки по стоимости.
VacuumTruncateОжидание при получении эксклюзивной блокировки для усечения пустых страниц в конце очищаемой таблицы.

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

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)


pg_stat_replication

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

Таблица 14. Представление pg_stat_replication

Столбец ТипОписание
pid integerPID процесса-отправителя WAL
usesysid oidOID пользователя, подсоединившегося к этому процессу-отправителю WAL
usename nameИмя пользователя, подсоединившегося к этому процессу-отправителю WAL
application_name textИмя приложения, подключенного к этому отправителю WAL
client_addr inetIP-адрес клиента, подключенного к этому отправителю WAL. Если данное поле равно NULL, это показывает, что клиент подключен через сокет домена Unix на компьютере сервера.
client_hostname textИмя хоста подключенного клиента, получаемое обратным поиском в DNS по client_addr. Это поле будет отлично от NULL только для 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 до получения уведомления о том, что этот резервный сервер их записал, сбросил на диск и применил. Это можно использовать для оценки задержки при фиксации, вызываемой установкой в параметре synchronous_commit уровня remote_apply, если этот сервер был сконфигурирован как синхронный резервный.
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 в воспроизведшей все изменения простаивающей системе. Системы мониторинга должны выбрать, следует ли представлять это как отсутствующие данные или ноль или продолжать отображать последнее известное значение.



pg_stat_replication_slots

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

Таблица 15. Представление pg_stat_replication_slots

Столбец ТипОписание
slot_name textУникальный на уровне кластера идентификатор для слота репликации
spill_txns bigintКоличество транзакций, вытесненных на диск после того, как объем памяти, используемый при логическом декодировании изменений из WAL, превысил logical_decoding_work_mem. Этот счетчик прирастает с учетом как транзакций верхнего уровня, так и субтранзакций.
spill_count bigintСколько раз транзакции были вытеснены на диск при декодировании изменений из WAL для этого слота. Этот счетчик прирастает каждый раз, когда транзакция вытесняется, и одна и та же транзакция может вытесняться несколько раз.
spill_bytes bigintОбъем декодированных транзакционных данных, вытесненных на диск при проведении декодирования изменений из WAL для этого слота. Этот и другие счетчики вытеснения можно использовать для оценки ввода/вывода, происходящего во время логического декодирования и настройки параметра logical_decoding_work_mem.
stream_txns bigintКоличество текущих транзакций, передаваемых в потоке в плагин вывода декодирования после того, как объем памяти, используемый для логического декодирования изменений из WAL для этого слота, превысил logical_decoding_work_mem. Потоковая передача работает только для транзакций верхнего уровня (субтранзакции не могут передаваться в потоке независимо), поэтому счетчик прирастает без учета субтранзакций.
stream_count bigintСколько раз текущие транзакции передавались в потоке плагину вывода декодирования при декодировании изменений из WAL для этого слота. Этот счетчик прирастает каждый раз, когда транзакция передается в потоке, и одна и та же транзакция может передаваться в потоке несколько раз.
stream_bytes bigintОбъем транзакционных данных, декодированных для передачи текущих транзакций в потоке в плагин вывода декодирования при декодировании изменений из WAL для этого слота. Этот и другие счетчики потоковой передачи для этого слота можно использовать для настройки параметра logical_decoding_work_mem.
total_txns bigintКоличество декодированных транзакций, отправленных в плагин вывода декодирования для этого слота. Считаются только транзакции верхнего уровня, но не субтранзакции. Обратите внимание, что сюда входят передаваемые в потоке и/или вытесняемые транзакции.
total_bytes bigintОбъем транзакционных данных, декодированных для отправки транзакций в плагин вывода декодирования при декодировании изменений из WAL для этого слота. Обратите внимание, что сюда входят передаваемые в потоке и/или вытесняемые данные.
stats_reset timestamp with time zoneВремя последнего сброса этих статистических данных


pg_stat_wal_receiver

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

Таблица 16. Представление pg_stat_wal_receiver

Столбец ТипОписание
pid integerPID процесса-получателя 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Хост экземпляра QHB, к которому подключен этот получатель WAL. Это может быть имя хоста, IP-адрес или путь каталога (если подключение установлено через сокет домена Unix). (Вариант с путем можно распознать, поскольку это всегда будет абсолютный путь, начинающийся с /.)
sender_port integerНомер порта экземпляра QHB, к которому подключен этот получатель WAL.
conninfo textСтрока подключения, используемая этим получателем WAL, со скрытыми полями повышенной секретности.


pg_stat_recovery_prefetch

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

Таблица 17. Представление pg_stat_recovery_prefetch

Столбец ТипОписание
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Количество операций предварительной выборки, которые были инициированы, но еще не считаются завершенными


pg_stat_subscription

Таблица 18. Представление pg_stat_subscription

Столбец ТипОписание
subid oidOID подписки
subname nameИмя подписки
pid integerPID рабочего процесса этой подписки
leader_pid integerPID ведущего рабочего процесса применения изменений, если этот процесс является параллельным рабочим процессом применения; NULL, если этот процесс является ведущим процессом применения изменений или рабочим процессом синхронизации
relid oidOID отношения, которое синхронизирует этот рабочий процесс; 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Время последней позиции в журнале упреждающей записи, сообщенной исходному отправителю WAL; NULL для параллельных рабочих процессов применения


pg_stat_subscription_stats

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

Таблица 19. Представление pg_stat_subscription_stats

Столбец ТипОписание
subid oidOID подписки
subname nameИмя подписки
apply_error_count bigintСколько раз происходили ошибки при применении изменений
sync_error_count bigintСколько раз происходили ошибки во время начальной синхронизации таблиц
stats_reset timestamp with time zoneВремя последнего сброса этих статистических данных


pg_stat_ssl

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

Таблица 20. Представление pg_stat_ssl

Столбец ТипОписание
pid integerPID обслуживающего процесса или процесса-отправителя WAL
ssl booleantrue, если для этого подключения используется SSL
version textВерсия используемого SSL или NULL, если для этого подключения не используется SSL
cipher textИмя используемого шифра SSL или NULL, если для этого подключения не используется SSL
bits integerКоличество битов в используемом алгоритме шифрования или NULL, если для этого подключения не используется SSL
client_dn textПоле DN (Distinguished Name, уникальное имя) из используемого клиентского сертификата или NULL, если клиентский сертификат не предоставлен или если для этого подключения не используется SSL. Это поле усекается, если поле DN длиннее NAMEDATALEN (64 символа в стандартной сборке).
client_serial numericСерийный номер клиентского сертификата или NULL, если клиентский сертификат не предоставлен или если для этого подключения не используется SSL. Сочетание серийного номера сертификата и имени центра сертификации однозначно идентифицирует сертификат (если только центр сертификации по ошибке не использует серийные номера повторно).
issuer_dn textDN центра сертификации, выдавшего клиентский сертификат, или NULL, если клиентский сертификат не предоставлен или если для этого подключения не используется SSL. Это поле усекается аналогично полю client_dn.


pg_stat_gssapi

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

Таблица 21. Представление pg_stat_gssapi

Столбец ТипОписание
pid integerPID обслуживающего процесса
gss_authenticated booleantrue, если для этого подключения используется аутентификация GSSAPI
principal textАдминистратор доступа, используемый для аутентификации этого подключения, или NULL, если для аутентификации этого подключения не использовалось GSSAPI. Это поле усекается, если имя администратора доступа длиннее NAMEDATALEN (64 символа в стандартной сборке).
encrypted booleantrue, если для этого подключения используется шифрование GSSAPI
credentials_delegated booleantrue, если для этого подключения были делегированы учетные данные GSSAPI.


pg_stat_archiver

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

Таблица 22. Представление pg_stat_archiver

Столбец ТипОписание
archived_count bigintКоличество файлов WAL, которые уже были успешно заархивированы
last_archived_wal textИмя последнего успешно заархивированного файла WAL
last_archived_time timestamp with time zoneВремя последней успешной операции архивирования
failed_count bigintЧисло неудачных попыток архивирования файлов WAL
last_failed_wal textИмя файла WAL последней неудачной операции архивирования
last_failed_time timestamp with time zoneВремя последней неудачной операции архивирования
stats_reset timestamp with time zoneВремя последнего сброса этих статистических данных

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



pg_stat_io

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

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

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

Столбец ТипОписание
backend_type textТип обслуживающего процесса (например, фоновый рабочий процесс, рабочий процесс автовакуума). Более подробную информацию о backend_type см. в описании pg_stat_activity. По некоторым типам обслуживающих процессов статистика операций ввода/вывода не накапливается и не будет включаться в это представление.
object textЦелевой объект операции ввода/вывода. Возможные значения:
- relation: Постоянные отношения.
- temp relation: Временные отношения.
context textКонтекст операции ввода/вывода. Возможные значения:
- normal: Используемый по умолчанию или стандартный контекст для этого типа операции ввода/вывода. Например, по умолчанию данные отношения считываются и записываются из разделяемых буферов. Таким образом, чтение и запись данных отношения через разделяемые буферы будут отслеживаться в контексте normal.
- vacuum: Операции ввода/вывода, выполняемые вне разделяемых буферов при очистке и анализе постоянных отношений. Очистка временных таблиц использует тот же пул локальных буферов, что и остальные операции ввода/вывода с временными таблицами, и отслеживаются в контексте normal.
- bulkread: Некоторые большие операции ввода/вывода, выполняющие чтение вне разделяемых буферов, например последовательное сканирование большой таблицы.
- bulkwrite: Некоторые большие операции ввода/вывода, выполняющие запись вне разделяемых буферов, например COPY.
reads bigintКоличество операций чтения, размер каждой указан в op_bytes.
read_time double precisionВремя, затраченное операциями чтения, в миллисекундах (если включен параметр track_io_timing, иначе ноль).
writes bigintКоличество операций записи, размер каждой указан в op_bytes.
write_time double precisionВремя, затраченное операциями записи, в миллисекундах (если включен параметр track_io_timing, иначе ноль).
writebacks bigintКоличество единиц размером op_bytes, запрошенных процессом для записи ядром в постоянное хранилище.
writeback_time double precisionВремя, затраченное на операции обратной записи, в миллисекундах (если включен параметр track_io_timing, иначе ноль). Сюда входит время, потраченное на постановку в очередь запросов на запись, и, потенциально, время, потраченное на запись грязных данных.
extends bigintКоличество операций расширения отношений, размер каждой указан в op_bytes.
extend_time double precisionВремя затраченное операциями расширения, в миллисекундах (если включен параметр track_io_timing, иначе ноль).
op_bytes bigintКоличество байтов на прочитанную, записанную или расширенную единицу ввода/вывода.
Чтение, запись и расширение данных отношений выполняются в единицах block_size, выведенных из встроенного параметра BLCKSZ, по умолчанию равного 8192.
hits bigintСколько раз желаемый блок был найден в разделяемом буфере.
evictions bigintСколько раз блок был записан из разделяемого или локального буфера, чтобы стать доступным для повторного использования.
В контексте normal здесь подсчитывается, сколько раз блок был вытеснен из буфера и заменен другим блоком. В контекстах bulkwrite, bulkread и vacuum здесь подсчитывается, сколько раз блок был вытеснен из разделяемых буферов, чтобы добавить этот разделяемый буфер в отдельный кольцевой буфер с ограниченным размером для использования в массовой операции ввода/вывода.
reuses bigintСколько раз существующий буфер в кольцевом буфере с ограниченным размером вне разделяемых буферов был повторно использован как часть операции ввода/вывода в контекстах bulkread, bulkwrite или vacuum.
fsyncs bigintКоличество вызовов fsync. Они отслеживаются только в контексте normal.
fsync_time double precisionВремя, затраченное операциями fsync, в миллисекундах (если включен параметр track_io_timing, иначе ноль).
stats_reset timestamp with time zoneВремя последнего сброса этой статистики.

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

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

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

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

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

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

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



pg_stat_bgwriter

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

Таблица 24. Представление pg_stat_bgwriter

Столбец ТипОписание
checkpoints_timed bigintКоличество запланированных контрольных точек, которые уже были выполнены
checkpoints_req bigintКоличество запрошенных контрольных точек, которые уже были выполнены
checkpoint_write_time double precisionОбщее время, которое было затрачено на том этапе обработки контрольной точки, где файлы записываются на диск, в миллисекундах
checkpoint_sync_time double precisionОбщее время, которое было затрачено на том этапе обработки контрольной точки, где файлы синхронизируются с диском, в миллисекундах
buffers_checkpoint bigintКоличество буферов, записанных во время контрольных точек
buffers_clean bigintКоличество буферов, записанных фоновым процессом записи
maxwritten_clean bigintСколько раз фоновый процесс записи останавливал очищающее сканирование из-за того, что записал слишком много буферов
buffers_backend bigintКоличество буферов, записанных непосредственно обслуживающим процессом
buffers_backend_fsync bigintСколько раз обслуживающему процессу пришлось выполнить вызов fsync самостоятельно (обычно эти вызовы обрабатывает фоновый процесс записи, даже когда обслуживающий процесс выполняет запись самостоятельно)
buffers_alloc bigintКоличество выделенных буферов
stats_reset timestamp with time zoneВремя последнего сброса этих статистических данных


pg_stat_wal

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

Таблица 25. Представление pg_stat_wal

Столбец ТипОписание
wal_records bigintОбщее количество сгенерированных записей WAL
wal_fpi bigintОбщее количество сгенерированных образов полных страниц в WAL
wal_bytes numericОбщий сгенерированный объем WAL в байтах
wal_buffers_full bigintСколько раз данные WAL записывались на диск из-за переполнения буферов WAL
wal_write bigintСколько раз буферы WAL записывались на диск по запросу функции XLogWrite. Подробную информацию о внутренней функции WAL XLogWrite см. в разделе Конфигурация WAL.
wal_sync bigintСколько раз файлы WAL синхронизировались с диском по запросу функции issue_xlog_fsync (если параметр fsync равен on (включен), а параметр wal_sync_method равен fdatasync, fsync или fsync_writethrough, иначе будет выводиться ноль). Подробную информацию о внутренней функции WAL issue_xlog_fsync см. в разделе Конфигурация WAL.
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_methodfdatasync, fsync или fsync_writethrough, иначе будет выводиться ноль).
stats_reset timestamp with time zoneВремя последнего сброса этих статистических данных


pg_stat_database

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

Таблица 26. Представление pg_stat_database

Столбец ТипОписание
datid oidOID этой базы данных или 0, если объекты принадлежат разделяемому отношению
datname nameИмя этой базы данных или NULL для разделяемых объектов
numbackends integerКоличество обслуживающих процессов, в настоящее время подключенных к этой базе данных, или NULL для разделяемых объектов. Это единственный столбец в данном представлении, который возвращает значение, отражающее текущее состояние; все остальные столбцы возвращают накопленные значения с момента последнего сброса статистических данных.
xact_commit bigintКоличество зафиксированных транзакций в этой базе данных
xact_rollback bigintКоличество откатившихся транзакций в этой базе данных
blks_read bigintКоличество прочитанных дисковых блоков в этой базе данных
blks_hit bigintСколько раз дисковые блоки были обнаружены уже в буферном кеше, благодаря чему в чтении не было необходимости (сюда включаются только случаи обнаружения в буферном кеше QHB, а не в кеше файловой системы операционной системы)
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Время последнего сброса этих статистических данных


pg_stat_database_conflicts

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

Таблица 27. Представление pg_stat_database_conflicts

Столбец ТипОписание
datid oidOID базы данных
datname nameИмя этой базы данных
confl_tablespace bigintКоличество запросов в этой базе данных, отмененных из-за удаленного табличного пространства
confl_lock bigintКоличество запросов в этой базе данных, отмененных из-за тайм-аутов блокировок
confl_snapshot bigintКоличество запросов в этой базе данных, отмененных из-за устаревших снимков состояния
confl_bufferpin bigintКоличество запросов в этой базе данных, отмененных из-за закрепленных буферов
confl_deadlock bigintКоличество запросов в этой базе данных, отмененных из-за взаимоблокировок
confl_active_logicalslot bigintКоличество использований логических слотов в этой базе данных, отмененных из-за устаревших снимков или слишком низкого значения wal_level на основном сервере


pg_stat_all_tables

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

Таблица 28. Представление pg_stat_all_tables

Столбец ТипОписание
relid oidOID таблицы
schemaname nameИмя схемы, в которой находится эта таблица
relname nameИмя этой таблицы
seq_scan bigintКоличество последовательных сканирований, инициированных для этой таблицы
last_seq_scan timestamp with time zoneВремя последнего последовательного сканирования этой таблицы, исходя из времени последней остановки транзакции
seq_tup_read bigintКоличество активных строк, извлеченных при последовательных сканированиях
idx_scan bigintКоличество сканирований по индексу, инициированных для этой таблицы
last_idx_scan 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Время последнего анализа этой таблицы фоновым процессом «Автовакуум»
vacuum_count bigintСколько раз эта таблица очищалась вручную (не учитывая VACUUM FULL)
autovacuum_count bigintСколько раз эта таблица очищалась фоновым процессом «Автовакуум»
analyze_count bigintСколько раз эта таблица анализировалась вручную
autoanalyze_count bigintСколько раз эта таблица анализировалась фоновым процессом «Автовакуум»


pg_stat_all_indexes

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

Таблица 29. Представление pg_stat_all_indexes

Столбец ТипОписание
relid oidOID таблицы для этого индекса
indexrelid oidOID этого индекса
schemaname nameИмя схемы, в которой находится этот индекс
relname nameИмя таблицы для этого индекса
indexrelname nameИмя этого индекса
idx_scan bigintКоличество сканирований, инициированных по этому индексу
last_idx_scan timestamp with time zoneВремя последнего сканирования по этому индексу, исходя из времени последней остановки транзакции
idx_tup_read bigintКоличество записей индекса, возвращенных при сканировании по этому индексу
idx_tup_fetch bigintКоличество активных строк таблицы, извлеченных при простых сканированиях по этому индексу

Индексы могут использоваться при простых сканированиях по индексу, сканированиях «битовой карты» индекса и в работе оптимизатора. При сканировании битовых карт выходные данные нескольких индексов можно комбинировать с помощью правил И или ИЛИ, поэтому при использовании битовых карт сложно связать выборки отдельных строк кучи с конкретными индексами. Поэтому при сканировании битовых карт увеличиваются счетчики 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 подсчитывает количество активных строк, извлеченных из таблицы. Последнее значение будет меньше, если какие-либо нерабочие или еще не зафиксированные строки извлекаются с использованием индекса или если какие-либо выборки из кучи не производятся посредством сканирования только по индексу.



pg_statio_all_tables

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

Таблица 30. Представление pg_statio_all_tables

Столбец ТипОписание
relid oidOID таблицы
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 (если таковая имеется) для этой таблицы


pg_statio_all_indexes

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

Таблица 31. Представление pg_statio_all_indexes

Столбец ТипОписание
relid oidOID таблицы для этого индекса
indexrelid oidOID этого индекса
schemaname nameИмя схемы, в которой находится этот индекс
relname nameИмя таблицы для этого индекса
indexrelname nameИмя этого индекса
idx_blks_read bigintКоличество дисковых блоков, прочитанных из этого индекса
idx_blks_hit bigintКоличество попаданий в буфер в этом индексе


pg_statio_all_sequences

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

Таблица 32. Представление pg_statio_all_sequences

Столбец ТипОписание
relid oidOID последовательности
schemaname nameИмя схемы, в которой эта последовательность
relname nameИмя этой последовательности
blks_read bigintКоличество дисковых блоков, прочитанных из этой последовательности
blks_hit bigintКоличество попаданий в буфер в этой последовательности


pg_stat_user_functions

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

Таблица 33. Представление pg_stat_user_functions

Столбец ТипОписание
funcid oidOID функции
schemaname nameИмя схемы, в которой находится эта функция
funcname nameИмя этой функции
calls bigintСколько раз вызывалась эта функция
total_time double precisionОбщее время, затраченное на выполнение этой функции и всех других функций, вызванных ею, в миллисекундах
self_time double precisionОбщее время, затраченное на выполнение самой этой функции, без учета других функций, вызванных ею, в миллисекундах


pg_stat_slru

QHB обращается к некоторой информации на диске посредством кешей с алгоритмом SLRU (simple least-recently-used, простое вытеснение по давности использования). Представление pg_stat_slru будет содержать для каждого отслеживаемого кеша SLRU по одной строке, отображающей статистику по обращениям к кешированным страницам.

Таблица 34. Представление pg_stat_slru

Столбец ТипОписание
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Время последнего сброса этих статистических данных


Функции статистики

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


Дополнительные статистические функции

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

pg_backend_pid () → integer

Возвращает PID серверного процесса, закрепленного за текущим сеансом.

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 ( text ) → void

Обнуляет некоторые статистические счетчики на уровне кластера, в зависимости от аргумента. Значением аргумента может быть bgwriter для обнуления всех счетчиков, отображаемых в представлении pg_stat_bgwriter, archiver для обнуления всех счетчиков, отображаемых в представлении pg_stat_archiver, io для обнуления всех счетчиков, отображаемых в представлении pg_stat_io, wal для обнуления всех счетчиков, отображаемых в представлении pg_stat_wal, или recovery_prefetch для обнуления всех счетчиков, отображаемых в представлении pg_stat_recovery_prefetch.

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

pg_stat_reset_single_table_counters ( oid ) → void

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

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

pg_stat_reset_single_function_counters ( oid ) → void

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

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

pg_stat_reset_slru ( text ) → void

Обнуляет статистику для отдельного кеша SLRU или для всех кешей SLRU в кластере. Если аргумент имеет значение NULL, сбрасываются все счетчики, отображаемые в представлении pg_stat_slru, для всех кешей SLRU. Аргументом также может быть CommitTs, MultiXactMember, MultiXactOffset, Notify, Serial, Subtrans или Xact для сброса счетчиков только для соответствующей записи. При значении 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_activity функция pg_stat_get_activity возвращает набор записей, содержащих всю доступную информацию о каждом обслуживающем процессе. Иногда бывает удобнее получить только часть этой информации. В таких случаях можно воспользоваться другим набором функций доступа к статистике на уровне обслуживающих процессов; они перечислены в подразделе ниже. Эти функции доступа используют идентификатор обслуживающего процесса, значение которого является малым положительным целым числом, отличным от идентификатора обслуживающего процесса любого параллельного сеанса, хотя идентификатор сеанса может повторно использоваться сразу по завершении сеанса. Идентификатор обслуживающего процесса используется, помимо прочего, для определения временной схемы сеанса, если таковая имеется. Функция 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;

Статистические функции на уровне обслуживающих процессов

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 базы данных, к которой подключен этот обслуживающий процесс.

pg_stat_get_backend_idset () → setof integer

Возвращает набор идентификаторов активных на данный момент обслуживающих процессов (в диапазоне от 1 до количества активных обслуживающих процессов).

pg_stat_get_backend_pid ( integer ) → integer

Возвращает PID этого обслуживающего процесса.

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 в противном случае. См. с Таблицы 5 по Таблицу 13.

pg_stat_get_backend_wait_event_type ( integer ) → text

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

pg_stat_get_backend_xact_start ( integer ) → timestamp with time zone

Возвращает время начала текущей транзакции этого обслуживающего процесса.