Перейти к основному содержимому

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

примечание

Эта страница переведена при помощи нейросети GigaChat.

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

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

Настройка системы сбора статистики

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

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

Параметр track_cost_delay_timing позволяет отслеживать задержку вакуума, зависящую от стоимости.

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

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

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

Параметр track_wal_io_timing позволяет отслеживать время чтения, записи и синхронизации WAL.

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

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

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

Несколько предопределенных представлений, перечисленных в таблице «Динамические представления статистики», доступны для отображения текущего состояния системы. Также есть несколько других видов, перечисленных в таблице «Представления собранной статистики», доступных для отображения накопленной статистики. В качестве альтернативы можно создать пользовательские представления с использованием базовых функций накопительной статистики, как обсуждается в разделе «pg_stat_replication».

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

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

Динамические представления статистики:

Имя представленияОписание
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Одна строка для каждого бэкенда (включая процессы рабочих процессов autovacuum), выполняющих 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»

Представления собранной статистики:

Имя представленияОписание
pg_stat_archiverТолько одна строка, показывающая статистику активности процесса архиватора WAL. Подробнее смотрите pg_stat_archiver для получения подробной информации
pg_stat_bgwriterТолько одна строка, показывающая статистику о активности процесса фонового писателя. Подробнее смотрите pg_stat_bgwriter для получения подробной информации
pg_stat_checkpointerТолько одна строка, отображающая статистику активности процесса контрольных точек. Подробнее смотрите pg_stat_checkpointer для получения подробной информации
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_databaseОдна строка на базу данных, отображающая статистические данные по всей базе данных. Подробнее смотрите pg_stat_database для получения подробной информации
pg_stat_database_conflictsОдна строка для каждой базы данных, отображающая статистику всей базы данных о запросах отмены из-за конфликта с восстановлением на резервных серверах. Подробнее смотрите pg_stat_database_conflicts для получения подробной информации
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_ полезны для оценки эффективности кеша буферов. Их можно использовать для расчета коэффициента попадания в кеш. Обратите внимание, что хотя статистика операций ввода-вывода PostgreSQL фиксирует большинство случаев обращения ядра для выполнения операций ввода-вывода, она не различает данные, которые необходимо было получить с диска, и те, которые уже находились в кеше страниц ядра. Пользователям рекомендуется использовать представления статистики PostgreSQL в сочетании с утилитами операционной системы для получения более полной картины производительности ввода-вывода базы данных.

pg_stat_activity

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

Представление pg_stat_activity:

Имя столбцаТип данныхОписание
datidoidИдентификатор OID базы данных, к которой подключен этот бэкенд
datnamenameИмя базы данных, к которой подключен этот бэкенд
pidintegerИдентификатор процесса этого бэкенда
leader_pidintegerИдентификатор процесса лидера параллельной группы, если этот процесс является рабочим процессом параллельного запроса. NULL, если этот процесс является лидером параллельной группы или не участвует в параллельном запросе
usesysidoidOID пользователя, вошедшего в этот бэкенд
usenamenameИмя пользователя, вошедшего в этот бэкенд
application_nametextНазвание приложения, которое подключено к этому бэкенду
client_addrinetIP-адрес клиента, подключенного к этому бэкенду. Если это поле равно NULL, это указывает либо на то, что клиент подключен через сокет Unix на серверной машине, либо на то, что это внутренний процесс, такой как autovacuum
client_hostnametextИмя хоста подключенного клиента, о котором сообщает обратный поиск DNS client_addr. Это поле будет ненулевым только для соединений IP и только тогда, когда log_hostname включен
client_portintegerНомер TCP-порта, который клиент использует для связи с этим бэкендом, или -1, если используется сокет Unix. Если это поле равно NULL, это означает, что это внутренний серверный процесс
backend_starttimestamp with time zoneВремя, когда этот процесс был запущен. Для клиентских бэкендов — это время подключения клиента к серверу
xact_starttimestamp with time zoneВремя, когда текущая транзакция этого процесса была начата, или NULL, если транзакция не активна. Если текущий запрос является первым в своей транзакции, эта колонка равна колонке query_start
query_starttimestamp with time zoneВремя, когда был запущен текущий активный запрос, или, если state не active, когда последний запрос был запущен
state_changetimestamp with time zoneВремя, когда state было изменено последним
wait_event_typetextТип события, которого ожидает бэкенд, если есть; в противном случае NULL. Смотрите «Типы событий ожидания»
wait_eventtextИмя события ожидания, если бэкенд в данный момент ожидает, иначе NULL. Смотрите «События ожидания типа активности» и «События ожидания типа тайм-аута»
statetextТекущее общее состояние этого бэкенда. Возможные значения:
active: бэкенд выполняет запрос.
idle: бэкенд ожидает новой команды клиента.
idle in transaction: бэкенд находится в транзакции, но в данный момент не выполняет запрос.
idle in transaction (aborted): аналогично idle in transaction, но одно из выражений в транзакции вызвало ошибку.
fastpath function call: серверная часть выполняет функцию быстрого пути.
disabled: если track_activities отключено в этой серверной части
backend_xidxidИдентификатор транзакции верхнего уровня серверного процесса, если таковой имеется
backend_xminxidГоризонт текущего бэкенда
query_idbigintИдентификатор последнего запроса этого бэкенда. Если state равен active, это поле показывает идентификатор текущего выполняемого запроса. Во всех остальных состояниях — идентификатор последнего выполненного запроса. Поле пустое, если compute_query_id не включен
querytextТекст последнего запроса этого бэкенда. Если state равен active, это текущий выполняемый запрос. По умолчанию усекается до 1024 байт; можно изменить через track_activity_query_size
backend_typetextТип текущего бэкенда. Возможные типы включают autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, archiver, startup, walreceiver, walsender, walwriter. Фоновые рабочие процессы расширений могут иметь дополнительные типы
Примечание

Столбцы wait_event и state независимы. Если бэкэнд находится в активном состоянии, он может ожидать или не ожидать какого-либо события. Если состояние активное и wait_event не равен null, это означает, что запрос выполняется, но блокируется где-то в системе. Чтобы снизить накладные расходы на формирование отчетов, система не пытается синхронизировать различные аспекты данных об активности для бэкэнда. В результате между столбцами представления могут существовать временные расхождения.

