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

Примечание

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

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

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

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

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

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

Параметр 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:

Тип столбца

Описание

datid oid

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

datname name

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

pid integer

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

leader_pid integer

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

usesysid oid

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

usename name

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

application_name text

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

client_addr inet

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

client_hostname text

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

client_port integer

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

backend_start timestamp with time zone

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

xact_start timestamp with time zone

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

query_start timestamp with time zone

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

state_change timestamp with time zone

Время, когда state было изменено последним

wait_event_type text

Тип события, которого ожидает бэкенд, если есть; в противном случае NULL. См. «Типы событий ожидания»

wait_event text

Имя события ожидания, если бэкенд в данный момент ожидает, иначе NULL. См. «События ожидания типа активности» и «События ожидания типа тайм-аута»

state text

Текущее общее состояние этого бэкенда. Возможные значения:
active: Бэкенд выполняет запрос.
idle: Бэкенд ожидает новой команды клиента.
idle in transaction: Бэкенд находится в транзакции, но в данный момент не выполняет запрос.
idle in transaction (aborted): Это состояние аналогично idle in transaction, за исключением того, что одно из выражений в транзакции вызвало ошибку.
fastpath function call: Серверная часть выполняет функцию быстрого пути.
disabled: Об этом состоянии сообщается, если track_activities отключено в этой серверной части

backend_xid xid

Идентификатор транзакции верхнего уровня серверного процесса, если таковой имеется

backend_xmin xid

Горизонт текущего бэкенда

query_id bigint

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

query text

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

backend_type text

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

Примечание

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

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

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

Описание

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

Ожидание в главном цикле процесса контрольной точки

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

Ожидание завершения ввода-вывода буфера

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», а не тем, что было назначено

pg_stat_replication#

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

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

Тип столбца

Описание

pid integer

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

usesysid oid

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

usename name

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

application_name text

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

client_addr inet

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

client_hostname text

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

client_port integer

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

backend_start timestamp with time zone

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

backend_xmin xid

Этот горизонт резервного копирования, о котором сообщает hot_standby_feedback

state text

Текущее состояние отправителя WAL. Возможные значения:
startup: Этот отправитель WAL запускается.
catchup: Резервная копия этого отправителя WAL догоняет основную версию.
streaming: Этот отправитель WAL передает изменения после того, как подключенный к нему сервер резервной копии догнал основную версию.
backup: Этот отправитель WAL отправляет резервную копию.
stopping: Этот отправитель WAL останавливается

sent_lsn pg_lsn

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

write_lsn pg_lsn

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

flush_lsn pg_lsn

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

replay_lsn pg_lsn

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

write_lag interval

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

flush_lag interval

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

replay_lag interval

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

sync_priority integer

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

sync_state text

Синхронное состояние этого резервного сервера. Возможные значения:
async: Этот резервный сервер асинхронен.
potential: В данный момент этот резервный сервер является асинхронным, но потенциально может стать синхронным, если один из текущих синхронных выйдет из строя.
sync: Этот резервный сервер является синхронным.
quorum: Этот резервный сервер рассматривается как кандидат для кворумных резервных копий

reply_time timestamp with time zone

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

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

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

Примечание

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

pg_stat_replication_slots#

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

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

Тип столбца

Описание

slot_name text

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

spill_txns bigint

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

spill_count bigint

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

spill_bytes bigint

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

stream_txns bigint

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

stream_count bigint

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

stream_bytes bigint

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

total_txns bigint

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

total_bytes bigint

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

stats_reset timestamp with time zone

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

pg_stat_wal_receiver#

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

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

Тип столбца

Описание

pid integer

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

status text

Статус активности процесса получателя WAL

receive_start_lsn pg_lsn

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

receive_start_tli integer

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

written_lsn pg_lsn

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

flushed_lsn pg_lsn

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

received_tli integer

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

last_msg_send_time timestamp with time zone

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

last_msg_receipt_time timestamp with time zone

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

