Система накопительной статистики#
Примечание
Эта страница переведена при помощи нейросети 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 для получения подробной информации |
|
Одна строка для каждого процесса отправителя WAL, показывающая статистику о репликации на резервный сервер, подключенный к этому отправителю. См. pg_stat_replication для получения подробной информации |
|
Только одна строка, показывающая статистику о приемнике WAL с подключенного сервера этого приемника. См. pg_stat_wal_receiver для получения подробной информации |
|
Только одна строка, отображающая статистику о блоках, предварительно загруженных во время восстановления. См. pg_stat_recovery_prefetch для получения подробной информации |
|
По крайней мере одна строка для каждой подписки, содержащая информацию о рабочих процессах подписки. См. pg_stat_subscription для получения подробной информации |
|
Одна строка для каждого соединения (обычного и репликации), показывающая информацию об использовании SSL в этом соединении. См. pg_stat_ssl для получения подробной информации |
|
Одна строка для каждого соединения (обычного и репликации), показывающая информацию об аутентификации GSSAPI и шифровании, используемом в этом соединении. См. pg_stat_gssapi для получения подробной информации |
|
Одна строка для каждого бэкенда (включая процессы рабочих процессов autovacuum), выполняющих |
|
Одна строка для каждого бэкенда, выполняющего |
|
Одна строка для каждого бэкенда (включая рабочие процессы автоочистки), выполняемые |
|
Одна строка для каждого бэкенда, выполняющего |
|
Одна строка для каждого процесса отправителя WAL, который передает базовую резервную копию, показывает текущий прогресс. См. раздел «Отслеживание выполнение базового копирования» |
|
Одна строка для каждого работающего бэкенда, показывающая текущий прогресс. См. раздел «Отслеживание выполнения COPY» |
Представления собранной статистики:
Имя представления |
Описание |
|---|---|
|
Только одна строка, показывающая статистику активности процесса архиватора WAL. См. pg_stat_archiver для получения подробной информации |
|
Только одна строка, показывающая статистику о активности процесса фонового писателя. См. pg_stat_bgwriter для получения подробной информации |
|
Только одна строка, отображающая статистику активности процесса контрольных точек. См. pg_stat_checkpointer для получения подробной информации |
|
Одна строка для каждой комбинации типа бекенда, контекста и целевого объекта, содержащая статистику ввода-вывода по всему кластеру. См. раздел |
|
Одна строка для каждого слота репликации, показывающая статистику использования слота репликации. См. раздел |
|
Одна строка для каждого SLRU, отображающая статистику операций. См. раздел |
|
Одна строка для каждой подписки, отображающая статистику ошибок. См. раздел |
|
Только одна строка, отображающая статистику активности WAL. См. раздел |
|
Одна строка на базу данных, отображающая статистические данные по всей базе данных. См. pg_stat_database для получения подробной информации |
|
Одна строка для каждой базы данных, отображающая статистику всей базы данных о запросах отмены из-за конфликта с восстановлением на резервных серверах. См. pg_stat_database_conflicts для получения подробной информации |
|
Одна строка для каждой таблицы в текущей базе данных, показывающая статистику о доступе к этой конкретной таблице. См. pg_stat_all_tables для получения подробной информации |
|
Аналогично |
|
Аналогично |
|
Похоже на |
|
Аналогично |
|
Аналогично |
|
Одна строка для каждого индекса в текущей базе данных, показывающая статистику доступа к этому конкретному индексу. См. pg_stat_all_indexes для получения подробной информации |
|
Аналогично |
|
Аналогично |
|
Одна строка для каждой отслеживаемой функции, отображающая статистику выполнения этой функции. См. раздел |
|
Аналогично |
|
Одна строка для каждой таблицы в текущей базе данных, показывающая статистику ввода-вывода для этой конкретной таблицы. См. pg_statio_all_tables для получения дополнительной информации |
|
Аналогично |
|
Аналогично |
|
Одна строка для каждого индекса в текущей базе данных, показывающая статистику ввода-вывода для этого конкретного индекса. См. pg_statio_all_indexes для получения подробной информации |
|
Аналогично |
|
Аналогично |
|
Одна строка для каждой последовательности в текущей базе данных, показывающая статистику ввода-вывода для этой конкретной последовательности. См. pg_statio_all_sequences для получения подробной информации |
|
То же самое, что и |
|
Аналогично |
Статистика по индексам особенно полезна для определения используемых индексов и их эффективности.
Наборы представлений pg_stat_io и pg_statio_ полезны для оценки эффективности кеша буферов. Их можно использовать для расчета коэффициента попадания в кеш. Обратите внимание, что хотя статистика операций ввода-вывода PostgreSQL фиксирует большинство случаев обращения ядра для выполнения операций ввода-вывода, она не различает данные, которые необходимо было получить с диска, и те, которые уже находились в кеше страниц ядра. Пользователям рекомендуется использовать представления статистики PostgreSQL в сочетании с утилитами операционной системы для получения более полной картины производительности ввода-вывода базы данных.
pg_stat_activity#
Представление pg_stat_activity содержит по одной строке для каждого серверного процесса, отображая информацию, относящуюся к текущей активности этого процесса.
Представление pg_stat_activity:
Тип столбца |
Описание |
|---|---|
|
Идентификатор OID базы данных, к которой подключен этот бэкенд |
|
Имя базы данных, к которой подключен этот бэкенд |
|
Идентификатор процесса этого бэкенда |
|
Идентификатор процесса лидера параллельной групп параллельных процессов, если этот процесс является исполнителем параллельного запроса, или идентификатор ведущего процесса применения изменений, если этот процесс является исполнителем параллельного применения. NULL указывает, что этот процесс является ведущим процессом в группе параллельных процессов или ведущим процессов применения изменений, или не участвует в каких-либо параллельных операциях. |
|
OID пользователя, вошедшего в этот бэкенд |
|
Имя пользователя, вошедшего в этот бэкенд |
|
Название приложения, которое подключено к этому бэкенду |
|
IP-адрес клиента, подключенного к этому бэкенду. Если это поле равно нулю, это указывает либо на то, что клиент подключен через сокет Unix на серверной машине, либо на то, что это внутренний процесс, такой как autovacuum |
|
Имя хоста подключенного клиента, о котором сообщает обратный поиск DNS |
|
Номер TCP-порта, который клиент использует для связи с этим бэкендом, или |
|
Время, когда этот процесс был запущен. Для клиентских бэкендов это время подключения клиента к серверу |
|
Время, когда текущая транзакция этого процесса была начата, или null, если транзакция не активна. Если текущий запрос является первым в своей транзакции, эта колонка равна колонке |
|
Время, когда был запущен текущий активный запрос, или если |
|
Время, когда |
|
Тип события, которого ожидает бэкенд, если есть; в противном случае NULL. См. «Типы событий ожидания» |
|
Имя события ожидания, если бэкенд в данный момент ожидает, иначе NULL. См. «События ожидания типа активности» и «События ожидания типа тайм-аута» |
|
Текущее общее состояние этого бэкенда. Возможные значения: |
|
Идентификатор транзакции верхнего уровня серверного процесса, если таковой имеется |
|
Горизонт текущего бэкенда |
|
Идентификатор последнего запроса этого бэкенда. Если |
|
Текст последнего запроса этого бэкенда. Если |
|
Тип текущего бэкенда. Возможные типы включают |
Примечание
Столбцы wait_event и state независимы друг от друга. Если бэкенд находится в состоянии active, он может быть или не быть waiting при наступлении определенного события. Если состояние равно active и wait_event не является нулевым значением, это означает, что выполняется запрос, но где-то в системе происходит блокировка.
Типы событий ожидания:
Тип события ожидания |
Описание |
|---|---|
|
Серверный процесс простаивает. Этот тип события указывает на ожидание активности в основном цикле обработки процесса. |
|
Серверный процесс ожидает исключительного доступа к буферу данных. Ожидания буферной булавки могут быть затянуты, если другой процесс удерживает открытый курсор, который последний раз читал данные из интересующего буфера. См. «События ожидания типа Буферная булавка» |
|
Серверный процесс ожидает активности на сокете, подключенном к пользовательскому приложению. Таким образом, сервер ожидает чего-то, что происходит независимо от его внутренних процессов. |
|
Серверный процесс ожидает какого-либо условия, определенного модулем расширения. См. «События ожидания типа расширения» |
|
Процесс сервера ожидает достижения точки инъекции результата, определенного в тесте. Для получения дополнительной информации см. раздел Точки инъекций. Данный тип не имеет предопределенных точек ожидания |
|
Серверный процесс ожидает завершения операции ввода-вывода. |
|
Серверный процесс ожидает некоторого взаимодействия с другим серверным процессом. |
|
Серверный процесс ожидает тяжелую блокировку. Тяжелые блокировки, также известные как блокировки менеджера блокировок или просто блокировки, в первую очередь защищают объекты SQL, такие как таблицы. Однако они также используются для обеспечения взаимного исключения при определенных внутренних операциях, таких как расширение отношения. |
|
Серверный процесс ожидает легкую блокировку. Большинство таких блокировок защищают определенную структуру данных в общей памяти. |
|
Серверный процесс ожидает истечения тайм-аута. |
События ожидания типа Activity:
События ожидания Activity |
Описание |
|---|---|
|
Ожидание в основном цикле процесса архиватора |
|
Ожидание в основном цикле процесса запуска автоочистки |
|
Ожидание в фоновом процессе записи, спящий режим |
|
Ожидание в основном цикле фонового процесса записи |
|
Ожидание в главном цикле процесса контрольной точки |
|
Ожидание в основном цикле процесса применения логической репликации |
|
Ожидание в основном цикле процесса запуска логической репликации |
|
Ожидание в основном цикле параллельного процесса применения логической репликации |
|
Ожидание в основном цикле процесса запуска для получения WAL во время потокового восстановления |
|
Ожидание в основном цикле рабочего процесса синхронизации слота |
|
Ожидание завершения работы рабочего процесса синхронизации слотов |
|
Ожидание в основном цикле процесса syslogger |
|
Ожидание в основном цикле процесса приемника WAL |
|
Ожидание в основном цикле процесса отправителя WAL |
|
Ожидание в резюмирующем журнале транзакций появления дополнительных записей журнала транзакций |
|
Ожидание в основном цикле процесса записи WAL |
События ожидания типа BufferPin:
События ожидания BufferPin |
Описание |
|---|---|
|
Ожидание получения эксклюзивной блокировки буфера |
События ожидания типа Client:
События ожидания Client |
Описание |
|---|---|
|
Ожидание чтения данных от клиента |
|
Ожидание записи данных клиенту |
|
Ожидание чтения данных от клиента при установлении сеанса GSSAPI |
|
Ожидание в приемнике WAL для установления соединения с удаленным сервером |
|
Ожидание в приемнике WAL получения данных от удаленного сервера |
|
Ожидание SSL во время попытки подключения |
|
Ожидание приема и сброса WAL физическим резервным сервером |
|
Ожидание завершения WAL в процессе отправки WAL |
|
Ожидание любой активности при обработке ответов от получателя WAL в процессе отправителя WAL |
События ожидания типа Extension:
События ожидания Extension |
Описание |
|---|---|
|
Ожидание в расширении |
События ожидания типа IO:
События ожидания IO |
Описание |
|---|---|
|
Ожидание резервного копирования базы для чтения из файла |
|
Ожидание записи данных, сделанной резервным копированием базы, на долговечное хранилище |
|
Ожидание резервного копирования базы для записи в файл |
|
Ожидание чтения из буферизованного файла |
|
Ожидание усечения буферизованного файла |
|
Ожидание записи в буферизованный файл |
|
Ожидание чтения из файла |
|
Ожидание достижения файлом |
|
Ожидание обновления файла |
|
Ожидание записи в файл |
|
Ожидание записи для обновления файла |
|
Ожидание чтения во время операции копирования файла |
|
Ожидание записи во время операции копирования файла |
|
Ожидание расширения файла данных отношения |
|
Ожидание достижения отношения файла данных к постоянному хранилищу |
|
Ожидание немедленной синхронизации файла данных отношения с постоянным хранилищем |
|
Ожидание асинхронной предварительной выборки из файла данных отношения |
|
Ожидание чтения из файла данных отношения |
|
Ожидание внесения изменений в файл отношения данных для достижения долговечного хранения |
|
Ожидание усечения файла данных отношения |
|
Ожидание записи в файл данных отношения |
|
Ожидание выделения сегмента динамической общей памяти |
|
Ожидание заполнения нулями файла, применяемого для поддержки динамической общей памяти |
|
Ожидание чтения при добавлении строки в файл блокировки каталога данных |
|
Ожидание достижения данными долговечного хранилища при добавлении строки в файл блокировки каталога данных |
|
Ожидание записи при добавлении строки в файл блокировки каталога данных |
|
Ожидание чтения при создании файла блокировки каталога данных |
|
Ожидание достижения данными долговечного хранилища при создании файла блокировки каталога данных |
|
Ожидание записи при создании файла блокировки каталога данных |
|
Ожидание чтения во время повторной проверки файла блокировки каталога данных |
|
Ожидание логических отображений перезаписи для достижения долговечного хранилища во время контрольной точки |
|
Ожидание данных сопоставления для достижения долговечного хранилища во время логической перезаписи |
|
Ожидание записи отображаемых данных во время логической перезаписи |
|
Ожидание достижения логическими отображениями перезаписываемого хранилища |
|
Ожидание усечения отображаемых данных во время логической перезаписи |
|
Ожидание записи логических отображений перезаписи |
|
Ожидание чтения файла карты отношений |
|
Ожидание надежной замены файла карты отношений |
|
Ожидание записи в файл карты отношений |
|
Ожидание чтения во время управления буфером переупорядочения |
|
Ожидание записи во время управления буфером переупорядочения |
|
Ожидание чтения логической карты во время управления буфером переупорядочения |
|
Ожидание чтения из файла управления репликационным слотом |
|
Ожидание достижения файлом управления репликационным слотом долговременного хранилища при его восстановлении в память |
|
Ожидание достижения файлом управления репликацией постоянного хранилища |
|
Ожидание записи в файл управления реплизацией |
|
Ожидание достижения данными SLRU постоянного хранилища во время контрольной точки или выключения базы данных |
|
Ожидание чтения страницы SLRU |
|
Ожидание достижения данными SLRU долговечного хранилища после записи страницы |
|
Ожидание записи страницы SLRU |
|
Ожидание чтения сериализованного исторического снимка каталога |
|
Ожидание достижения сериализованным историческим снимком каталога долговечного хранилища |
|
Ожидание записи моментального снимка исторического каталога в последовательной форме |
|
Ожидание файла истории временной шкалы, полученного через потоковую репликацию, для достижения долговременного хранилища |
|
Ожидание записи файла истории временной шкалы, полученного через потоковую репликацию |
|
Ожидание чтения файла истории временной шкалы |
|
Ожидание достижения новой созданной файл истории временной шкалы устойчивого хранилища |
|
Ожидание записи нового созданного файла истории временной шкалы |
|
Ожидая чтения файла состояния двухфазного режима |
|
Ожидание достижения файла состояния двухфазного режима устойчивого хранилища |
|
Ожидание записи файла состояния двухфазного режима |
|
Ожидание записи версионного файла во время создания базы данных |
|
Ожидание чтения из файла истории линии времени при обработки процессом walsender команды timeline |
|
Ожидание достижения WAL долговечного хранилища во время начальной загрузки |
|
Ожидание записи страницы WAL при начальной загрузке |
|
Ожидание чтения при создании нового сегмента WAL путем копирования существующего |
|
Ожидание достижения новым сегментом WAL, созданным путем копирования существующего, долговечного хранилища |
|
Ожидание записи при создании нового сегмента WAL путем копирования существующего |
|
Ожидание нового инициализированного файла WAL для достижения долговечного хранилища |
|
Ожидание записи при инициализации нового файла WAL |
|
Ожидание чтения из файла WAL |
|
Ожидание чтения из файла сводок WAL |
|
Ожидание записи в файл сводок WAL |
|
Ожидание достижения WAL-файлом долговечного хранилища |
|
Ожидание достижения данными долговечного хранилища при назначении нового метода синхронизации WAL |
|
Ожидание записи в файл WAL |
События ожидания типа IPC:
События ожидания IPC |
Описание |
|---|---|
|
Ожидание готовности подузлов плана |
|
Ожидание завершения команды archive_cleanup_command |
|
Ожидание завершения команды archive_command |
|
Ожидание завершения работы другого бэкенда |
|
Ожидание успешного архивирования WAL-файлов, необходимых для резервного копирования |
|
Ожидание завершения работы фоновой службы |
|
Ожидание запуска фоновой службы |
|
Ожидание номера страницы, необходимого для продолжения параллельного сканирования B-дерева |
|
Ожидание завершения ввода-вывода буфера |
|
Ожидание обслуживающего процесса, который блокирует завершение контрольной точки |
|
Ожидание обслуживающего процесса, который блокирует начало контрольной точки |
|
Ожидание завершения контрольной точки |
|
Ожидание начала контрольной точки |
|
Ожидание активности от дочернего процесса при выполнении узла плана |
|
Ожидание выбора участника параллельного хеширования для выделения хеш-таблицы |
|
Ожидание завершения загрузки хеш-таблицы другими участниками параллельного хеширования |
|
Ожидание выбранного участника параллельного хеширования для выделения начальной хеш-таблицы |
|
Ожидание выбора участника параллельного хеширования для выделения начальной хеш-таблицы |
|
Ожидание завершения хеширования внутренней связи другими участниками параллельного хеширования |
|
Ожидание завершения разбиения внешней связи другими участниками параллельного хеширования |
|
Ожидание выделения большего количества пакетов выбранным участником параллельного хеша |
|
Ожидание выбора участника параллельного хеширования для определения будущего роста пакета |
|
Ожидание выбора участника параллельного хеширования для выделения дополнительных пакетов |
|
Ожидание выбора участника параллельного хеширования для определения будущего роста пакета |
|
Ожидание выделения дополнительных пакетов выбранным участником параллельного хеширования |
|
Ожидание завершения перепартиционирования другими участниками параллельного хеширования |
|
Ожидание выборов участника параллельного хеширования для выделения дополнительных ведер |
|
Ожидание завершения выделения дополнительных групп выбранным участником параллельного хеширования |
|
Ожидание завершения добавления кортежей в новые группы другими участниками параллельного хеширования |
|
Ожидание отправки данных ведущим процессом применения изменений логической репликации параллельному процессу применения изменений |
|
Ожидание изменения состояния параллельного процесса применения изменений логической репликации |
|
Ожидание отправки логическим репликационным удаленным сервером данных для начальной синхронизации таблицы |
|
Ожидание изменения состояния логического репликационного удаленного сервера |
|
Ожидание подключения другого процесса к общей очереди сообщений |
|
Ожидание записи сообщения протокола в общую очередь сообщений |
|
Ожидание получения байтов из общей очереди сообщений |
|
Ожидание отправки байтов в общую очередь сообщений |
|
Ожидание завершения создания мультитранзакции |
|
Ожидание инициализации параллельного сканирования битовой карты |
|
Ожидание завершения параллельного сканирования кучи рабочими |
|
Ожидание завершения вычислений параллельными рабочими |
|
Ожидание очистки идентификатора транзакции лидером группы в конце параллельной операции |
|
Ожидание обработки события барьера всеми бэкендами |
|
Ожидание продвижения резервного копирования |
|
Ожидание разрешения конфликта восстановления для очистки вакуума |
|
Ожидание разрешения конфликта восстановления при удалении табличного пространства |
|
Ожидаем завершения команды recovery_end_command |
|
Ожидается возобновление восстановления |
|
Ожидание деактивации источника репликации для его удаления |
|
Ожидание деактивации слота репликации для его удаления |
|
Ожидание завершения команды restore_command |
|
Ожидание получения действительного снимка для транзакции |
|
Ожидание подтверждения от удаленного сервера во время синхронной репликации |
|
Ожидание завершения работы получателя WAL |
|
Ожидание процесса запуска для отправки начальных данных для потоковой репликации |
|
Ожидание создания новой сводки WAL |
|
Ожидание обновления статуса транзакции лидером группы в конце параллельной операции |
События ожидания типа Lock:
События ожидания Lock |
Описание |
|---|---|
|
Ожидание получения блокировки пользователя для консультации |
|
Ожидание получения блокировки для удаленной транзакции, применяемой подписчиком логической репликации |
|
Ожидание расширения отношения |
|
Ожидание обновления |
|
Ожидание получения блокировки для нереляционного объекта базы данных |
|
Ожидание получения блокировки страницы отношения |
|
Ожидание получения блокировки отношения |
|
Ожидание получения блокировки спекулятивного ввода |
|
Ожидание завершения транзакции |
|
Ожидание получения блокировки кортежа |
|
Ожидание получения пользовательской блокировки |
|
Ожидание получения блокировки виртуального идентификатора транзакции |
События ожидания типа LWLock:
События ожидания LWLock |
Описание |
|---|---|
|
Ожидание управления распределением пространства расширения в общей памяти |
|
Ожидание обновления файла |
|
Ожидание чтения или обновления текущего состояния рабочих процессов autovacuum |
|
Ожидание подтверждения того, что таблица, выбранная для автоновакуума, все еще нуждается в вакуумировании |
|
Ожидание чтения или обновления состояния фоновых рабочих процессов |
|
Ожидание чтения или обновления информации, связанной с вакуумированием, для индекса B-дерева |
|
Ожидание доступа к странице данных в памяти |
|
Ожидание связывания блока данных с буфером в пуле буферов |
|
Ожидание обработки запросов fsync |
|
Ожидание чтения или обновления последнего значения, установленного для метки времени фиксации транзакции |
|
Ожидание ввода-вывода для буфера SLRU с отметкой времени фиксации |
|
Ожидание доступа к кешу меток времени фиксации SLRU |
|
Ожидание чтения или обновления файла |
|
Ожидание при чтении или изменении реестра динамической общей памяти |
|
Ожидание при обращении к механизму управления памятью реестра динамической общей памяти |
|
Ожидание при обращении к общей хеш-таблице реестра динамической общей памяти |
|
Ожидание чтения или обновления информации о распределении динамической общей памяти |
|
Ожидание при чтении или изменении информации о точках внедрения |
|
Ожидание чтения или обновления информации о быстром замке процесса |
|
Ожидание чтения или обновления информации о блокировках «тяжелый вес» |
|
Ожидание выделения области динамической общей памяти для запуска логической репликации |
|
Ожидание доступа к общей хеш-таблице процесса запуска логической репликации |
|
Ожидание чтения или обновления состояния рабочих процессов логической репликации |
|
Ожидание чтения или обновления общего состояния мультитранзакции |
|
Ожидание ввода-вывода для буфера SLRU-члена мультитранзакции |
|
Ожидание доступа к кешу SLRU-членов мультитранзакций |
|
Ожидание ввода-вывода для буфера SLRU-смещения мультитранзакции |
|
Ожидание доступа к кешу смещения multixact |
|
Ожидание чтения или усечения информации о multixact |
|
Ожидание ввода-вывода для буфера SLRU сообщения |
|
Ожидание чтения или обновления сообщений |
|
Ожидание обновления ограничения на хранилище сообщений |
|
Ожидание доступа к кешу SLRU сообщения |
|
Ожидание выделения нового OID |
|
Ожидание выбора следующего подплана во время выполнения плана параллельного присоединения |
|
Ожидание синхронизации рабочих процессов во время выполнения плана параллельного хеш-соединения |
|
Ожидание динамического выделения общей памяти для параллельных запросов |
|
Ожидание выделения динамической общей памяти для параллельной очистки |
|
Ожидание динамического выделения общей памяти для параллельных запросов |
|
Ожидание доступа к информации о составных типах параллельного запроса |
|
Ожидание доступа к информации о модификаторах типов параллельного запроса, которые идентифицируют анонимные типы записей |
|
Ожидание доступа к списку блокировок предикатов, удерживаемых текущей транзакцией с сериализацией во время параллельного запроса |
|
Ожидание доступа к данным статистики в общей памяти |
|
Ожидание выделения области динамической общей памяти для статистики |
|
Ожидание доступа к хеш-таблице статистики в общей памяти |
|
Ожидание доступа к информации о блокировке предикатов, используемой транзакциями с сериализацией |
|
Ожидание доступа к общим структурам данных для каждого процесса (обычно для получения моментального снимка или сообщения идентификатора транзакции сеанса) |
|
Ожидание чтения или обновления файла |
|
Ожидание чтения или обновления файла инициализации кеша отношений |
|
Ожидание создания, удаления или использования источника репликации |
|
Ожидание чтения или обновления хода одного источника репликации |
|
Ожидание выделения или освобождения слота репликации |
|
Ожидание чтения или обновления состояния слота репликации |
|
Ожидание ввода-вывода для слота репликации |
|
Ожидание ввода-вывода для буфера SLRU конфликта транзакций с сериализацией |
|
Ожидание при чтении или изменении общего состояния pg_serial |
|
Ожидание доступа к списку завершенных сериализуемых транзакций |
|
Ожидание доступа к списку блокировок предикатов, удерживаемых сериализуемыми транзакциями |
|
Ожидание чтения или обновления информации о сериализуемых транзакциях |
|
Ожидание доступа к кешу конфликтных ситуаций сериализуемых транзакций SLRU |
|
Ожидание доступа к общей карте бит TID во время параллельного сканирования индекса битовой карты |
|
Ожидание доступа к общему хранилищу кортежей во время параллельного запроса |
|
Ожидание поиска или выделения места в общей памяти |
|
Ожидание получения сообщений из общей очереди недействительных каталогов |
|
Ожидание добавления сообщения в общую очередь недействительных каталогов |
|
Ожидание ввода-вывода для буфера SLRU под транзакции |
|
Ожидание доступа к кешу SLRU под транзакций |
|
Ожидание чтения или обновления информации о состоянии синхронной репликации |
|
Ожидание выбора начальной позиции для сканирования синхронизированной таблицы |
|
Ожидание создания или удаления табличного пространства |
|
Ожидание чтения или обновления состояния подготовленных транзакций |
|
Ожидание при чтении или изменении информации о пользовательских событиях ожидания |
|
Ожидание замены страницы в буферах WAL |
|
Ожидание вставки данных WAL в буфер памяти |
|
Ожидание при чтении или изменении состояния процесса создания сводок WAL |
|
Ожидание записи буферов WAL на диск |
|
Ожидание обновления ограничений на использование идентификаторов транзакций и мультитранзакций |
|
Ожидание ввода-вывода для буфера SLRU состояния транзакции |
|
Ожидание доступа к кешу состояния транзакции SLRU |
|
Ожидание выполнения |
|
Ожидание выделения нового идентификатора транзакции |
События ожидания типа Timeout:
События ожидания Timeout |
Описание |
|---|---|
|
Ожидание во время базовой резервной копии при ограничении активности |
|
Ожидание между записями при выполнении контрольной точки |
|
Ожидание из-за вызова функции |
|
Ожидание применения WAL во время восстановления из-за настройки задержки |
|
Ожидание во время восстановления, когда данные WAL недоступны ни из одного источника ( |
|
Ожидание при отправке запросов синхронизации контрольной точке, потому что очередь запросов заполнена |
|
Ожидание получения конкурирующей циклической блокировки |
|
Ожидание в точке задержки вакуума на основе затрат |
|
Ожидание получения эксклюзивной блокировки для удаления любых пустых страниц в конце таблицы, очищенной пылесосом |
|
Ожидание после ошибки процесса создания сводок 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:
Тип столбца |
Описание |
|---|---|
|
Идентификатор процесса отправителя WAL |
|
Идентификатор пользователя, вошедшего в этот процесс отправителя WAL |
|
Имя пользователя, вошедшего в этот процесс отправителя WAL |
|
Имя приложения, подключенного к этому отправителю WAL |
|
IP-адрес клиента, подключенного к этому отправителю WAL. Если это поле равно нулю, это означает, что клиент подключен через сокет Unix на серверной машине |
|
Имя хоста подключенного клиента, о котором сообщает обратный поиск DNS |
|
Номер порта TCP, который клиент использует для связи с этим отправителем WAL, или |
|
Время, когда этот процесс был запущен, т.е. когда клиент подключился к этому отправителю WAL |
|
Этот горизонт резервного копирования, о котором сообщает hot_standby_feedback |
|
Текущее состояние отправителя WAL. Возможные значения: |
|
Последнее местоположение журнала опережающей записи, отправленное этим подключением |
|
Последнее местоположение журнала опережающей записи, записанное на диск этим сервером-резервной копией |
|
Последнее местоположение журнала опережающей записи, очищенное на диске этим сервером-резервной копией |
|
Последнее местоположение журнала записи с опережением, воспроизведенное в базе данных на этом сервере-резервной копии |
|
Время, прошедшее между локальной очисткой последнего WAL и получением уведомления о том, что этот резервный сервер записал его (но еще не очистил или применил его). Это можно использовать для оценки задержки, которую уровень |
|
Время, прошедшее между локальной очисткой последнего WAL и получением уведомления о том, что этот резервный сервер записал и очистил его (но еще не применил его). Это можно использовать для оценки задержки, которую уровень |
|
Время, прошедшее между локальной очисткой последнего WAL и получением уведомления о том, что этот резервный сервер записал, очистил и применил его. Это можно использовать для оценки задержки, которую уровень |
|
Приоритет этого резервного сервера для выбора в качестве синхронного резерва в репликации на основе приоритета. Это не влияет на репликацию на основе кворума |
|
Синхронное состояние этого резервного сервера. Возможные значения: |
|
Время отправки последнего полученного сообщения ответа от резервного сервера |
Время задержки, о котором сообщается в представлении pg_stat_replication, является измерениями времени, затраченного на запись, очистку и воспроизведение последней WAL, а также на то, чтобы отправитель узнал об этом. Эти времена представляют задержку фиксации, которая была бы введена каждым уровнем синхронной фиксации, если бы удаленный сервер был настроен как синхронная резервная копия. Для асинхронной резервной копии столбец replay_lag приблизительно оценивает задержку перед тем, как последние транзакции стали видны запросам. Если резервный сервер полностью догнал сервер-отправитель и больше нет активности WAL, последнее время измерения задержки будет отображаться короткое время, а затем покажет NULL.
Задержки времени работы работают автоматически для физической репликации. Плагины логического декодирования могут дополнительно отправлять сообщения отслеживания; если они этого не делают, механизм отслеживания просто отобразит нулевую задержку.
Примечание
Сообщаемые времена задержки не являются прогнозами того, сколько времени потребуется резервной копии, чтобы догнать сервер отправки при текущей скорости воспроизведения. Такая система будет показывать аналогичные значения во время генерации нового WAL, но будет отличаться, когда отправитель становится неактивным. В частности, когда резервная копия полностью догоняет, pg_stat_replication показывает время, затраченное на запись, очистку и повторное воспроизведение самого последнего известного местоположения WAL, а не ноль, как могли бы ожидать некоторые пользователи. Это согласуется с целью измерения задержек синхронного подтверждения и видимости транзакций для недавних операций записи. Чтобы уменьшить путаницу у пользователей, ожидающих другой модели отставания, столбцы отставания возвращаются к NULL после короткого периода простоя на полностью воспроизведенной системе. Системы мониторинга должны выбирать, представлять ли это как отсутствующие данные, ноль или продолжать отображать последнее известное значение.
pg_stat_replication_slots#
Представление содержит одну строку для каждого логического слота репликации, показывая статистику об его использовании.
Представление pg_stat_replication_slots:
Тип столбца |
Описание |
|---|---|
|
Уникальный идентификатор репликационного слота для всего кластера |
|
Количество транзакций, которые были сброшены на диск после того, как объем памяти, используемый логическим декодированием для декодирования изменений из WAL, превысил |
|
Количество раз, когда транзакции были сброшены на диск при декодировании изменений из WAL для этого слота. Этот счетчик увеличивается каждый раз, когда происходит сброс транзакции, и одна и та же транзакция может быть сброшена несколько раз |
|
Объем декодированных транзакционных данных, сброшенных на диск при выполнении декодирования изменений из WAL для этого слота. Этот и другие счетчики сброса могут использоваться для оценки ввода-вывода, который произошел во время логического декодирования, и позволяют настраивать |
|
Количество незавершенных транзакций, переданных на выходной плагин декодирования после того, как память, используемая логическим декодированием для декодирования изменений из WAL для этого слота, превысила |
|
Количество раз, когда незавершенные транзакции передавались на выходной плагин декодирования при декодировании изменений из WAL для этого слота. Этот счетчик увеличивается каждый раз, когда передается транзакция, и одна и та же транзакция может быть передана несколько раз |
|
Объем данных транзакции, декодированной для потоковой передачи незавершенных транзакций на выходной плагин декодирования при декодировании изменений из WAL для этого слота. Эти и другие показатели потоковой передачи для этого слота можно использовать для настройки |
|
Количество декодированных транзакций, отправленных в плагин вывода декодирования для этого слота. Это учитывает только транзакции верхнего уровня и не увеличивается для под транзакций. Обратите внимание, что это включает транзакции, которые транслируются и/или проливаются |
|
Объем данных о транзакциях, декодируемых при отправке транзакций в плагин вывода декодирования во время декодирования изменений из WAL для этого слота. Обратите внимание, что это включает данные, которые транслируются и/или проливаются |
|
Время, когда эти статистические данные были сброшены последний раз |
pg_stat_wal_receiver#
Представление содержит только одну строку, отображающую статистику о приемнике WAL с подключенного к нему сервера.
Представление pg_stat_wal_receiver:
Тип столбца |
Описание |
|---|---|
|
Идентификатор процесса получателя WAL |
|
Статус активности процесса получателя WAL |
|
Первая позиция журнала опережающей записи, используемая при запуске получателя WAL |
|
Первый номер временной шкалы, используемый при запуске приемника WAL |
|
Последнее местоположение журнала опережающей записи уже получено и записано на диск, но еще не очищено. Это не должно использоваться для проверок целостности данных |
|
Последнее местоположение журнала опережающей записи уже получено и очищено с диска, начальное значение этого поля является первым местоположением журнала, используемым при запуске приемника WAL |
|
Номер временной шкалы последнего местоположения журнала опережающей записи, полученного и очищенного на диске, начальным значением которого является номер временной шкалы первого местоположения журнала, используемого при запуске приемника WAL |
|
Время отправки последнего сообщения, полученного от отправителя журнала WAL происхождения |
|
Время получения последнего сообщения, полученного от отправителя журнала WAL происхождения |
|
Последнее местоположение журнала опережающей записи, о котором сообщалось отправителю журнала WAL происхождения |
|
Время последней записи местоположения журнала опережающей записи, сообщенной отправителю журнала WAL происхождения |
|
Имя репликационного слота, используемое этим получателем WAL |
|
Хост экземпляра PostgreSQL, к которому подключен этот получатель WAL. Это может быть имя хоста, IP-адрес или путь к каталогу, если подключение осуществляется через сокет Unix. (Случай пути можно отличить потому, что это всегда будет абсолютный путь, начинающийся с |
|
Номер порта экземпляра PostgreSQL, к которому подключен этот получатель WAL |
|
Строка подключения, используемая этим получателем WAL, с зашифрованными полями безопасности |
pg_stat_recovery_prefetch#
Представление pg_stat_recovery_prefetch содержит только одну строку. Столбцы wal_distance, block_distance и io_depth показывают текущие значения, а остальные столбцы отображают кумулятивные счетчики, которые могут быть сброшены с помощью функции pg_stat_reset_shared.
Представление pg_stat_recovery_prefetch:
Тип столбца |
Описание |
|---|---|
|
Время, когда эти статистические данные были сброшены последний раз |
|
Количество блоков, которые были предварительно выбраны, потому что они не находились в буферном пуле |
|
Количество блоков, которые не были предварительно выбраны, потому что они уже находились в буферном пуле |
|
Количество блоков, которые не были предварительно выбраны, поскольку они будут обнулены |
|
Количество блоков, которые не были предварительно выбраны, так как их еще не существовало |
|
Количество блоков, которые не были предварительно выбраны из-за того, что полное изображение страницы было включено в WAL |
|
Количество блоков, которые не были предварительно выбраны, потому что они уже были недавно предварительно выбраны |
|
На сколько байт вперед смотрит предварительный выборщик |
|
Сколько блоков впереди просматривает предварительный выборщик |
|
Сколько предварительных выборок было инициировано, но еще неизвестно, завершились ли они |
pg_stat_subscription#
Представление pg_stat_subscription:
Тип столбца |
Описание |
|---|---|
|
Идентификатор OID подписки |
|
Имя подписки |
|
Тип рабочего процесса подписки. Возможные варианты: apply, parallel apply и table synchronize |
|
Идентификатор рабочего процесса, обслуживающего подписку |
|
Идентификатор ведущего рабочего процесса применения, если этот процесс является параллельным рабочим процессом применения; NULL, если этот процесс является ведущим процессом применения изменений или рабочим процессом синхронизации таблиц |
|
OID отношения, которое синхронизирует рабочий процесс; нулевое значение для основного рабочего процесса apply |
|
Последнее полученное местоположение журнала записи вперед, начальное значение этого поля равно 0 |
|
Время отправки последнего сообщения, полученного от отправителя журнала WAL происхождения |
|
Время получения последнего сообщения, полученного от отправителя журнала WAL происхождения |
|
Последнее местоположение журнала опережающей записи, о котором сообщалось отправителю журнала WAL происхождения |
|
Время последней записи местоположения журнала опережающей записи, сообщенной отправителю журнала WAL происхождения |
pg_stat_subscription_stats#
Представление содержит одну строку для каждой подписки.
Представление pg_stat_subscription_stats:
Тип столбца |
Описание |
|---|---|
|
Идентификатор OID подписки |
|
Имя подписки |
|
Количество раз, когда произошла ошибка при применении изменений |
|
Количество раз, когда произошла ошибка во время начальной синхронизации таблицы |
|
Время, когда эти статистические данные были сброшены последний раз |
pg_stat_ssl#
Представление pg_stat_ssl содержит одну строку для каждого процесса бэкенда или отправителя WAL, показывая статистику об использовании SSL в этом соединении. Оно может быть объединено с pg_stat_activity или pg_stat_replication по столбцу pid, чтобы получить более подробную информацию о подключении.
Представление pg_stat_ssl:
Тип столбца |
Описание |
|---|---|
|
Идентификатор процесса бэкенда или процесса отправителя WAL |
|
Истина, если SSL используется для этого соединения |
|
Версия SSL, используемая в данный момент, или NULL, если SSL не используется для этого соединения |
|
Имя шифра SSL, используемого в данный момент, или NULL, если SSL не используется для этого соединения |
|
Количество битов в алгоритме шифрования, используемом для этой связи, или NULL, если SSL не используется |
|
Поле имени (DN) из клиентского сертификата, используемого для этой связи, или NULL, если клиентский сертификат не был предоставлен или если SSL не используется для этой связи. Это поле усекается, если поле DN длиннее |
|
Серийный номер клиентского сертификата или NULL, если клиентский сертификат не был предоставлен или если SSL не используется для этой связи. Комбинация серийного номера сертификата и выдавшего его органа однозначно идентифицирует сертификат (если орган, выдающий сертификаты, ошибочно повторно использует серийные номера) |
|
DN органа, выдавшего клиентский сертификат, или NULL, если клиентский сертификат не был предоставлен или если SSL не используется для этой связи. Это поле усекается так же, как |
pg_stat_gssapi#
Представление pg_stat_gssapi содержит одну строку для каждого бэкенда, отображая информацию об использовании GSSAPI в этом соединении. Оно может быть объединено с pg_stat_activity или pg_stat_replication по столбцу pid, чтобы получить более подробную информацию о соединении.
Представление pg_stat_gssapi:
Тип столбца |
Описание |
|---|---|
|
Идентификатор процесса фонового режима |
|
|
|
Главный принцип, используемый для аутентификации этого соединения, или NULL, если GSSAPI не использовался для аутентификации этого соединения. Это поле усекается, если главный принцип длиннее, чем |
|
|
|
|
pg_stat_archiver#
Представление всегда будет иметь одну строку, содержащую данные о процессе архивирования кластера.
Представление pg_stat_archiver:
Тип столбца |
Описание |
|---|---|
|
Количество файлов WAL, которые были успешно заархивированы |
|
Имя файла WAL, который был успешно заархивирован последним |
|
Время последней успешной операции архивирования |
|
Количество неудачных попыток архивирования файлов WAL |
|
Имя файла WAL последней неуспешной операции архивирования |
|
Время последней неуспешной операции архивирования |
|
Время, когда эти статистические данные были сброшены последний раз |
Обычно файлы WAL архивируются в порядке от самого старого к самому новому, но это не гарантируется и не выполняется при особых обстоятельствах, таких как продвижение резервной копии или после восстановления после сбоя. Поэтому небезопасно предполагать, что все файлы старше last_archived_wal также были успешно заархивированы.
pg_stat_io#
Представлениие pg_stat_io содержит по одной строке со статистикой ввода-вывода на уровне кластера для каждой комбинации типа обслуживающего процесса, целевого объекта ввода-вывода и контекста ввода-вывода. Комбинации, не имеющие смысла, исключаются.
В настоящее время отслеживаются операции ввода-вывода для отношений (например, таблиц, индексов). Однако операции ввода-вывода для отношений, которые не используют буферный кеш (например, при перемещении таблицы из одного табличного пространства в другое), в настоящее время не отслеживаются.
Представление pg_stat_io:
Тип столбца |
Описание |
|---|---|
|
Количество запланированных контрольных точек, которые были выполнены |
|
Количество запрошенных контрольных точек, которые были выполнены |
|
Общее время, затраченное на часть обработки контрольной точки, когда файлы записываются на диск, в миллисекундах |
|
Общее время, затраченное на часть процесса контрольной точки, когда файлы синхронизируются с диском, в миллисекундах |
|
Количество буферов, записанных во время контрольных точек |
|
Количество буферов, записанных фоновым писателем |
|
Количество раз, когда фоновая запись остановила сканирование очистки из-за того, что было записано слишком много буферов |
|
Количество буферов, записанных непосредственно бэкендом |
|
Количество раз, когда бэкенд должен был выполнить свой собственный вызов |
|
Количество выделенных буферов |
|
Время, когда эти статистические данные были сброшены последний раз |
Некоторые типы серверных процессов никогда не выполняют операции ввода-вывода над некоторыми объектами ввода-вывода и/или в некоторых контекстах ввода-вывода. Такие строки исключаются из представления. Например, контрольная точка не фиксирует временные таблицы, поэтому не будет строк для 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
Тип колонки |
Описание |
|---|---|
|
Количество буферов, записанных фоновым писателем |
|
Количество остановок очистки из-за записи слишком большого числа буферов |
|
Количество выделенных буферов |
|
Время последнего сброса статистики |
pg_stat_wal#
Представление pg_stat_wal всегда имеет одну строку, содержащую данные об активности WAL кластера.
Представление pg_stat_wal:
Тип столбца |
Описание |
|---|---|
|
Общее количество записей WAL, сгенерированных |
|
Общее количество полностраничных изображений WAL, сгенерированных |
|
Общий объем WAL, сгенерированный в байтах |
|
Количество раз, когда данные WAL записывались на диск из-за того, что буферы WAL заполнялись |
|
Количество раз, когда буферы WAL были записаны на диск через |
|
Количество раз, когда файлы WAL синхронизировались с диском через |
|
Общее время записи буферов WAL на диск через запрос |
|
Общее время синхронизации файлов WAL с диском через запрос |
|
Время, когда эти статистические данные были сброшены последний раз |
pg_stat_database#
Представление содержит одну строку для каждой базы данных в кластере, плюс одну для общих объектов, отображающих статистику для всей базы данных.
Представление pg_stat_database:
Тип столбца |
Описание |
|---|---|
|
Идентификатор OID этой базы данных или 0 для объектов, принадлежащих общей связи |
|
Имя этой базы данных или |
|
Количество бэкендов, в данный момент подключенных к этой базе данных, или |
|
Количество транзакций в этой базе данных, которые были подтверждены |
|
Количество транзакций в этой базе данных, которые были отменены |
|
Количество блоков диска, прочитанных в этой базе данных |
|
Количество раз, когда блоки диска уже находились в буферном кеше, так что чтение не потребовалось (это включает только попадания в кеш буфера PostgreSQL, а не в кеш файловой системы операционной системы) |
|
Количество активных строк, извлеченных последовательными сканированиями и индексными записями, возвращенными индексными сканированиями в этой базе данных |
|
Количество активных строк, извлеченных индексными сканированиями в этой базе данных |
|
Количество строк, вставленных запросами в эту базу данных |
|
Количество строк, обновленных запросами в этой базе данных |
|
Количество строк, удаленных запросами в этой базе данных |
|
Количество запросов, отмененных из-за конфликтов с восстановлением в этой базе данных. Конфликты возникают только на резервных серверах, см. pg_stat_database_conflicts для получения подробной информации |
|
Количество временных файлов, созданных запросами в этой базе данных. Все временные файлы учитываются независимо от причины создания временного файла (например, сортировка или хеширование) и независимо от настройки log_temp_files |
|
Общее количество данных, записанных во временные файлы запросами в этой базе данных. Все временные файлы учитываются независимо от причины создания временного файла и независимо от настройки log_temp_files |
|
Количество тупиков, обнаруженных в этой базе данных |
|
Количество сбоев контрольной суммы страниц данных, обнаруженных в этой базе данных (или в общем объекте), или NULL, если контрольные суммы данных не включены |
|
Время последнего сбоя контрольной суммы страницы данных, обнаруженного в этой базе данных (или в общем объекте), или NULL, если контрольные суммы данных не включены |
|
Время, затраченное бэкендами этой базы данных на чтение блоков данных файла, в миллисекундах (если включено track_io_timing, иначе ноль) |
|
Время, затраченное бэкендами этой базы данных на запись блоков данных файла, в миллисекундах (если включено track_io_timing, иначе ноль) |
|
Время, проведенное сеансами баз данных в этой базе данных, в миллисекундах (обратите внимание, что статистика обновляется только при изменении состояния сеанса, поэтому если сеансы были неактивны долгое время, это время простоя не будет учтено) |
|
Время выполнения SQL-предложений в этой базе данных в миллисекундах (это соответствует состояниям |
|
Время простоя при выполнении транзакции в этой базе данных в миллисекундах (это соответствует состояниям |
|
Общее количество сеансов, установленных для этой базы данных |
|
Количество сеансов работы с базой данных для этой базы данных, которые были завершены из-за потери соединения с клиентом |
|
Количество сеансов работы с базой данных для этой базы данных, которые были завершены из-за фатальных ошибок |
|
Количество сеансов работы с базой данных для этой базы данных, которые были завершены вмешательством оператора |
|
Время, когда эти статистические данные были сброшены последний раз |
pg_stat_database_conflicts#
Представление pg_stat_database_conflicts содержит одну строку для каждой базы данных, отображая статистику всей базы данных о прерывании запросов из-за конфликтов с восстановлением на резервных серверах. Это представление содержит информацию только о резервных серверах, поскольку конфликты не возникают на основных серверах.
Представление pg_stat_database_conflicts:
Тип столбца |
Описание |
|---|---|
|
Идентификатор объекта базы данных |
|
Имя этой базы данных |
|
Количество запросов в этой базе данных, которые были отменены из-за удаленных табличных пространств |
|
Количество запросов в этой базе данных, которые были отменены из-за тайм-аутов блокировки |
|
Количество запросов в этой базе данных, которые были отменены из-за старых снимков |
|
Количество запросов в этой базе данных, которые были отменены из-за закрепленных буферов |
|
Количество запросов в этой базе данных, которые были отменены из-за взаимоблокировок |
|
Количество использований логических слотов в этой базе данных, отмененных из-за старых снимков или слишком низкого значения |
pg_stat_all_tables#
Представление pg_stat_all_tables содержит одну строку для каждой таблицы в текущей базе данных (включая таблицы TOAST), показывая статистику о доступе к этой конкретной таблице. Представления pg_stat_user_tables и pg_stat_sys_tables содержат ту же информацию, но отфильтрованную таким образом, чтобы отображались только пользовательские и системные таблицы соответственно.
Представление pg_stat_all_tables:
Тип столбца |
Описание |
|---|---|
|
OID таблицы |
|
Имя схемы, в которой находится эта таблица |
|
Имя этой таблицы |
|
Количество последовательных сканирований, инициированных для этой таблицы |
|
Время последнего последовательного сканирования этой таблицы, исходя из времени последней остановки транзакции |
|
Количество активных строк, извлеченных с помощью последовательных сканирований |
|
Количество инициированных сканирований индекса в этой таблице |
|
Время последнего последовательного сканирования индекса этой таблицы, исходя из времени последней остановки транзакции |
|
Количество активных строк, извлеченных с помощью индексных сканирований |
|
Количество вставленных строк |
|
Количество обновленных строк (включая обновленные строки HOT) |
|
Количество измененных строк с переходом новой версии строки на новую страницу кучи, оставляющих после себя исходную версию с полем |
|
Количество удаленных строк |
|
Количество строк HOT обновлено (т.е. без необходимости отдельного обновления индекса) |
|
Оцениваемое количество активных строк |
|
Оцениваемое количество неактивных строк |
|
Оцениваемое количество строк, измененных с момента последнего анализа этой таблицы |
|
Оцениваемое количество строк, вставленных после последней очистки этой таблицы |
|
Последнее время, когда эта таблица была вручную очищена (не считая |
|
Последнее время, когда эта таблица была очищена демоном автозачистки |
|
Последнее время, когда эта таблица была проанализирована вручную |
|
Последнее время, когда эта таблица была проанализирована демоном автозачистки |
|
Количество раз, когда эта таблица была вручную очищена (не считая |
|
Количество раз, когда эта таблица была очищена демоном автозачистки |
|
Количество раз, когда эта таблица была проанализирована вручную |
|
Количество раз, когда эта таблица была проанализирована демоном автозачистки |
pg_stat_all_indexes#
Представление pg_stat_all_indexes содержит одну строку для каждого индекса в текущей базе данных, показывая статистику о доступе к этому конкретному индексу. Представления pg_stat_user_indexes и pg_stat_sys_indexes содержат ту же информацию, но отфильтрованную таким образом, чтобы показывать только пользовательские и системные индексы соответственно.
Представление pg_stat_all_indexes:
Тип столбца |
Описание |
|---|---|
|
OID таблицы для этого индекса |
|
OID этого индекса |
|
Имя схемы, к которой относится этот индекс |
|
Имя таблицы для этого индекса |
|
Имя этого индекса |
|
Количество сканирований индекса, инициированных для этого индекса |
|
Время последнего сканирования этого индекса, исходя из времени последней остановки транзакции |
|
Количество записей индекса, возвращаемых при сканировании этого индекса |
|
Количество активных строк таблицы, извлеченных простыми индексными сканированиями с использованием этого индекса |
Индексы могут использоваться простыми индексными сканированиями, «битовыми» индексными сканированиями и оптимизатором. В битовой выборке выходные данные нескольких индексов могут быть объединены с помощью правил ИЛИ или ИЛИ, поэтому трудно связать отдельные выборки строк кучи с конкретными индексами при использовании битового сканирования. Поэтому битовый сканер увеличивает счетчик(ы) 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:
Тип столбца |
Описание |
|---|---|
|
OID таблицы |
|
Имя схемы, в которой находится эта таблица |
|
Имя этой таблицы |
|
Количество дисковых блоков, прочитанных из этой таблицы |
|
Количество попаданий буфера в этой таблице |
|
Количество блоков диска, прочитанных из всех индексов в этой таблице |
|
Количество попаданий буфера во все индексы в этой таблице |
|
Количество блоков диска, прочитанных из таблицы TOAST этой таблицы (если есть) |
|
Количество попаданий буфера в этой таблице TOAST (если есть) |
|
Количество блоков диска, прочитанных из индексов таблицы TOAST этой таблицы (если есть) |
|
Количество попаданий буфера в индексах таблицы TOAST этой таблицы (если есть) |
pg_statio_all_indexes#
Представление содержит одну строку для каждого индекса в текущей базе данных, показывая статистику о вводе-выводе для этого конкретного индекса. Представления pg_statio_user_indexes и pg_statio_sys_indexes содержат ту же информацию, но отфильтрованную только для отображения пользовательских и системных индексов соответственно.
Представление pg_statio_all_indexes:
Тип столбца |
Описание |
|---|---|
|
OID таблицы для этого индекса |
|
OID этого индекса |
|
Имя схемы, к которой относится этот индекс |
|
Имя таблицы для этого индекса |
|
Имя этого индекса |
|
Количество блоков диска, прочитанных из этого индекса |
|
Количество попаданий буфера в этом индексе |
pg_statio_all_sequences#
Представление pg_statio_all_sequences содержит одну строку для каждой последовательности в текущей базе данных, показывая статистику о вводе-выводе для этой конкретной последовательности.
Представление pg_statio_all_sequences:
Тип столбца |
Описание |
|---|---|
|
OID последовательности |
|
Имя схемы, в которой находится эта последовательность |
|
Название этой последовательности |
|
Количество блоков диска, прочитанных из этой последовательности |
|
Количество попаданий буфера в этой последовательности |
pg_stat_user_functions#
Представление содержит одну строку для каждой отслеживаемой функции, показывая статистику об исполнении этой функции. Параметр track_functions контролирует, какие именно функции отслеживаются.
Представление pg_stat_user_functions:
Тип столбца |
Описание |
|---|---|
|
Идентификатор функции OID |
|
Имя схемы, к которой относится эта функция |
|
Имя этой функции |
|
Количество раз, когда эта функция была вызвана |
|
Общее время, затраченное на эту функцию и все другие функции, вызванные ею, в миллисекундах |
|
Общее время, затраченное на саму эту функцию, не включая другие вызываемые ей функции, в миллисекундах |
pg_stat_slru#
PostgreSQL получает доступ к определенной информации на диске через SLRU (простые кеши недавно использованных страниц). Представление pg_stat_slru содержит одну строку для каждого отслеживаемого кеша SLRU, показывая статистику доступа к кешированным страницам.
Для каждого SLRU-кеша, входящего в состав ядра сервера, существует параметр конфигурации, который управляет его размером, с добавленным суффиксом _buffers.
Представление pg_stat_slru:
Тип столбца |
Описание |
|---|---|
|
Имя SLRU |
|
Количество блоков, обнуленных во время инициализации |
|
Количество раз, когда дисковые блоки уже были найдены в SLRU, так что чтение не было необходимо (это включает только попадания в SLRU, а не кеш файловой системы операционной системы) |
|
Количество блоков диска, прочитанных для этого SLRU |
|
Количество блоков диска, записанных для этого SLRU |
|
Количество блоков, проверенных на наличие для этого SLRU |
|
Количество операций очистки поврежденных данных для этого SLRU |
|
Количество усечений для этого SLRU |
|
Время, когда эти статистические данные были сброшены последний раз |
Функции статистики#
Другие способы просмотра статистики могут быть настроены путем написания запросов, которые используют те же основные статистические функции доступа, что и стандартные представления, показанные выше. Для получения подробной информации, такой как имена функций, обратитесь к определениям стандартных представлений. (Например, в psql можно ввести \d+ pg_stat_activity.) Функции доступа для статистики по базам данных принимают OID базы данных в качестве аргумента для идентификации базы данных, о которой следует сообщить. Функции для таблиц и индексов принимают таблицу или индекс OID. Функции для статистики по функциям принимают идентификатор функции. Обратите внимание, что с помощью этих функций можно увидеть только таблицы, индексы и функции в текущей базе данных.
Дополнительные функции, связанные с системой накопительной статистики, перечислены в таблице «Дополнительные функции статистики».
Дополнительные статистические функции:
Функция |
Описание |
|---|---|
|
Возвращает идентификатор процесса серверного процесса, прикрепленного к текущей сессии. |
|
Возвращает запись информации о бэкенде с указанным идентификатором процесса или одну запись для каждого активного бэкенда в системе, если указано |
|
Возвращает отметку времени текущего снимка статистики или значение NULL, если снимок статистики еще не был сделан. |
|
Возвращает число запросов чтения блоков таблицы или индекса в текущей транзакции. Фактическое количество физических чтений обычно ниже из-за буферизации на уровне ядра. |
|
Возвращает число запросов чтения блоков таблицы или индекса в текущей транзакции, найденных в кеше (не вызывающих обращений к ядру |
|
Удаляет текущий снимок статистики или кешированную информацию. |
|
Сбрасывает все счетчики статистики для текущей базы данных до нуля. Эта функция по умолчанию ограничена суперпользователями. |
|
Сбрасывает некоторые глобальные счетчики кластера до нуля в зависимости от аргумента. Эта функция по умолчанию ограничена суперпользователями. |
|
Сбрасывает статистику для отдельной таблицы или индекса в текущей базе данных или совместно используемую всеми базами данных в кластере до нуля. |
|
Сбрасывает статистику для отдельной функции в текущей базе данных до нуля. Эта функция по умолчанию ограничена суперпользователями. |
|
Сбрасывает статистику до нуля для отдельного кеша SLRU или всех SLRU в кластере. Эта функция по умолчанию ограничена суперпользователями. |
|
Сбрасывает статистику слота репликации, определенного аргументом. Эта функция по умолчанию ограничена суперпользователями. |
|
Сбрасывает статистику для одной подписки, показанной во представлении |
Предупреждение
Использование 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;
Функции статистики по каждому бэкенду:
Функция |
Описание |
|---|---|
|
Возвращает набор текущих активных идентификаторов серверного процесса (от 1 до числа активных серверов) |
|
Возвращает текст последнего запроса этого бэкенда |
|
Возвращает время начала последнего запроса бэкенда |
|
Возвращает IP-адрес клиента, подключенного к этому бэкенду |
|
Возвращает номер TCP-порта, который клиент использует для связи |
|
Возвращает идентификатор объекта базы данных, к которой подключен этот бэкенд |
|
Возвращает идентификатор процесса этого бэкенда |
|
Возвращает время, когда этот процесс был запущен |
|
Возвращает OID пользователя, вошедшего в этот бэкенд |
|
Возвращает имя типа события ожидания, если этот бэкенд в данный момент ожидает, иначе NULL. См. «Типы событий ожидания» для получения подробной информации |
|
Возвращает имя события ожидания, если этот бэкенд в данный момент ожидает, иначе NULL. См. «События ожидания типа Activity» через «События ожидания типа Timeout» |
|
Возвращает время начала текущей транзакции бэкенда |