Типы событий ожидания:

Тип события ожиданияОписание
ActivityСерверный процесс простаивает. Этот тип события указывает на ожидание активности в основном цикле обработки процесса. wait_event определит конкретную точку ожидания, подробнее смотрите «События ожидания типа активности»
BufferPinСерверный процесс ожидает исключительного доступа к буферу данных. Ожидания буферной булавки могут быть затянуты, если другой процесс удерживает открытый курсор, который последний раз читал данные из интересующего буфера. Подробнее смотрите «События ожидания типа Буферная булавка»
ClientСерверный процесс ожидает активности на сокете, подключенном к пользовательскому приложению. Таким образом, сервер ожидает чего-то, что происходит независимо от его внутренних процессов. wait_event определит конкретную точку ожидания,подробнее смотрите «События ожидания типа Клиент»
ExtensionСерверный процесс ожидает какого-либо условия, определенного модулем расширения. Подробнее смотрите «События ожидания типа расширения»
InjectionPointПроцесс сервера ожидает достижения точки инъекции результата, определенного в тесте. Для получения дополнительной информацииподробнее смотрите раздел Точки инъекций. Данный тип не имеет предопределенных точек ожидания
IOСерверный процесс ожидает завершения операции ввода-вывода. wait_event определит конкретную точку ожидания,подробнее смотрите «События ожидания типа ввода-вывода»
IPCСерверный процесс ожидает некоторого взаимодействия с другим серверным процессом. wait_event определит конкретную точку ожидания,подробнее смотрите «События ожидания типа IPC»
LockСерверный процесс ожидает тяжелую блокировку. Тяжелые блокировки, также известные как блокировки менеджера блокировок или просто блокировки, в первую очередь защищают объекты SQL, такие как таблицы. Однако они также используются для обеспечения взаимного исключения при определенных внутренних операциях, таких как расширение отношения. wait_event определит тип ожидаемой блокировки,подробнее смотрите «События ожидания типа блокировки»
LWLockСерверный процесс ожидает легкую блокировку. Большинство таких блокировок защищают определенную структуру данных в общей памяти. wait_event содержит имя, идентифицирующее назначение легкой блокировки. (Некоторые замки имеют конкретные имена, другие являются частью группы замков с аналогичной целью.) Подробнее смотрите «События ожидания типа LWLock»
TimeoutСерверный процесс ожидает истечения тайм-аута. wait_event определит конкретную точку ожидания,подробнее смотрите «События ожидания типа Timeout»

События ожидания типа Activity:

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

События ожидания типа BufferPin:

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

События ожидания типа Client:

События ожидания ClientОписание
ClientReadОжидание чтения данных от клиента
ClientWriteОжидание записи данных клиенту
GSSOpenServerОжидание чтения данных от клиента при установлении сеанса GSSAPI
LibPQWalReceiverConnectОжидание в приемнике WAL для установления соединения с удаленным сервером
LibpqwalreceiverReceiveОжидание в приемнике WAL получения данных от удаленного сервера
SslOpenServerОжидание SSL во время попытки подключения
WaitForStandbyConfirmationОжидание приема и сброса WAL физическим резервным сервером
WalSenderWaitForWALОжидание завершения WAL в процессе отправки WAL
WalSenderWriteDataОжидание любой активности при обработке ответов от получателя WAL в процессе отправителя WAL

События ожидания типа Extension:

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

События ожидания типа 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Ожидание записи во время операции копирования файла
DataFileExtendОжидание расширения файла данных отношения
DataFileFlushОжидание достижения отношения файла данных к постоянному хранилищу
DataFileImmediateSyncОжидание немедленной синхронизации файла данных отношения с постоянным хранилищем
DataFilePrefetchОжидание асинхронной предварительной выборки из файла данных отношения
DataFileReadОжидание чтения из файла данных отношения
DataFileSyncОжидание внесения изменений в файл отношения данных для достижения долговечного хранения
DataFileTruncateОжидание усечения файла данных отношения
DataFileWriteОжидание записи в файл данных отношения
DSMAllocateОжидание выделения сегмента динамической общей памяти
DSMFillZeroWriteОжидание заполнения нулями файла, применяемого для поддержки динамической общей памяти
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Ожидание записи файла состояния двухфазного режима
VersionFileWriteОжидание записи версионного файла во время создания базы данных
WALSenderTimelineHistoryReadОжидание чтения из файла истории линии времени при обработки процессом walsender команды timeline
WALBootstrapSyncОжидание достижения WAL долговечного хранилища во время начальной загрузки
WALBootstrapWriteОжидание записи страницы WAL при начальной загрузке
WALCopyReadОжидание чтения при создании нового сегмента WAL путем копирования существующего
WALCopySyncОжидание достижения новым сегментом WAL, созданным путем копирования существующего, долговечного хранилища
WALCopyWriteОжидание записи при создании нового сегмента WAL путем копирования существующего
WALInitSyncОжидание нового инициализированного файла WAL для достижения долговечного хранилища
WALInitWriteОжидание записи при инициализации нового файла WAL
WalReadОжидание чтения из файла WAL
WalSummayReadОжидание чтения из файла сводок WAL
WalSummaryWriteОжидание записи в файл сводок WAL
WalSyncОжидание достижения WAL-файлом долговечного хранилища
WALSyncMethodAssignОжидание достижения данными долговечного хранилища при назначении нового метода синхронизации WAL
WalWriteОжидание записи в файл WAL

События ожидания типа IPC:

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

События ожидания типа Lock:

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

События ожидания типа LWLock:

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

События ожидания типа Timeout:

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

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

SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL;
pid | wait_event_type | wait_event
------+-----------------+------------
2540 | Lock | relation
6644 | LWLock | ProcArray
(2 rows)
SELECT a.pid, a.wait_event, w.description
FROM pg_stat_activity a JOIN
pg_wait_events w ON (a.wait_event_type = w.type AND
a.wait_event = w.name)
WHERE a.wait_event is NOT NULL and a.state = 'active';
-[ RECORD 1 ]------------------------------------------------------​------------
pid | 686674
wait_event | WALInitSync
description | Waiting for a newly initialized WAL file to reach durable storage
примечание

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

Доработка

