Система накопительной статистики
Система накопительной статистики 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 oid | OID базы данных, к которой подключен этот обслуживающий процесс |
| datname name | Имя базы данных, к которой подключен этот обслуживающий процесс |
| pid integer | PID этого обслуживающего процесса |
| leader_pid integer | PID ведущего процесса параллельной группы, если этот процесс является рабочим процессом параллельного запроса, или PID ведущего процесса применения изменений, если этот процесс является рабочим процессом параллельного применения. NULL, если этот процесс является ведущим процессом параллельной группы или ведущим процессом применения изменений либо не участвует ни в какой параллельной операции. |
| usesysid oid | OID пользователя, подсоединившегося к этому обслуживающему процессу |
| usename name | Имя пользователя, подсоединившегося к этому обслуживающему процессу |
| application_name text | Имя приложения, подключенного к этому обслуживающему процессу |
| client_addr inet | IP-адрес клиента, подключенного к этому обслуживающему процессу. Если данное поле равно 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 integer | PID процесса-отправителя WAL |
| usesysid oid | OID пользователя, подсоединившегося к этому процессу-отправителю WAL |
| usename name | Имя пользователя, подсоединившегося к этому процессу-отправителю WAL |
| application_name text | Имя приложения, подключенного к этому отправителю WAL |
| client_addr inet | IP-адрес клиента, подключенного к этому отправителю WAL. Если данное поле равно NULL, это показывает, что клиент подключен через сокет домена Unix на компьютере сервера. |
| client_hostname text | Имя хоста подключенного клиента, получаемое обратным поиском в DNS по client_addr. Это поле будет отлично от 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 integer | PID процесса-получателя 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 oid | OID подписки |
| subname name | Имя подписки |
| pid integer | PID рабочего процесса этой подписки |
| leader_pid integer | PID ведущего рабочего процесса применения изменений, если этот процесс является параллельным рабочим процессом применения; NULL, если этот процесс является ведущим процессом применения изменений или рабочим процессом синхронизации |
| relid oid | OID отношения, которое синхронизирует этот рабочий процесс; NULL для ведущего процесса применения изменений и параллельных рабочих процессов применения |
| received_lsn pg_lsn | Последняя полученная позиция в журнале упреждающей записи, начальным значением этого поля будет 0; NULL для параллельных рабочих процессов применения |
| last_msg_send_time timestamp with time zone | Время передачи последнего сообщения, полученного от исходного отправителя WAL; NULL для параллельных рабочих процессов применения |
| last_msg_receipt_time timestamp with time zone | Время приема последнего сообщения, полученного от исходного отправителя WAL; NULL для параллельных рабочих процессов применения |
| latest_end_lsn pg_lsn | Последняя позиция в журнале упреждающей записи, сообщенная исходному отправителю WAL; NULL для параллельных рабочих процессов применения |
| latest_end_time timestamp with time zone | Время последней позиции в журнале упреждающей записи, сообщенной исходному отправителю WAL; NULL для параллельных рабочих процессов применения |
pg_stat_subscription_stats
Представление pg_stat_subscription_stats будет содержать по одной строке для каждой подписки.
Таблица 19. Представление pg_stat_subscription_stats
| Столбец Тип | Описание |
|---|---|
| subid oid | OID подписки |
| 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 integer | PID обслуживающего процесса или процесса-отправителя WAL |
| ssl boolean | true, если для этого подключения используется 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 text | DN центра сертификации, выдавшего клиентский сертификат, или NULL, если клиентский сертификат не предоставлен или если для этого подключения не используется SSL. Это поле усекается аналогично полю client_dn. |
pg_stat_gssapi
Представление pg_stat_gssapi будет для каждого обслуживающего процесса содержать по одной строке, отображающей информацию об использовании GSSAPI для этого подключения. Его можно объединить с pg_stat_activity или pg_stat_replication по столбцу pid, чтобы получить более подробную информацию о подключении.
Таблица 21. Представление pg_stat_gssapi
| Столбец Тип | Описание |
|---|---|
| pid integer | PID обслуживающего процесса |
| gss_authenticated boolean | true, если для этого подключения используется аутентификация GSSAPI |
| principal text | Администратор доступа, используемый для аутентификации этого подключения, или NULL, если для аутентификации этого подключения не использовалось GSSAPI. Это поле усекается, если имя администратора доступа длиннее NAMEDATALEN (64 символа в стандартной сборке). |
| encrypted boolean | true, если для этого подключения используется шифрование GSSAPI |
| credentials_delegated boolean | true, если для этого подключения были делегированы учетные данные 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_method — fdatasync, fsync или fsync_writethrough, иначе будет выводиться ноль). |
| stats_reset timestamp with time zone | Время последнего сброса этих статистических данных |
pg_stat_database
Представление pg_stat_database будет содержать для каждой базы данных в кластере по одной строке, отображающей общую статистику на уровне базы данных, плюс еще одну строку для общих объектов.
Таблица 26. Представление pg_stat_database
| Столбец Тип | Описание |
|---|---|
| datid oid | OID этой базы данных или 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 oid | OID базы данных |
| datname name | Имя этой базы данных |
| confl_tablespace bigint | Количество запросов в этой базе данных, отмененных из-за удаленного табличного пространства |
| confl_lock bigint | Количество запросов в этой базе данных, отмененных из-за тайм-аутов блокировок |
| confl_snapshot bigint | Количество запросов в этой базе данных, отмененных из-за устаревших снимков состояния |
| confl_bufferpin bigint | Количество запросов в этой базе данных, отмененных из-за закрепленных буферов |
| confl_deadlock bigint | Количество запросов в этой базе данных, отмененных из-за взаимоблокировок |
| confl_active_logicalslot bigint | Количество использований логических слотов в этой базе данных, отмененных из-за устаревших снимков или слишком низкого значения wal_level на основном сервере |
pg_stat_all_tables
Представление pg_stat_all_tables будет содержать для каждой таблицы в текущей базе данных (включая таблицы TOAST) по одной строке, отображающей статистику по обращениям к этой конкретной таблице. Представления pg_stat_user_tables и pg_stat_sys_tables содержат ту же информацию, но отфильтрованную так, чтобы отображать только пользовательские и системные таблицы соответственно.
Таблица 28. Представление pg_stat_all_tables
| Столбец Тип | Описание |
|---|---|
| relid oid | OID таблицы |
| 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 oid | OID таблицы для этого индекса |
| indexrelid oid | OID этого индекса |
| 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 oid | OID таблицы |
| schemaname name | Имя схемы, в которой находится эта таблица |
| relname name | Имя этой таблицы |
| heap_blks_read bigint | Количество дисковых блоков, прочитанных из этой таблицы |
| heap_blks_hit bigint | Количество попаданий в буфер в этой таблице |
| idx_blks_read bigint | Количество дисковых блоков, прочитанных из всех индексов этой таблицы |
| idx_blks_hit bigint | Количество попаданий в буфер во всех индексах этой таблицы |
| toast_blks_read bigint | Количество дисковых блоков, прочитанных из таблицы TOAST (если таковая имеется) для этой таблицы |
| toast_blks_hit bigint | Количество попаданий в буфер в таблице TOAST (если таковая имеется) для этой таблицы |
| tidx_blks_read bigint | Количество дисковых блоков, прочитанных из индексов таблицы TOAST (если таковая имеется) для этой таблицы |
| tidx_blks_hit bigint | Количество попаданий в буфер в индексах таблицы TOAST (если таковая имеется) для этой таблицы |
pg_statio_all_indexes
Представление pg_statio_all_indexes будет содержать для каждого индекса в текущей базе данных по одной строке, отображающей статистику по вводу/выводу для этого конкретного индекса. Представления pg_statio_user_indexes и pg_statio_sys_indexes содержат ту же информацию, но отфильтрованы так, чтобы отображать только пользовательские и системные индексы соответственно.
Таблица 31. Представление pg_statio_all_indexes
| Столбец Тип | Описание |
|---|---|
| relid oid | OID таблицы для этого индекса |
| indexrelid oid | OID этого индекса |
| 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 oid | OID последовательности |
| 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 oid | OID функции |
| 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
Возвращает время начала текущей транзакции этого обслуживающего процесса.