latest_end_lsn pg_lsn

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

latest_end_time timestamp with time zone

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

slot_name text

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

sender_host text

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

sender_port integer

Номер порта экземпляра PostgreSQL, к которому подключен этот получатель WAL

conninfo text

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

pg_stat_recovery_prefetch#

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

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

Тип столбца

Описание

stats_reset timestamp with time zone

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

prefetch bigint

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

hit bigint

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

skip_init bigint

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

skip_new bigint

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

skip_fpw bigint

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

skip_rep bigint

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

wal_distance int

На сколько байт вперед смотрит предварительный выборщик

block_distance int

Сколько блоков впереди просматривает предварительный выборщик

io_depth int

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

pg_stat_subscription#

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

Тип столбца

Описание

subid oid

Идентификатор OID подписки

subname name

Имя подписки

worker_type

Тип рабочего процесса подписки. Возможные варианты: apply, parallel apply и table synchronize

pid

Идентификатор рабочего процесса, обслуживающего подписку

leader_pid

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

relid oid

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

received_lsn pg_lsn

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

last_msg_send_time timestamp with time zone

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

last_msg_receipt_time timestamp with time zone

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

latest_end_lsn pg_lsn

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

latest_end_time timestamp with time zone

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

pg_stat_subscription_stats#

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

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

Тип столбца

Описание

subid oid

Идентификатор OID подписки

subname name

Имя подписки

apply_error_count bigint

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

sync_error_count bigint

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

stats_reset timestamp with time zone

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

pg_stat_ssl#

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

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

Тип столбца

Описание

pid integer

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

ssl boolean

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

version text

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

cipher text

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

bits integer

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

client_dn text

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

client_serial numeric

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

issuer_dn text

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

pg_stat_gssapi#

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

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

Тип столбца

Описание

pid integer

Идентификатор процесса фонового режима

gss_authenticated boolean

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

principal text

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

encrypted boolean

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

credentials_delegated boolean

True, если для этого подключения были делегированы учетные данные GSSAPI

pg_stat_archiver#

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

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

Тип столбца

Описание

archived_count bigint

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

last_archived_wal text

Имя файла WAL, который был успешно заархивирован последним

last_archived_time timestamp with time zone

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

failed_count bigint

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

last_failed_wal text

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

last_failed_time timestamp with time zone

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

stats_reset timestamp with time zone

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

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

pg_stat_io#

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

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

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

Тип столбца

Описание

checkpoints_timed bigint

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

checkpoints_req bigint

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

checkpoint_write_time double precision

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

checkpoint_sync_time double precision

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

buffers_checkpoint bigint

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

buffers_clean bigint

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

maxwritten_clean bigint

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

buffers_backend bigint

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

buffers_backend_fsync bigint

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

buffers_alloc bigint

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

stats_reset timestamp with time zone

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

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

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

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

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

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

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

Примечание

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

pg_stat_bgwriter#

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

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

Тип колонки

Описание

buffers_clean bigint

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

maxwritten_clean bigint

Количество остановок очистки из-за записи слишком большого числа буферов

buffers_alloc bigint

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

stats_reset timestamp with time zone

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

pg_stat_wal#

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

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

Тип столбца

Описание

wal_records bigint

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

wal_fpi bigint

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

wal_bytes numeric

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

wal_buffers_full bigint

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

wal_write bigint

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

wal_sync bigint

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

wal_write_time double precision

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

wal_sync_time double precision

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

stats_reset timestamp with time zone

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

pg_stat_database#

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

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

Тип столбца

Описание

datid oid

Идентификатор OID этой базы данных или 0 для объектов, принадлежащих общей связи

datname name

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

numbackends integer

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

xact_commit bigint

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

xact_rollback bigint

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

blks_read bigint

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

blks_hit bigint

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

tup_returned bigint

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

tup_fetched bigint

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

tup_inserted bigint

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

tup_updated bigint

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

tup_deleted bigint

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

conflicts bigint

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