Введен параметр monitor_wait_event_start, управляющий сбором времени начала событий ожидания.

Поле wait_event_start

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

Длительность ожидания может быть определена как разность между временем получения статистики и значением wait_event_start.

Для событий ожидания типа Lock возможно расхождение времени начала ожидания, отображаемого в pg_stat_activity и pg_locks, после истечения времени, заданного параметром deadlock_timeout. Это связано с особенностями реализации механизма обнаружения взаимных блокировок, при котором ожидание временно снимается для проверки и затем может быть установлено повторно.

Представление pg_stat_activity_ext

Представление pg_stat_activity_ext является расширением системного представления pg_stat_activity и поставляется в составе расширения psql_extended_stat.

Представление включает все поля оригинального pg_stat_activity, а также дополнительное поле wait_event_start.

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

pg_stat_replication

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

Представление pg_stat_replication:

Имя столбцаТип данныхОписание
pidintegerИдентификатор процесса отправителя WAL
usesysidoidИдентификатор пользователя, вошедшего в этот процесс отправителя WAL
usenamenameИмя пользователя, вошедшего в этот процесс отправителя WAL
application_nametextИмя приложения, подключенного к этому отправителю WAL
client_addrinetIP-адрес клиента, подключенного к этому отправителю WAL. Если это поле равно NULL, это означает, что клиент подключен через сокет Unix на серверной машине
client_hostnametextИмя хоста подключенного клиента, о котором сообщает обратный поиск DNS client_addr. Это поле будет ненулевым только для соединений IP и только тогда, когда log_hostname включен
client_portintegerНомер порта TCP, который клиент использует для связи с этим отправителем WAL, или -1, если используется сокет Unix
backend_starttimestamp with time zoneВремя, когда этот процесс был запущен, то есть когда клиент подключился к этому отправителю WAL
backend_xminxidГоризонт резервного копирования, о котором сообщает hot_standby_feedback
statetextТекущее состояние отправителя WAL. Возможные значения:
startup: отправитель WAL запускается.
catchup: резервная копия догоняет основную версию.
streaming: отправитель WAL передает изменения после того, как подключенный резервный сервер догнал основную версию.
backup: отправитель WAL отправляет резервную копию.
stopping: отправитель WAL останавливается
sent_lsnpg_lsnПоследнее местоположение журнала опережающей записи, отправленное этим подключением
write_lsnpg_lsnПоследнее местоположение журнала опережающей записи, записанное на диск этим сервером-резервной копией
flush_lsnpg_lsnПоследнее местоположение журнала опережающей записи, очищенное на диске этим сервером-резервной копией
replay_lsnpg_lsnПоследнее местоположение журнала записи с опережением, воспроизведенное в базе данных на этом сервере-резервной копии
write_lagintervalВремя между локальной очисткой последнего WAL и получением уведомления о том, что резервный сервер записал его (но еще не очистил или применил). Используется для оценки задержки уровня synchronous_commit = remote_write
flush_lagintervalВремя между локальной очисткой последнего WAL и получением уведомления о том, что резервный сервер записал и очистил его (но еще не применил). Используется для оценки задержки уровня synchronous_commit = on
replay_lagintervalВремя между локальной очисткой последнего WAL и получением уведомления о том, что резервный сервер записал, очистил и применил его. Используется для оценки задержки уровня synchronous_commit = remote_apply
sync_priorityintegerПриоритет этого резервного сервера для выбора в качестве синхронного резерва в репликации на основе приоритета. Не влияет на репликацию на основе кворума
sync_statetextСинхронное состояние резервного сервера. Возможные значения:
async: сервер асинхронен.
potential: сервер асинхронен, но может стать синхронным при отказе текущего синхронного.
sync: сервер синхронный.
quorum: сервер кандидат для кворумной синхронной репликации
reply_timetimestamp with time zoneВремя отправки последнего полученного сообщения ответа от резервного сервера

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

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

Примечание

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

pg_stat_replication_slots

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

Представление pg_stat_replication_slots:

Имя столбцаТип данныхОписание
slot_nametextУникальный идентификатор репликационного слота для всего кластера
spill_txnsbigintКоличество транзакций, которые были сброшены на диск после того, как объем памяти, используемый логическим декодированием для декодирования изменений из WAL, превысил logical_decoding_work_mem. Счетчик увеличивается как для транзакций верхнего уровня, так и для подтранзакций
spill_countbigintКоличество раз, когда транзакции были сброшены на диск при декодировании изменений из WAL для этого слота. Этот счетчик увеличивается каждый раз, когда происходит сброс транзакции, и одна и та же транзакция может быть сброшена несколько раз
spill_bytesbigintОбъем декодированных транзакционных данных, сброшенных на диск при выполнении декодирования изменений из WAL для этого слота. Эти и другие счетчики сброса могут использоваться для оценки ввода-вывода, который произошел во время логического декодирования, и позволяют настраивать logical_decoding_work_mem
stream_txnsbigintКоличество незавершенных транзакций, переданных на выходной плагин декодирования после того, как память, используемая логическим декодированием для декодирования изменений из WAL для этого слота, превысила logical_decoding_work_mem. Потоковая передача работает только с транзакциями верхнего уровня (подтранзакции не могут быть переданы независимо), поэтому счетчик не увеличивается для подтранзакций
stream_countbigintКоличество раз, когда незавершенные транзакции передавались на выходной плагин декодирования при декодировании изменений из WAL для этого слота. Этот счетчик увеличивается каждый раз, когда передается транзакция, и одна и та же транзакция может быть передана несколько раз
stream_bytesbigintОбъем данных транзакции, декодированной для потоковой передачи незавершенных транзакций на выходной плагин декодирования при декодировании изменений из WAL для этого слота. Эти и другие показатели потоковой передачи для этого слота можно использовать для настройки logical_decoding_work_mem
total_txnsbigintКоличество декодированных транзакций, отправленных в плагин вывода декодирования для этого слота. Учитываются только транзакции верхнего уровня; счетчик не увеличивается для подтранзакций. Это включает транзакции, которые транслируются и/или проливаются
total_bytesbigintОбъем данных о транзакциях, декодируемых при отправке транзакций в плагин вывода декодирования во время декодирования изменений из WAL для этого слота. Это включает данные, которые транслируются и/или проливаются
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз

pg_stat_wal_receiver

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

Представление pg_stat_wal_receiver:

Имя столбцаТип данныхОписание
pidintegerИдентификатор процесса получателя WAL
statustextСтатус активности процесса получателя WAL
receive_start_lsnpg_lsnПервая позиция журнала опережающей записи, используемая при запуске получателя WAL
receive_start_tliintegerПервый номер временной шкалы, используемый при запуске приемника WAL
written_lsnpg_lsnПоследнее местоположение журнала опережающей записи, уже полученное и записанное на диск, но еще не очищенное. Это не должно использоваться для проверок целостности данных
flushed_lsnpg_lsnПоследнее местоположение журнала опережающей записи, уже полученное и очищенное с диска; начальное значение этого поля — первое местоположение журнала, используемое при запуске приемника WAL
received_tliintegerНомер временной шкалы последнего местоположения журнала опережающей записи, полученного и очищенного на диске; начальное значение — номер временной шкалы первого местоположения журнала, используемого при запуске приемника WAL
last_msg_send_timetimestamp with time zoneВремя отправки последнего сообщения, полученного от отправителя журнала WAL происхождения
last_msg_receipt_timetimestamp with time zoneВремя получения последнего сообщения, полученного от отправителя журнала WAL происхождения
latest_end_lsnpg_lsnПоследнее местоположение журнала опережающей записи, о котором сообщалось отправителю журнала WAL происхождения
latest_end_timetimestamp with time zoneВремя последней записи местоположения журнала опережающей записи, сообщенной отправителю журнала WAL происхождения
slot_nametextИмя репликационного слота, используемое этим получателем WAL
sender_hosttextХост экземпляра PostgreSQL, к которому подключен этот получатель WAL. Это может быть имя хоста, IP-адрес или путь к каталогу, если подключение осуществляется через сокет Unix (путь всегда является абсолютным и начинается с /)
sender_portintegerНомер порта экземпляра PostgreSQL, к которому подключен этот получатель WAL
conninfotextСтрока подключения, используемая этим получателем WAL, с зашифрованными полями безопасности

pg_stat_recovery_prefetch

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

Представление pg_stat_recovery_prefetch:

Имя столбцаТип данныхОписание
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз
prefetchbigintКоличество блоков, которые были предварительно выбраны, потому что они не находились в буферном пуле
hitbigintКоличество блоков, которые не были предварительно выбраны, потому что они уже находились в буферном пуле
skip_initbigintКоличество блоков, которые не были предварительно выбраны, поскольку они будут обнулены
skip_newbigintКоличество блоков, которые не были предварительно выбраны, так как их еще не существовало
skip_fpwbigintКоличество блоков, которые не были предварительно выбраны из-за того, что полное изображение страницы было включено в WAL
skip_repbigintКоличество блоков, которые не были предварительно выбраны, потому что они уже были недавно предварительно выбраны
wal_distanceintНа сколько байт вперед смотрит предварительный выборщик
block_distanceintСколько блоков впереди просматривает предварительный выборщик
io_depthintСколько предварительных выборок было инициировано, но еще неизвестно, завершились ли они

pg_stat_subscription

Представление pg_stat_subscription:

Имя столбцаТип данныхОписание
subidoidИдентификатор OID подписки
subnamenameИмя подписки
pidintegerИдентификатор процесса рабочего процесса подписки
relidoidOID отношения, которое синхронизирует рабочий процесс; нулевое значение для основного рабочего процесса apply
received_lsnpg_lsnПоследнее полученное местоположение журнала записи вперед; начальное значение этого поля равно 0
last_msg_send_timetimestamp with time zoneВремя отправки последнего сообщения, полученного от отправителя журнала WAL происхождения
last_msg_receipt_timetimestamp with time zoneВремя получения последнего сообщения, полученного от отправителя журнала WAL происхождения
latest_end_lsnpg_lsnПоследнее местоположение журнала опережающей записи, о котором сообщалось отправителю журнала WAL происхождения
latest_end_timetimestamp with time zoneВремя последней записи местоположения журнала опережающей записи, сообщенной отправителю журнала WAL происхождения

pg_stat_subscription_stats

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

Представление pg_stat_subscription_stats:

Имя столбцаТип данныхОписание
subidoidИдентификатор OID подписки
subnamenameИмя подписки
apply_error_countbigintКоличество раз, когда произошла ошибка при применении изменений
sync_error_countbigintКоличество раз, когда произошла ошибка во время начальной синхронизации таблицы
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз

pg_stat_ssl

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

Представление pg_stat_ssl:

Имя столбцаТип данныхОписание
pidintegerИдентификатор процесса бэкенда или процесса отправителя WAL
sslbooleanИстина, если SSL используется для этого соединения
versiontextВерсия SSL, используемая в данный момент, или NULL, если SSL не используется для этого соединения
ciphertextИмя шифра SSL, используемого в данный момент, или NULL, если SSL не используется для этого соединения
bitsintegerКоличество битов в алгоритме шифрования, используемом для этой связи, или NULL, если SSL не используется
client_dntextПоле имени (DN) из клиентского сертификата, используемого для этой связи, или NULL, если клиентский сертификат не был предоставлен или если SSL не используется для этой связи. Это поле усекается, если DN длиннее NAMEDATALEN (64 символа в стандартной сборке)
client_serialnumericСерийный номер клиентского сертификата или NULL, если клиентский сертификат не был предоставлен или если SSL не используется для этой связи. Комбинация серийного номера сертификата и выдавшего его органа однозначно идентифицирует сертификат (если орган, выдающий сертификаты, ошибочно повторно использует серийные номера)
issuer_dntextDN органа, выдавшего клиентский сертификат, или NULL, если клиентский сертификат не был предоставлен или если SSL не используется для этой связи. Это поле усекается так же, как client_dn

pg_stat_gssapi

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

Представление pg_stat_gssapi:

Имя столбцаТип данныхОписание
pidintegerИдентификатор процесса фонового режима
gss_authenticatedbooleanИстина, если для этого соединения использовалась аутентификация GSSAPI
principaltextГлавный принцип, используемый для аутентификации этого соединения, или NULL, если GSSAPI не использовался для аутентификации этого соединения. Это поле усекается, если главный принцип длиннее, чем NAMEDATALEN (64 символа в стандартной сборке)
encryptedbooleanИстина, если шифрование GSSAPI используется в этом соединении