temp_files bigint

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

temp_bytes bigint

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

deadlocks bigint

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

checksum_failures bigint

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

checksum_last_failure timestamp with time zone

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

blk_read_time double precision

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

blk_write_time double precision

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

session_time double precision

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

active_time double precision

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

idle_in_transaction_time double precision

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

sessions bigint

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

sessions_abandoned bigint

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

sessions_fatal bigint

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

sessions_killed bigint

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

stats_reset timestamp with time zone

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

pg_stat_database_conflicts#

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

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

Тип столбца

Описание

datid oid

Идентификатор объекта базы данных

datname name

Имя этой базы данных

confl_tablespace bigint

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

confl_lock bigint

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

confl_snapshot bigint

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

confl_bufferpin bigint

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

confl_deadlock bigint

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

confl_active_logicalslot bigint

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

pg_stat_all_tables#

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

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

Тип столбца

Описание

relid oid

OID таблицы

schemaname name

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

relname name

Имя этой таблицы

seq_scan bigint

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

last_seq_scan timestamp with time zone

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

seq_tup_read bigint

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

idx_scan bigint

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

last_idx_scan timestamp with time zone

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

idx_tup_fetch bigint

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

n_tup_ins bigint

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

n_tup_upd bigint

Количество обновленных строк (включая обновленные строки HOT)

n_tup_newpage_upd bigint

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

n_tup_del bigint

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

n_tup_hot_upd bigint

Количество строк HOT обновлено (т.е. без необходимости отдельного обновления индекса)

n_live_tup bigint

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

n_dead_tup bigint

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

n_mod_since_analyze bigint

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

n_ins_since_vacuum bigint

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

last_vacuum timestamp with time zone

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

last_autovacuum timestamp with time zone

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

last_analyze timestamp with time zone

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

last_autoanalyze timestamp with time zone

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

vacuum_count bigint

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

autovacuum_count bigint

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

analyze_count bigint

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

autoanalyze_count bigint

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

pg_stat_all_indexes#

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

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

Тип столбца

Описание

relid oid

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

indexrelid oid

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

schemaname name

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

relname name

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

indexrelname name

Имя этого индекса

idx_scan bigint

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

last_idx_scan timestamp with time zone

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

idx_tup_read bigint

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

idx_tup_fetch bigint

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

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

Примечание

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

Примечание

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

pg_statio_all_tables#

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

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

Тип столбца

Описание

relid oid

OID таблицы

schemaname name

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

relname name

Имя этой таблицы

heap_blks_read bigint

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

heap_blks_hit bigint

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

idx_blks_read bigint

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

idx_blks_hit bigint

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

toast_blks_read bigint

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

toast_blks_hit bigint

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

tidx_blks_read bigint

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

tidx_blks_hit bigint

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

pg_statio_all_indexes#

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

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

Тип столбца

Описание

relid oid

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

indexrelid oid

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

schemaname name

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

relname name

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

indexrelname name

Имя этого индекса

idx_blks_read bigint

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

idx_blks_hit bigint

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

pg_statio_all_sequences#

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

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

Тип столбца

Описание

relid oid

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

schemaname name

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

relname name

Название этой последовательности

blks_read bigint

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

blks_hit bigint

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

pg_stat_user_functions#

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

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

Тип столбца

Описание

funcid oid

Идентификатор функции OID

schemaname name

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

funcname name

Имя этой функции

calls bigint

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

total_time double precision

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

self_time double precision

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

pg_stat_slru#

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

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

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

Тип столбца

Описание

name text

Имя SLRU

blks_zeroed bigint

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

blks_hit bigint

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

blks_read bigint

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

blks_written bigint

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

blks_exists bigint

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

flushes bigint

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

truncates bigint

Количество усечений для этого SLRU

stats_reset timestamp with time zone

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

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

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

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

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

Функция

Описание

pg_backend_pid()integer

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

pg_stat_get_activity(integer)setof record

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

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

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

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

Функция

Описание

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

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