pg_stat_archiver

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

Представление pg_stat_archiver:

Имя столбцаТип данныхОписание
archived_countbigintКоличество файлов WAL, которые были успешно заархивированы
last_archived_waltextИмя файла WAL, который был успешно заархивирован последним
last_archived_timetimestamp with time zoneВремя последней успешной операции архивирования
failed_countbigintКоличество неудачных попыток архивирования файлов WAL
last_failed_waltextИмя файла WAL последней неуспешной операции архивирования
last_failed_timetimestamp with time zoneВремя последней неуспешной операции архивирования
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз

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

pg_stat_io

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

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

Представление pg_stat_io:

СтолбецТипОписание
backend_typetextТип бэкенда (например, фоновый воркер, воркер autovacuum). Смотрите pg_stat_activity для получения дополнительной информации о backend_type. Некоторые типы backend_type не накапливают статистику операций ввода-вывода и не будут включены в представление
objecttextЦелевой объект операции ввода-вывода. Возможные значения:
- relation: постоянные отношения (таблицы, индексы);
- temp relation: временные отношения;
- wal: журналы предзаписи (Write Ahead Logs)
contexttextКонтекст операции ввода-вывода. Возможные значения:
- normal: стандартный контекст для данного типа операции. Например, по умолчанию данные отношений читаются и записываются через общие буферы (shared buffers). Поэтому чтения и записи данных отношений в общие буферы и из них отслеживаются в контексте normal;
- init: операции ввода-вывода, выполняемые при создании сегментов WAL, отслеживаются в контексте init;
- vacuum: операции ввода-вывода, выполняемые вне общих буферов при вакуумировании и анализе постоянных отношений. Вакуумирование временных таблиц использует тот же локальный пул буферов, что и другие операции ввода-вывода временных таблиц, и отслеживается в контексте normal;
- bulkread: крупные операции чтения, выполняемые вне общих буферов, например, последовательное сканирование большой таблицы;
- bulkwrite: крупные операции записи, выполняемые вне общих буферов, например, COPY
readsbigintКоличество операций чтения
read_bytesnumericОбщий объем данных, прочитанных в байтах
read_timedouble precisionВремя ожидания операций чтения в миллисекундах (если включен параметр track_io_timing и object не равен wal, либо если включен track_wal_io_timing и object равен wal; в противном случае — ноль)
writesbigintКоличество операций записи
write_bytesnumericОбщий объем данных, записанных в байтах
write_timedouble precisionВремя ожидания операций записи в миллисекундах (если включен параметр track_io_timing и object не равен wal, либо если включен track_wal_io_timing и object равен wal; в противном случае — ноль)
writebacksbigintКоличество блоков размером BLCKSZ (обычно 8 КБ), которые процесс запросил у ядра для записи на постоянное хранилище
writeback_timedouble precisionВремя ожидания операций сброса на диск в миллисекундах (если включен параметр track_io_timing; в противном случае — ноль). Включает время ожидания очереди на запись и, потенциально, время фактической записи «грязных» данных
extendsbigintКоличество операций расширения отношений
extend_bytesnumericОбщий объем данных, записанных при расширении отношений, в байтах
extend_timedouble precisionВремя ожидания операций расширения в миллисекундах (если включен параметр track_io_timing и object не равен wal, либо если включен track_wal_io_timing и object равен wal; в противном случае — ноль)
hitsbigintКоличество раз, когда требуемый блок был найден в общем буфере (кэш-попадание)
evictionsbigintКоличество раз, когда блок был вытеснен из общего или локального буфера, чтобы освободить место для другого блока.

В контексте normal — количество вытеснений блока из буфера с заменой на другой. В контекстах bulkwrite, bulkread и vacuum — количество вытеснений из общих буферов для добавления буфера в отдельное кольцевое буферное хранилище ограниченного размера, используемое для пакетных операций ввода-вывода
reusesbigintКоличество раз, когда существующий буфер в кольцевом хранилище ограниченного размера (вне общих буферов) был повторно использован в рамках операции ввода-вывода в контекстах bulkread, bulkwrite или vacuum
fsyncsbigintКоличество вызовов fsync. Отслеживаются только в контексте normal
fsync_timedouble precisionВремя ожидания операций fsync в миллисекундах (если включен параметр track_io_timing и object не равен wal, либо если включен track_wal_io_timing и object равен wal; в противном случае — ноль)
stats_resettimestamp with time zoneВремя последнего сброса этой статистики

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

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

Для объекта wal параметры fsync и fsync_time отслеживают активность синхронизации файлов WAL, выполняемую в issue_xlog_fsync. Параметры writes и write_time отслеживают активность записи файлов WAL, выполняемую в XLogWrite.

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

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

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

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

Примечание

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

pg_stat_bgwriter

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

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

Имя столбцаТип данныхОписание
checkpoints_timedbigintКоличество запланированных контрольных точек, которые были выполнены
checkpoints_reqbigintКоличество запрошенных контрольных точек, которые были выполнены
checkpoint_write_timedouble precisionОбщее время, затраченное на часть обработки контрольной точки, когда файлы записываются на диск, в миллисекундах
checkpoint_sync_timedouble precisionОбщее время, затраченное на часть процесса контрольной точки, когда файлы синхронизируются с диском, в миллисекундах
buffers_checkpointbigintКоличество буферов, записанных во время контрольных точек
buffers_cleanbigintКоличество буферов, записанных фоновым писателем
maxwritten_cleanbigintКоличество раз, когда фоновая запись остановила сканирование очистки из-за того, что было записано слишком много буферов
buffers_backendbigintКоличество буферов, записанных непосредственно бэкендом
buffers_backend_fsyncbigintКоличество раз, когда бэкенд должен был выполнить свой собственный вызов fsync (обычно фоновый писатель обрабатывает их даже тогда, когда сам бэкенд выполняет запись)
buffers_allocbigintКоличество выделенных буферов
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз

pg_stat_checkpointer

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

СтолбецТипОписание
num_timedbigintКоличество запланированных контрольных точек по таймауту
num_requestedbigintКоличество запрошенных контрольных точек
num_donebigintКоличество выполненных контрольных точек
restartpoints_timedbigintКоличество запланированных restartpoint по таймауту или после неудачной попытки выполнения
restartpoints_reqbigintКоличество запрошенных restartpoint
restartpoints_donebigintКоличество выполненных restartpoint
write_timedouble precisionОбщее время, затраченное на запись файлов на диск при выполнении контрольных точек и restartpoint, в миллисекундах
sync_timedouble precisionОбщее время, затраченное на синхронизацию файлов с диском при выполнении контрольных точек и restartpoint, в миллисекундах
buffers_writtenbigintКоличество общих буферов, записанных во время контрольных точек и restartpoint
slru_writtenbigintКоличество SLRU-буферов, записанных во время контрольных точек и restartpoint
stats_resettimestamp with time zoneВремя последнего сброса статистики

Контрольные точки могут быть пропущены, если сервер простаивал с момента последней. Параметры num_timed и num_requested подсчитывают как завершенные, так и пропущенные контрольные точки, а num_done отслеживает только завершенные. Аналогично, точки перезапуска могут быть пропущены, если последняя воспроизведенная запись контрольной точки уже является последней точкой перезапуска. Параметры restartpoints_timed и restartpoints_req подсчитывают как завершенные, так и пропущенные точки перезапуска, а restartpoints_done отслеживает только завершенные.

pg_stat_wal

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

Представление pg_stat_wal:

Имя столбцаТип данныхОписание
wal_recordsbigintОбщее количество записей WAL, сгенерированных
wal_fpibigintОбщее количество полностраничных изображений WAL, сгенерированных
wal_bytesnumericОбщий объем WAL, сгенерированный в байтах
wal_buffers_fullbigintКоличество раз, когда данные WAL записывались на диск из-за того, что буферы WAL заполнялись
wal_writebigintКоличество раз, когда буферы WAL были записаны на диск через запрос XLogWrite. Смотрите раздел «Настройка WAL» для получения дополнительной информации о внутренней функции WAL XLogWrite
wal_syncbigintКоличество раз, когда файлы WAL синхронизировались с диском через запрос issue_xlog_fsync (если fsync включен и wal_sync_method равен либо fdatasync, либо fsync, либо fsync_writethrough, иначе ноль). Смотрите раздел «Настройка WAL» для получения дополнительной информации о внутренней функции WAL issue_xlog_fsync
wal_write_timedouble precisionОбщее время записи буферов WAL на диск через запрос XLogWrite в миллисекундах (если track_wal_io_timing включен, иначе ноль). Это включает время синхронизации, когда wal_sync_method равно либо open_datasync, либо open_sync
wal_sync_timedouble precisionОбщее время синхронизации файлов WAL с диском через запрос issue_xlog_fsync в миллисекундах (если track_wal_io_timing включен, fsync равен on и wal_sync_method равно либо fdatasync, либо fsync, либо fsync_writethrough, иначе ноль)
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз

pg_stat_database

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

Представление pg_stat_database:

Имя столбцаТип данныхОписание
datidoidИдентификатор OID этой базы данных или 0 для объектов, принадлежащих общей связи
datnamenameИмя этой базы данных или NULL для общих объектов
numbackendsintegerКоличество бэкендов, в данный момент подключенных к этой базе данных, или NULL для общих объектов. Это единственный столбец в этом представлении, который возвращает значение, отражающее текущее состояние; все остальные столбцы возвращают накопленные значения с момента последнего сброса
xact_commitbigintКоличество транзакций в этой базе данных, которые были подтверждены
xact_rollbackbigintКоличество транзакций в этой базе данных, которые были отменены
blks_readbigintКоличество блоков диска, прочитанных в этой базе данных
blks_hitbigintКоличество раз, когда блоки диска уже находились в буферном кеше, так что чтение не потребовалось (это включает только попадания в кеш буфера PostgreSQL, а не в кеш файловой системы операционной системы)
tup_returnedbigintКоличество активных строк, извлеченных последовательными сканированиями и индексными записями, возвращенными индексными сканированиями в этой базе данных
tup_fetchedbigintКоличество активных строк, извлеченных индексными сканированиями в этой базе данных
tup_insertedbigintКоличество строк, вставленных запросами в эту базу данных
tup_updatedbigintКоличество строк, обновленных запросами в этой базе данных
tup_deletedbigintКоличество строк, удаленных запросами в этой базе данных
conflictsbigintКоличество запросов, отмененных из-за конфликтов с восстановлением в этой базе данных. Конфликты возникают только на резервных серверах; подробнее см. pg_stat_database_conflicts для получения подробной информации
temp_filesbigintКоличество временных файлов, созданных запросами в этой базе данных. Все временные файлы учитываются независимо от причины создания (например, сортировка или хеширование) и независимо от настройки log_temp_files
temp_bytesbigintОбщее количество данных, записанных во временные файлы запросами в этой базе данных. Все временные файлы учитываются независимо от причины создания и независимо от настройки log_temp_files
deadlocksbigintКоличество тупиков, обнаруженных в этой базе данных
checksum_failuresbigintКоличество сбоев контрольной суммы страниц данных, обнаруженных в этой базе данных (или в общем объекте), или NULL, если контрольные суммы данных не включены
checksum_last_failuretimestamp with time zoneВремя последнего сбоя контрольной суммы страницы данных, обнаруженного в этой базе данных (или в общем объекте), или NULL, если контрольные суммы данных не включены
blk_read_timedouble precisionВремя, затраченное бэкендами этой базы данных на чтение блоков данных файла, в миллисекундах (если включено track_io_timing, иначе ноль)
blk_write_timedouble precisionВремя, затраченное бэкендами этой базы данных на запись блоков данных файла, в миллисекундах (если включено track_io_timing, иначе ноль)
session_timedouble precisionВремя, проведенное сеансами баз данных в этой базе данных, в миллисекундах (статистика обновляется только при изменении состояния сеанса; длительное бездействие сеансов не учитывается)
active_timedouble precisionВремя выполнения SQL-предложений в этой базе данных в миллисекундах (соответствует состояниям active и fastpath function call в pg_stat_activity)
idle_in_transaction_timedouble precisionВремя простоя при выполнении транзакции в этой базе данных в миллисекундах (соответствует состояниям idle in transaction и idle in transaction (aborted) в pg_stat_activity)
sessionsbigintОбщее количество сеансов, установленных для этой базы данных
sessions_abandonedbigintКоличество сеансов работы с базой данных для этой базы данных, которые были завершены из-за потери соединения с клиентом
sessions_fatalbigintКоличество сеансов работы с базой данных для этой базы данных, которые были завершены из-за фатальных ошибок
sessions_killedbigintКоличество сеансов работы с базой данных для этой базы данных, которые были завершены вмешательством оператора
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз

pg_stat_database_conflicts

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

Представление pg_stat_database_conflicts:

Имя столбцаТип данныхОписание
datidoidИдентификатор объекта базы данных
datnamenameИмя этой базы данных
confl_tablespacebigintКоличество запросов в этой базе данных, которые были отменены из-за удаленных табличных пространств
confl_lockbigintКоличество запросов в этой базе данных, которые были отменены из-за тайм-аутов блокировки
confl_snapshotbigintКоличество запросов в этой базе данных, которые были отменены из-за старых снимков
confl_bufferpinbigintКоличество запросов в этой базе данных, которые были отменены из-за закрепленных буферов
confl_deadlockbigintКоличество запросов в этой базе данных, которые были отменены из-за взаимоблокировок

pg_stat_all_tables

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

Представление pg_stat_all_tables:

Имя столбцаТип данныхОписание
relidoidOID таблицы
schemanamenameИмя схемы, в которой находится эта таблица
relnamenameИмя этой таблицы
seq_scanbigintКоличество последовательных сканирований, инициированных для этой таблицы
seq_tup_readbigintКоличество активных строк, извлеченных с помощью последовательных сканирований
idx_scanbigintКоличество инициированных сканирований индекса в этой таблице
idx_tup_fetchbigintКоличество активных строк, извлеченных с помощью индексных сканирований
n_tup_insbigintКоличество вставленных строк
n_tup_updbigintКоличество обновленных строк (включая обновленные строки HOT)
n_tup_delbigintКоличество удаленных строк
n_tup_hot_updbigintКоличество строк HOT обновлено (то есть без необходимости отдельного обновления индекса)
n_live_tupbigintОцениваемое количество активных строк
n_dead_tupbigintОцениваемое количество неактивных строк
n_mod_since_analyzebigintОцениваемое количество строк, измененных с момента последнего анализа этой таблицы
n_ins_since_vacuumbigintОцениваемое количество строк, вставленных после последней очистки этой таблицы
last_vacuumtimestamp with time zoneПоследнее время, когда эта таблица была вручную очищена (не считая VACUUM FULL)
last_autovacuumtimestamp with time zoneПоследнее время, когда эта таблица была очищена демоном автозачистки
last_analyzetimestamp with time zoneПоследнее время, когда эта таблица была проанализирована вручную
last_autoanalyzetimestamp with time zoneПоследнее время, когда эта таблица была проанализирована демоном автозачистки
vacuum_countbigintКоличество раз, когда эта таблица была вручную очищена (не считая VACUUM FULL)
autovacuum_countbigintКоличество раз, когда эта таблица была очищена демоном автозачистки
analyze_countbigintКоличество раз, когда эта таблица была проанализирована вручную
autoanalyze_countbigintКоличество раз, когда эта таблица была проанализирована демоном автозачистки

pg_stat_all_indexes

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

Представление pg_stat_all_indexes:

Имя столбцаТип данныхОписание
relidoidOID таблицы для этого индекса
indexrelidoidOID этого индекса
schemanamenameИмя схемы, к которой относится этот индекс
relnamenameИмя таблицы для этого индекса
indexrelnamenameИмя этого индекса
idx_scanbigintКоличество сканирований индекса, инициированных для этого индекса
idx_tup_readbigintКоличество записей индекса, возвращаемых при сканировании этого индекса
idx_tup_fetchbigintКоличество активных строк таблицы, извлеченных простыми индексными сканированиями с использованием этого индекса

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

Это может произойти с запросами, использующими определенные конструкции SQL для поиска строк, соответствующих любому значению из списка или массива нескольких скалярных значений. Это также может произойти с запросами, содержащими конструкцию column_name = value1 ИЛИ column_name = value2 ..., но только если оптимизатор преобразует конструкцию в эквивалентное представление многозначного массива. Аналогично, когда сканирование B-дерева использует оптимизацию пропуска сканирования, поиск по индексу выполняется каждый раз, когда сканирование перемещается на следующую листовую страницу индекса, которая может содержать соответствующие кортежи.

подсказка

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

pg_statio_all_tables

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

Представление pg_statio_all_tables:

Имя столбцаТип данныхОписание
relidoidOID таблицы
schemanamenameИмя схемы, в которой находится эта таблица
relnamenameИмя этой таблицы
heap_blks_readbigintКоличество дисковых блоков, прочитанных из этой таблицы
heap_blks_hitbigintКоличество попаданий буфера в этой таблице
idx_blks_readbigintКоличество блоков диска, прочитанных из всех индексов в этой таблице
idx_blks_hitbigintКоличество попаданий буфера во все индексы в этой таблице
toast_blks_readbigintКоличество блоков диска, прочитанных из таблицы TOAST этой таблицы (если есть)
toast_blks_hitbigintКоличество попаданий буфера в этой таблице TOAST (если есть)
tidx_blks_readbigintКоличество блоков диска, прочитанных из индексов таблицы TOAST этой таблицы (если есть)
tidx_blks_hitbigintКоличество попаданий буфера в индексах таблицы TOAST этой таблицы (если есть)

pg_statio_all_indexes

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

Представление pg_statio_all_indexes:

Имя столбцаТип данныхОписание
relidoidOID таблицы для этого индекса
indexrelidoidOID этого индекса
schemanamenameИмя схемы, к которой относится этот индекс
relnamenameИмя таблицы для этого индекса
indexrelnamenameИмя этого индекса
idx_blks_readbigintКоличество блоков диска, прочитанных из этого индекса
idx_blks_hitbigintКоличество попаданий буфера в этом индексе

pg_statio_all_sequences

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

Представление pg_statio_all_sequences:

Имя столбцаТип данныхОписание
relidoidOID последовательности
schemanamenameИмя схемы, в которой находится эта последовательность
relnamenameНазвание этой последовательности
blks_readbigintКоличество блоков диска, прочитанных из этой последовательности
blks_hitbigintКоличество попаданий буфера в этой последовательности

pg_stat_user_functions

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

Представление pg_stat_user_functions:

Имя столбцаТип данныхОписание
funcidoidИдентификатор OID функции
schemanamenameИмя схемы, к которой относится эта функция
funcnamenameИмя этой функции
callsbigintКоличество раз, когда эта функция была вызвана
total_timedouble precisionОбщее время, затраченное на эту функцию и все другие функции, вызванные ею, в миллисекундах
self_timedouble precisionОбщее время, затраченное на саму эту функцию, не включая другие вызываемые ей функции, в миллисекундах

pg_stat_slru

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

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

Представление pg_stat_slru:

Имя столбцаТип данныхОписание
nametextИмя SLRU
blks_zeroedbigintКоличество блоков, обнуленных во время инициализации
blks_hitbigintКоличество раз, когда дисковые блоки уже были найдены в SLRU, так что чтение не было необходимо (это включает только попадания в SLRU, а не в кеш файловой системы операционной системы)
blks_readbigintКоличество блоков диска, прочитанных для этого SLRU
blks_writtenbigintКоличество блоков диска, записанных для этого SLRU
blks_existsbigintКоличество блоков, проверенных на наличие для этого SLRU
flushesbigintКоличество операций очистки поврежденных данных для этого SLRU
truncatesbigintКоличество усечений для этого SLRU
stats_resettimestamp with time zoneВремя, когда эти статистические данные были сброшены последний раз

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

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

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

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

ФункцияОписание
pg_backend_pid()integerВозвращает идентификатор процесса серверного процесса, прикрепленного к текущей сессии
pg_stat_get_backend_io ( integer ) → setof recordВозвращает статистику ввода-вывода для бэкенда с указанным ID процесса. Выходные поля точно такие же, как в представлении pg_stat_io. Функция не возвращает статистику ввода-вывода для контрольной точки, фонового процесса записи, процесса запуска и запуска автоочистки, поскольку они уже видны в представлении pg_stat_io, и существует только один экземпляр каждого
pg_stat_get_activity(integer)setof recordВозвращает запись информации о бэкенде с указанным идентификатором процесса или одну запись для каждого активного бэкенда в системе, если указано NULL
pg_stat_get_backend_wal ( integer ) → recordВозвращает статистику WAL для бэкенда с указанным ID процесса. Выходные поля точно такие же, как в представлении pg_stat_wal. Функция не возвращает статистику WAL для контрольной точки, фонового процесса записи, процесса запуска и запуска автоочистки
pg_stat_get_snapshot_timestamp()timestamp with time zoneВозвращает отметку времени текущего снимка статистики или значение NULL, если снимок статистики еще не был сделан
pg_stat_get_xact_blocks_fetched(oid)bigintВозвращает число запросов чтения блоков таблицы или индекса в текущей транзакции. Фактическое количество физических чтений обычно ниже из-за буферизации на уровне ядра
pg_stat_get_xact_blocks_hit(oid)bigintВозвращает число запросов чтения блоков таблицы или индекса в текущей транзакции, найденных в кеше (не вызывающих обращений к ядру read())
pg_stat_clear_snapshot()voidУдаляет текущий снимок статистики или кешированную информацию
pg_stat_reset()voidСбрасывает все счетчики статистики для текущей базы данных до нуля. Эта функция по умолчанию ограничена суперпользователями
pg_stat_reset_shared([target text DEFAULT NULL])voidСбрасывает некоторые глобальные счетчики кластера до нуля в зависимости от аргумента. Эта функция по умолчанию ограничена суперпользователями
pg_stat_reset_single_table_counters(oid)voidСбрасывает статистику для отдельной таблицы или индекса в текущей базе данных или совместно используемую всеми базами данных в кластере до нуля
pg_stat_reset_backend_stats ( integer ) → voidСбрасывает статистику для одного бэкенда с указанным ID процесса до нуля. По умолчанию эта функция доступна только суперпользователям, но другим пользователям может быть предоставлено право EXECUTE для запуска этой функции
pg_stat_reset_single_function_counters(oid)voidСбрасывает статистику для отдельной функции в текущей базе данных до нуля. Эта функция по умолчанию ограничена суперпользователями
pg_stat_reset_slru([target text DEFAULT NULL])voidСбрасывает статистику до нуля для отдельного кеша SLRU или всех SLRU в кластере. Эта функция по умолчанию ограничена суперпользователями
pg_stat_reset_replication_slot(text)voidСбрасывает статистику слота репликации, определенного аргументом. Эта функция по умолчанию ограничена суперпользователями
pg_stat_reset_subscription_stats(oid)voidСбрасывает статистику для одной подписки, показанной во представлении pg_stat_subscription_stats, до нуля. Эта функция по умолчанию ограничена суперпользователями
Предупреждение

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

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

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

Функции статистики по каждому бэкенду:

ФункцияОписание
pg_stat_get_backend_idset () → setof integerВозвращает набор текущих активных идентификаторов серверного процесса (от 1 до числа активных серверов)
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Возвращает идентификатор объекта базы данных, к которой подключен этот бэкенд
pg_stat_get_backend_pid ( integer ) → integerВозвращает идентификатор процесса этого бэкенда
pg_stat_get_backend_start ( integer ) → timestamp with time zoneВозвращает время, когда этот процесс был запущен
pg_stat_get_backend_userid ( integer ) → oidВозвращает OID пользователя, вошедшего в этот бэкенд
pg_stat_get_backend_wait_event_type ( integer ) → textВозвращает имя типа события ожидания, если этот бэкенд в данный момент ожидает, иначе NULL. Подробнее смотрите «Типы событий ожидания» для получения подробной информации
pg_stat_get_backend_wait_event ( integer ) → textВозвращает имя события ожидания, если этот бэкенд в данный момент ожидает, иначе NULL. Подробнее смотрите «События ожидания типа Activity» через «События ожидания типа Timeout»
pg_stat_get_backend_xact_start ( integer ) → timestamp with time zoneВозвращает время начала текущей транзакции бэкенда