G.5. pgpro_pwr — отчёты о нагрузке #

G.5.1. Архитектура pgpro_pwr
G.5.2. Предварительные требования
G.5.3. Установка и подготовка
G.5.4. Управление серверами
G.5.5. Управление выборками
G.5.6. Управление анализом размеров отношений
G.5.7. Управление промежуточными выборками
G.5.8. Управление выборочными линиями
G.5.9. Экспорт и импорт данных
G.5.10. Функции построения отчётов
G.5.11. Разделы отчёта pgpro_pwr
G.5.12. Диагностические средства pgpro_pwr
G.5.13. Важные замечания

Модуль pgpro_pwr предназначен для выявления наиболее ресурсоёмких операций в базе данных. (Корень pwr, произносится как «пауэр» (power), — это сокращение от Postgres Pro Workload Reporting, Отчётность по нагрузке Postgres Pro.) Данный модуль основывается на представлениях Сборщика статистики и расширении pgpro_stats или pg_stat_statements.

Примечание

Хотя pgpro_pwr может работать с расширением pg_stat_statements, по возможности рекомендуется использовать расширение pgpro_stats, так как оно выдаёт планы операторов, информацию о событиях ожидания и статистику распределения нагрузки для баз данных, ролей, клиентских узлов и приложений.

Ниже предполагается, что используется pgpro_stats, если иное не отмечено явно.

Если у вас нет возможности использовать pgpro_stats в нужной базе, но имеется расширение pg_stat_kcache, pgpro_pwr может обрабатывать выдаваемую pg_stat_kcache информацию об использовании командами ресурсов процессора и о нагрузке на уровне файловой системы (rusage).

pgpro_pwr получает сводную статистику ожидания от расширения pg_wait_sampling. Когда используется pg_wait_sampling, pgpro_pwr сбрасывает профиль выборки ожидания для каждой выборки.

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

pgpro_pwr предоставляет функции для получения выборок. Аккумулируемые регулярные выборки позволяют строить отчёты о нагрузке базы данных за прошедшее время.

pgpro_pwr позволяет создавать выборки явным образом во время массовой обработки данных, тестирования нагрузки и т. д.

При каждом получении выборки вызывается функция pgpro_stats_statements_reset() (она описана в pgpro_stats), чтобы статистика выполнения операторов не потерялась, когда количество операторов превысит pgpro_stats.max (см. Подраздел G.7.7.1). Кроме этого, в отчёте будет содержаться раздел, в котором можно узнать, не превышает ли количество операторов 90% от значения pgpro_stats.max.

Расширение pgpro_pwr, установленное на одном сервере Postgres Pro, может собирать статистику и с других серверов. Таким образом, на ведущем сервере можно собирать статистику нагрузки также с серверов горячего резерва. Чтобы это реализовать, необходимо указать имена всех серверов и строки подключения, а также обеспечить возможность подключения pgpro_pwr ко всем серверам.

G.5.1. Архитектура pgpro_pwr #

Данное расширение состоит из следующих частей:

  • Репозиторий истории — хранилище собранных данных. В нём находится несколько таблиц расширения.

    Примечание

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

  • Механизм управления выборками включает функции, позволяющие делать выборки и поддерживать актуальное состояние репозитория, удаляя устаревшие данные.

  • Механизм отчётов включает функции построения отчётов по данным, находящемся в репозитории истории.

  • Административные функции, предназначенные для создания серверов и выборочных линий, а также для управления ими.

G.5.2. Предварительные требования #

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

G.5.2.1. Для базы данных pgpro_pwr #

Расширение pgpro_pwr зависит от языка PL/pgSQL и расширения dblink.

G.5.2.2. Для целевого сервера #

Целевой сервер должен разрешать подключения ко всем базам данных с сервера, на котором работает pgpro_pwr. Вам надо будет задать строку подключения для этого сервера с указанием определённой базы данных. Эта база данных имеет особое значение, так как pgpro_pwr будет обращаться к установленному в ней расширению pgpro_stats или pg_stat_statements. Однако заметьте, что pgpro_pwr будет подключаться и ко всем остальным базам на этом сервере.

Для получения более полной статистики можно дополнительно:

  • Установить и настроить расширение pgpro_stats в вышеупомянутой базе данных, если вы хотите видеть в отчётах статистику по операторам. Полнота и точность собираемой статистики может зависеть от следующих параметров:

    • pgpro_stats.max

      При небольшом значении этого параметра некоторая статистика может теряться между выборками. Если объём попадающей в выборку статистики близок к значению pgpro_stats.max, вы увидите предупреждение об этом в отчёте.

    • pgpro_stats.track

      Оптимальным является значение по умолчанию, 'top' (заметьте, что значение 'all' повлияет на точность полей %Total (% всего) в разделах отчёта, посвящённым SQL-операторам).

  • Задать следующие параметры Сборщика статистики Postgres Pro:

            track_activities = on
            track_counts = on
            track_io_timing = on
            track_wal_io_timing = on   # Начиная с PostgreSQL 14
            track_functions = all/pl
          

G.5.3. Установка и подготовка #

pgpro_pwr поставляется вместе с Postgres Pro Enterprise в виде отдельного пакета pgpro-pwr-ent-16 (подробные инструкции по установке приведены в Главе 17).

Примечание

Расширение pgpro_pwr создаёт множество объектов в базе данных, поэтому рекомендуется устанавливать его в отдельную схему.

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

G.5.3.1. Упрощённая установка #

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

Создайте схему для установки pgpro_pwr, а затем создайте расширение:

CREATE SCHEMA profile;
CREATE EXTENSION pgpro_pwr SCHEMA profile;

G.5.3.2. Развёрнутая установка #

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

G.5.3.2.1. В базе данных целевого сервера #

Создайте на целевом сервере пользователя для pgpro_pwr:

CREATE USER pwr_collector PASSWORD 'collector_pwd';

Убедитесь в том, что пользователь имеет возможность подключаться к любой базе данных кластера (по умолчанию это так) и что pg_hba.conf разрешает такие подключения с сервера, где размещён pgpro_pwr. Также включите этого пользователя в роль pwr_collector и дайте ему право EXECUTE для следующих функций:

GRANT pg_read_all_stats TO pwr_collector;
GRANT EXECUTE ON FUNCTION pgpro_stats_statements_reset TO pwr_collector;
GRANT EXECUTE ON FUNCTION pgpro_stats_totals_reset(text,bigint) TO pwr_collector;

Также следует проверить наличие права SELECT для представления pgpro_stats_archiver:

GRANT SELECT ON pgpro_stats_archiver TO pwr_collector;
G.5.3.2.2. В базе данных pgpro_pwr #

Создайте непривилегированного пользователя:

CREATE USER pwr_user;

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

Создайте схему для установки pgpro_pwr:

CREATE SCHEMA profile AUTHORIZATION pwr_user;

Дайте пользователю право USAGE для схемы, где располагается расширение dblink:

GRANT USAGE ON SCHEMA public TO pwr_user;

Создайте расширение от имени pwr_user:

\c - pwr_user
CREATE EXTENSION pgpro_pwr SCHEMA profile;

Определите параметры подключения к целевому серверу для pgpro_pwr. Например:

SELECT profile.create_server('target_server_name','host=192.168.1.100 dbname=postgres port=5432');

Указанная строка подключения будет использоваться в вызове dblink_connect() при выполнении функции take_sample().

Примечание

Строки подключения хранятся в таблице pgpro_pwr в открытом виде, поэтому следует ограничивать доступ к таблицам расширения pgpro_pwr.

G.5.3.3. Настройка ролей pgpro_pwr #

В работе pgpro_pwr можно выделить до трёх ролей:

  • Роль владелец pgpro_pwr является владельцем расширения pgpro_pwr.

  • Роль сбора статистики используется pgpro_pwr для подключения к базам данных и сбора статистики.

  • Роль создания отчётов используется для создания отчётов.

Если все действия с pgpro_pwr выполняются от имени суперпользователя postgres, можно пропустить большую часть настройки, описанной ниже.

G.5.3.3.1. Владелец pgpro_pwr #

Эту роль можно использовать для выполнения всех действий, связанных с pgpro_pwr. Она будет иметь доступ к строкам подключения к серверу, которые могут содержать пароли. Эту роль следует использовать для вызова функции take_sample(). Пользователю с такой ролью необходимо расширение dblink.

Рассмотрим пример, в котором каждое расширение установлено в отдельной схеме:

\c postgres postgres
CREATE SCHEMA dblink;
CREATE EXTENSION dblink SCHEMA dblink;
CREATE USER pwr_usr with password 'pwr_pwd';
GRANT USAGE ON SCHEMA dblink TO pwr_usr;
CREATE SCHEMA profile AUTHORIZATION pwr_usr;
\c postgres pwr_usr
CREATE EXTENSION pgpro_pwr SCHEMA profile;
G.5.3.3.2. Роль сбора статистики #

Эта роль должна использоваться расширением pgpro_pwr для подключения к базам данных и сбора статистики. Непривилегированные пользователи не могут открывать соединения, используя dblink, без пароля, поэтому необходимо указать пароль в строке подключения для каждого сервера. Эта роль должна иметь доступ ко всем расширениям, собирающим статистику, а также иметь возможность выполнять сброс статистики для таких расширений.

Рассмотрим пример. Если для сбора статистики используется расширение pgpro_stats, настройте роль сбора статистики следующим образом:

\c postgres postgres
CREATE SCHEMA pgps;
CREATE EXTENSION pgpro_stats SCHEMA pgps;
CREATE USER pwr_collector with password 'collector_pwd';
GRANT pg_read_all_stats TO pwr_collector;
GRANT USAGE ON SCHEMA pgps TO pwr_collector;
GRANT EXECUTE ON FUNCTION pgps.pgpro_stats_statements_reset TO pwr_collector;

Если для сбора статистики используется расширение pg_stat_statements, настройте её, как указано ниже:

\c postgres postgres
CREATE SCHEMA pgss;
CREATE SCHEMA pgsk;
CREATE SCHEMA pgws;
CREATE EXTENSION pg_stat_statements SCHEMA pgss;
CREATE EXTENSION pg_stat_kcache SCHEMA pgsk;
CREATE EXTENSION pg_wait_sampling SCHEMA pgws;
CREATE USER pwr_collector with password 'collector_pwd';
GRANT pg_read_all_stats TO pwr_collector;
GRANT USAGE ON SCHEMA pgss TO pwr_collector;
GRANT USAGE ON SCHEMA pgsk TO pwr_collector;
GRANT USAGE ON SCHEMA pgws TO pwr_collector;
GRANT EXECUTE ON FUNCTION pgss.pg_stat_statements_reset TO pwr_collector;
GRANT EXECUTE ON FUNCTION pgsk.pg_stat_kcache_reset TO pwr_collector;
GRANT EXECUTE ON FUNCTION pgws.pg_wait_sampling_reset_profile TO pwr_collector;

Теперь следует задать строку подключения, указывающую на базу данных с установленными расширениями статистики:

 \c postgres pwr_usr
 SELECT profile.set_server_connstr('local','dbname=postgres port=5432 host=localhost user=pwr_collector password=collector_pwd');

В файле pg_hba.conf следует указать, что для пользователя pwr_collector требуется аутентификация по паролю.

Очевидно, что роль сбора статистики должна быть правильно настроена на всех серверах, с которых расширение pgpro_pwr собирает статистику.

Теперь можно вызывать take_sample(), используя роль pwr_usr:

\c postgres pwr_usr
SELECT * FROM take_sample();

Затем необходимо настроить планировщик задач (в нашем примере это команда crontab пользователя postgres):

*/30 * * * *   psql -U pwr_usr -d postgres -c 'SELECT profile.take_sample()' > /dev/null 2>&1

Обратите внимание, что для хранения паролей можно использовать файл паролей Postgres Pro.

G.5.3.3.3. Роль создания отчётов #

Любой пользователь может собирать отчёты pgpro_pwr. Минимальные права, необходимые для создания отчётов pgpro_pwr, предоставляются роли public. Однако полный отчёт с текстами запросов доступен только члену роли pg_read_all_stats. В любом случае роль создания отчётов не имеет доступа к строкам подключения к серверу, поэтому она не может получить пароли серверов.

G.5.3.4. Настройка параметров расширения #

Вы можете определить в postgresql.conf следующие параметры pgpro_pwr:

pgpro_pwr.max (integer) #

Количество выбираемых первых объектов (операторов, отношений и т. д.), которое будет выдаваться в каждой отсортированной по некоторому критерию таблице отчёта. Этот параметр влияет на размер выборки: чем больше объектов необходимо отобразить в отчёте, тем больше должна быть выборка. Максимальное значение — 100. Любое значение больше максимально допустимого будет уменьшено до 100.

Значение по умолчанию — 20.

pgpro_pwr.max_sample_age (integer) #

Срок хранения выборки (в днях). Выборки старее pgpro_pwr.max_sample_age дней автоматически удаляются при очередном вызове take_sample().

Значение по умолчанию — 7.

pgpro_pwr.max_query_length (integer) #

Максимальная длина выводимого запроса в отчётах. Все запросы в отчётах будут сокращены до количества символов, указанного в pgpro_pwr.max_query_length.

Значение по умолчанию — 20 000 символов.

pgpro_pwr.track_sample_timings (boolean) #

Включает сбор подробной информации о времени выполнения внутренних процедур pgpro_pwr. Этот параметр полезен для диагностики в случае медленного выполнения функций получения выборок. Собранные показатели можно будет просмотреть в представлении v_sample_timings.

Значение по умолчанию — off (выкл.).

pgpro_pwr.statements_reset (boolean) #

Управляет сбросом статистики pgpro_stats/pg_stat_statements во время получения выборки. Позволяет не сбрасывать статистику во время получения выборки благодаря использованию новых методов. При отключении этого параметра pgpro_pwr будет отслеживать вытеснения операторов, используя значения поля calls. Однако этот метод не полностью предотвращает потерю статистики. Расширения pg_stat_statements версии 1.11 и pgpro_stats версии 1.8 имеют возможности для учёта точного времени наблюдения за выражением, которые могут уменьшить потенциальную потерю данных. Когда этот параметр отключён, его можно временно включить в сеансе, чтобы периодически выполнять сброс pgpro_stats/pg_stat_statements.

Значение по умолчанию — on (вкл.).

pgpro_pwr.relsize_collect_mode (text) #

Задаёт режим сбора сведений о размерах отношений. Возможные значения:

  • off — сбор сведений о размерах отношений основан на каталоге pg_class. Хотя полученные таким образом данные являются приблизительными, их сбор почти не потребляет ресурсов.

  • on — для каждой выборки собираются точные размеры отношений с помощью функции pg_relation_size(). Такой сбор требует блокировки таблицы и довольно ресурсоёмок.

  • schedule — точные размеры отношений собираются в окне анализа размеров, определённом для каждого сервера.

Значение по умолчанию — off (выкл.).

G.5.4. Управление серверами #

После установки pgpro_pwr создаёт по умолчанию активное определение сервера с именем local, соответствующее текущему кластеру. Активные определения серверов обрабатываются без явного указания при получении выборок (см. описание take_sample()). Неактивный сервер считается исключённым.

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

G.5.4.1. Функции управления серверами #

Для управления серверами предназначены следующие функции pgpro_pwr:

create_server(server name, connstr text, enabled boolean DEFAULT TRUE, max_sample_age integer DEFAULT NULL description text DEFAULT NULL) #

Создаёт определение сервера.

Аргументы:

  • server — имя сервера, которое должно быть уникальным.

  • connstr — строка подключения. Должна содержать все необходимые параметры для подключения со стороны сервера с pgpro_pwr к базе данных целевого сервера.

  • enabled — установите этот параметр, чтобы включить сервер в число серверов, обрабатываемых функцией take_sample() без аргументов.

  • max_sample_age — срок хранения выборки (в днях). Переопределяет глобальное значение pgpro_pwr.max_sample_age для данного сервера.

  • description — описание сервера, которое будет включаться в отчёты.

Например, определение сервера можно создать так:

SELECT profile.create_server('omega','host=192.168.1.100 dbname=postgres port=5432');
drop_server(server name) #

Удаляет сервер и все полученные с него выборки.

set_server_description(server name description text) #

Задаёт описание для сервера.

set_server_subsampling(server name, subsample_enabled boolean, min_query_duration interval, min_xact_duration interval, min_xact_age integer, min_idle_xact_dur interval hour to second) #

Определяет параметры получения промежуточных выборок для сервера.

Аргументы:

  • server — имя сервера.

  • subsample_enabled — определяет, включено ли получение промежуточных выборок для сервера, то есть должна ли функция take_subsample() фактически создавать промежуточные выборки.

  • min_query_duration — предел длительности запроса.

  • min_xact_duration — предел длительности транзакции.

  • time_range — предел возраста транзакций.

  • min_idle_xact_dur_age — предел простоя транзакции.

enable_server(server name) #

Включает сервер в число серверов, обрабатываемых функцией take_sample() без аргументов.

disable_server(server name) #

Исключает сервер из числа серверов, обрабатываемых функцией take_sample() без аргументов.

rename_server(server name, новое_имя name) #

Переименовывает сервер.

set_server_max_sample_age(server name, max_sample_age integer) #

Задаёт срок хранения выборки для сервера (в днях). Чтобы сбросить это значение, передайте NULL в параметре max_sample_age.

set_server_db_exclude(server name, exclude_db name[]) #

Исключает указанные базы данных на сервере из числа обрабатываемых. Это полезно, когда pgpro_pwr не может подключиться к некоторым базам в кластере (например, это возможно в кластерах Amazon RDS).

set_server_connstr(server name, server_connstr text) #

Задаёт строку подключения для сервера.

set_server_setting(server name, setting text, value jsonb) #

Выполняет тонкую настройку сбора статистики сервера. Настройки collect* управляют тем, какая статистика будет собираться, и для них параметр value принимает логические значения, по умолчанию равные true. Доступные настройки:

  • collect_pg_stat_statement — собирать статистику выполнения операторов с помощью расширений pg_stat_statements и pg_stat_kcache.

  • collect_pg_wait_sampling — собирать статистку событий ожидания с помощью расширения pg_wait_sampling.

  • collect_objects — собирать статистику по всем объектам схемы, то есть по таблицам, индексам и функциям, из представлений pg_stat_*.

  • collect_relations — собирать статистику по таблицам и индексам из представлений pg_stat_*.

  • collect_functions — собирать статистику по пользовательским функциям из представления pg_stat_user_functions.

  • collect_vacuum_stats — собирать расширенную статистку очистки баз данных.

show_server_settings(server name) #

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

show_servers() #

Выдаёт список настроенных серверов.

G.5.5. Управление выборками #

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

G.5.5.1. Функции обработки выборок #

Для работы с выборками предназначены следующие функции pgpro_pwr:

take_sample()
take_sample(server name [, skip_sizes boolean]) #

Получает выборки.

Без параметров эта форма функции получает выборки со всех включённых серверов, обращаясь к ним последовательно, и выдаёт в результате таблицу со следующими столбцами:

  • server — имя сервера.

  • result — результат получения выборки. Может быть строкой OK, если выборка получена успешно, либо содержать текст с трассировкой ошибки в случае неудачи.

  • elapsed — время, потраченное на получение выборки.

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

Аргументы:

  • server — имя сервера.

  • skip_sizes — если этот параметр опущен или равен NULL, применяется политика анализа размеров; если он равен false, анализ размеров производится, а если true — пропускается.

take_sample_subset([sets_cnt integer, current_set integer]) #

Получает выборку с каждого сервера в подмножестве. Используйте эту функцию, чтобы получать выборки параллельным образом при большом количестве включённых серверов. Хотя PL/pgSQL не поддерживает параллельное выполнение функции, вы можете запустить эту функцию в нескольких сеансах. Она возвращает тот же тип, что и take_sample(). Если оба параметра опущены, функция действует аналогично take_sample(), то есть перебирает все включённые серверы по одному.

Аргументы:

  • sets_cnt — количество подмножеств, на которое будет разделено множество всех включённых серверов.

  • current_set — номер подмножества, в котором будут собираться выборки. Принимает значение от 0 до sets_cnt - 1. Для выбранного подмножества выборки собираются как обычно, с последовательным переходом от сервера к серверу.

Если обнаружится, что после предыдущей выборки произошёл сброс статистики, pgpro_pwr обработает соответствующие абсолютные значения как разницу; однако точность пострадает в любом случае.

show_samples([server name,] [days integer]) #

Выдаёт таблицу с информацией об имеющихся на сервере выборках статистики (если параметр server опущен, подразумевается local) за последние days дней (если этот параметр опущен, то за всё время). Эта таблица содержит следующие столбцы:

  • sample — идентификатор выборки.

  • sample_time — время, когда была получена выборка.

  • dbstats_resetNULL или время сброса статистики в представлении pg_stat_database, если она была сброшена после предыдущей выборки.

  • clustats_resetNULL или время сброса статистики в представлении pg_stat_bgwriter, если она была сброшена после предыдущей выборки.

  • archstats_resetNULL или время сброса статистики в представлении pg_stat_archiver, если она была сброшена после предыдущей выборки.

Функции получения выборок также поддерживают заданное политикой хранения желаемое состояние репозитория, удаляя устаревшие выборки и выборочные линии.

G.5.5.2. Получение выборок #

Чтобы получить выборки со всех включённых серверов, вызовите функцию take_sample(). Обычно достаточно получать одну-две выборки в час. Для выполнения этой функции по расписанию можно воспользоваться планировщиком cron или подобным. Например, так выглядит расписание cron для получения выборок каждые 30 минут:

*/30 * * * *   psql -c 'SELECT profile.take_sample()' &> /dev/null

Однако результаты такого вызова не проверяются на ошибки. В производственной среде для целей мониторинга имеет смысл проверять строку результата, которая будет содержать OK для всех серверов, с которых выборки были получены успешно, либо текст ошибки, если получить выборку не удалось:

SELECT * FROM take_sample();
  server   |                                   result                                    |   elapsed
-----------+-----------------------------------------------------------------------------+-------------
 ok_node   | OK                                                                          | 00:00:00.48
 fail_node | could not establish connection                                             +| 00:00:00
           | SQL statement "SELECT dblink_connect('server_connection',server_connstr)"  +|
           | PL/pgSQL function take_sample(integer) line 69 at PERFORM                  +|
           | PL/pgSQL function take_sample_subset(integer,integer) line 27 at assignment+|
           | SQL function "take_sample" statement 1                                     +|
           | FATAL:  database "postgresno" does not exist                                |
(2 rows)

G.5.5.3. Политика хранения выборок #

Политики хранения можно определить на следующих уровнях:

  1. Глобальный

    Значение параметра pgpro_pwr.max_sample_age в файле postgresql.conf определяет общее значение параметра хранения, действующее в случае, когда не определены никакие другие параметры.

  2. Сервер

    Параметр max_sample_age, указанный при создании сервера или при вызове функции set_server_max_sample_age(сервер), определяет срок хранения на уровне сервера. Значение этого параметра переопределяет значение pgpro_pwr.max_sample_age для конкретного сервера.

  3. Выборочная линия

    Созданная выборочная линия переопределяет все другие заданные сроки хранения для включённых в неё выборок.

G.5.6. Управление анализом размеров отношений #

Сбор сведений о размерах всех отношений в базе данных с использованием функций Postgres Pro может занять продолжительное время. Кроме того, эти функции требуют установления блокировки AccessExclusiveLock для анализируемых отношений. Однако во многих случаях может быть достаточно собирать информацию о размерах один раз в сутки. Реализовать это можно, определив в pgpro_pwr политики анализа размеров для серверов, позволяющие пропускать сбор сведений о размерах в процессе получения выборок. Такая политика устанавливает:

  • Окно в течение суток, когда разрешается сбор сведений о размерах отношений.

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

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

set_server_size_sampling(server name, window_start time with time zone DEFAULT NULL, window_duration interval hour to second DEFAULT NULL, sample_interval interval day to minute DEFAULT NULL, collect_mode text DEFAULT NULL) #

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

Аргументы:

  • server — имя сервера.

  • window_start — время начала периода сбора.

  • window_duration — длительность периода сбора.

  • sample_interval — минимальный промежуток времени между сборами сведений о размере.

  • collect_mode — при значении off, используемом по умолчанию для новых инсталляций, размеры отношений собираются из каталога pg_class, при значении on, размеры отношений собираются с помощью функции pg_relation_size(), при значении schedule, pgpro_pwr собирает размеры отношений в заданном окне. Этот параметр переопределяет значение параметра расширения relsize_collect_mode. При обновлении с предыдущих версий для этого параметра устанавливается значение on или schedule, что не меняет поведения, имевшего место до обновления.

Примечание

Если вы построите отчёт между двумя выборками, хотя бы в одной из которых отсутствуют сведения о размерах отношений, в нём будут разделы с информацией об увеличивающихся в размере объектах, полученной из pg_class.relpages. Однако вы можете расширить интервал отчёта до ближайших выборок, содержащих сведения о размерах, передав функциям построения отчётов параметр with_growth; это позволяет получать более точные данные об увеличении размера.

Размеры отношений необходимо знать, чтобы вычислить объём последовательно сканированных данных в таблицах и непосредственную нагрузку автоочистки при обработке индексов.

Пример:

SELECT set_server_size_sampling('local','23:00+03',interval '2 hour',interval '8 hour', 'schedule');

Функция show_servers_size_sampling выводит политики анализа размеров для всех серверов:

postgres=# SELECT * FROM show_servers_size_sampling();
 server_name | window_start | window_end  | window_duration | sample_interval | limited_collection
-------------+--------------+-------------+-----------------+-----------------+--------------------
 local       | 23:00:00+03  | 01:00:00+03 | 02:00:00        | 08:00:00        | t

G.5.7. Управление промежуточными выборками #

Некоторые доступные в Postgres Pro данные, связанные с производительностью, не являются накопительными. Например, наиболее часто используемые данные о состояниях сеансов доступны через представление pg_stat_activity и могут быть получены только с помощью частых выборок. Однако функция take_sample() создаёт большую нагрузку и может занять много времени. Поэтому она не подходит для сбора данных о состоянии сеансов.

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

Механизм промежуточных выборок можно использовать для захвата наиболее интересных состояний сеансов:

  • Длительные запросы

  • Длительные транзакции

  • Старые транзакции, то есть те, снимок в которых находится позади множества других транзакций

  • Транзакции, долгое время находящиеся в состоянии простоя (idle)

G.5.7.1. Функции получения промежуточных выборок #

Следующие функции pgpro_pwr относятся к работе с промежуточными выборками:

take_subsample()
take_subsample(server name) #

Без параметров эта функция получает промежуточные выборки со всех включённых серверов с включённым механизмом их получения (за подробностями обратитесь к set_server_subsampling). Промежуточные выборки для серверов получаются последовательно, по одному. Функция выдаёт в результате таблицу со следующими столбцами:

  • server — имя сервера.

  • result — результат получения промежуточной выборки. Может быть строкой OK, если промежуточная выборка получена успешно, либо содержать текст ошибки в случае неудачи.

  • elapsed — время, потраченное на получение промежуточной выборки.

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

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

Аргументы:

  • server — имя сервера.

Примечание

Попытка получить промежуточную выборку во время получения обычной выборки завершится ошибкой.

take_subsample_subset([sets_cnt integer], [current_set integer]) #

Получает промежуточную выборку с каждого сервера в подмножестве с включённым механизмом их получения. Хотя даже последовательное получение промежуточных выборок должно выполняться достаточно быстро, их можно получать параллельно, аналогично обычным выборкам. Эта функция возвращает тот же тип, что и take_subsample(). Если оба параметра опущены, функция действует аналогично take_subsample().

Аргументы:

  • sets_cnt — количество подмножеств серверов.

  • current_set — номер подмножества, в котором будут собираться промежуточные выборки. Принимает значение от 0 до sets_cnt - 1. Для выбранного подмножества промежуточные выборки собираются как обычно, с последовательным переходом от сервера к серверу.

G.5.7.2. Конфигурирование механизма получения промежуточных выборок #

На поведение промежуточных выборок влияют следующие параметры:

  • pgpro_pwr.subsample_enabled — определяет, должна ли функция take_subsample() фактически создавать промежуточную выборку.

  • pgpro_pwr.min_query_duration — предел, по достижении которого запрос считается длительным.

  • pgpro_pwr.min_xact_duration — предел, по достижении которого транзакция считается длительной.

  • pgpro_pwr.min_xact_age — предел возраста транзакции.

  • pgpro_pwr.min_idle_xact_dur_age — предел простоя транзакции.

Это поведение можно задать на уровне сервера с помощью функции set_server_subsampling.

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

  • Во время выполнения запроса разница между now() и query_start превышает предел pgpro_pwr.min_query_duration.

  • Во время выполнения транзакции разница между now() и xact_start превышает предел pgpro_pwr.min_xact_duration.

  • Во время выполнения транзакции age(backend_xmin) превышает предел pgpro_pwr.min_xact_age.

  • Во время выполнения транзакции в состоянии idle in transaction или idle in transaction (aborted) разница между now() и state_change превышает предел pgpro_pwr.min_idle_xact_duration.

За более подробным описанием упомянутых полей обратитесь к Главе 28. Каждая промежуточная выборка может содержать не более pgpro_pwr.max записей для каждого типа пределов.

G.5.7.3. Планирование получения промежуточных выборок #

Скорость получения промежуточных выборок позволяет получать их довольно часто. Однако обычно требуется не более 2-4 промежуточных выборок в минуту. Очевидно, что частота промежуточных выборок зависит от самого маленького из значений параметров пределов.

Cron допускает только один вызов в минуту, поэтому нужно предпринять дополнительные действия, чтобы получать промежуточные выборки чаще. Например, можно использовать команду psql \watch:

echo "select take_subsample(); \watch 15" | psql &> /dev/null

Вызов psql можно обернуть в systemd следующим образом:

Description=pgpro_pwr subsampling unit
[Unit]

[Service]
Type=simple
ExecStart=/bin/sh -c 'echo "select take_subsample(); \\watch 15" | /path/to/psql -qo /dev/null'
User=postgres
Group=postgres

[Install]
WantedBy=multi-user.target

G.5.8. Управление выборочными линиями #

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

G.5.8.1. Функции управления выборочными линиями #

Для управления выборочными линиями предназначены следующие функции pgpro_pwr:

create_baseline([server name,] baseline varchar(25), start_id integer, end_id integer [, days integer])
create_baseline([server name,] baseline varchar(25), time_range tstzrange [, days integer]) #

Создаёт выборочную линию.

Аргументы:

  • server — имя сервера. Если оно опущено, подразумевается local.

  • baseline — имя выборочной линии, которое должно быть уникальным на сервере.

  • start_id — идентификатор первой выборки в линии.

  • end_id — идентификатор последней выборки в линии.

  • time_range — период времени для выборочной линии. Выборочная линия будет включать все выборки, относящиеся к минимальному интервалу, который покрывает заданный отрезок time_range.

  • days — срок хранения выборочной линии, определяемый целым количеством дней с момента now(). Чтобы срок хранения не ограничивался, опустите этот параметр или задайте значение NULL.

drop_baseline([server name,] baseline varchar(25))

Удаляет выборочную линию. Аргументы этой функции действуют аналогично одноимённым аргументам create_baseline. Удаление выборочной линии не влечёт за собой непосредственное удаление относящихся к ней выборок. На них просто перестают распространяться заданные для этой линии параметры хранения.

keep_baseline([server name,] baseline varchar(25) [, days integer])

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

show_baselines([server name])

Выводит существующие выборочные линии. Вызовите show_baselines, чтобы получить информацию о выборочных линиях, включающую их имена, интервалы и периоды хранения. Если параметр server опущен, подразумевается сервер local.

G.5.9. Экспорт и импорт данных #

Собранные выборки можно экспортировать из одного экземпляра расширения pgpro_pwr и загрузить в другой. Это позволяет перемещать накопленную информацию о серверах или передать её специалистам поддержки для анализа.

G.5.9.1. Экспорт данных #

Функция export_data экспортирует данные в обычную таблицу. Выгрузить их затем из базы данных можно любым доступным способом. Например, можно воспользоваться метакомандой psql \copy и получить данные в файле csv:

postgres=# \copy (select * from export_data()) to 'export.csv'

G.5.9.2. Импорт данных #

Так как данные могут импортироваться только из локальной таблицы, сначала загрузите ранее экспортированные данные. Для этого вновь воспользуйтесь метакомандой \copy:

postgres=# CREATE TABLE import (section_id bigint, row_data json);
CREATE TABLE
postgres=# \copy import from 'export.csv'
COPY 6437

Теперь вы можете импортировать данные, передав таблицу import функции import_data:

postgres=# SELECT * FROM import_data('import');

По завершении импорта таблицу import можно удалить.

Примечание

Если данные сервера импортируются впервые, локально определённые серверы pgpro_pwr с совпадающими именами вызовут конфликт во время импорта. Чтобы его избежать, можно временно переименовать такие серверы или указать префикс имён серверов для операций импорта. Однако во время последующего импорта данных для ранее импортированных серверов эти данные будут сопоставляться с серверами по системным идентификаторам, поэтому эти серверы можно переименовать как угодно. Также имейте в виду, что pgpro_pwr переводит импортируемые серверы в отключённое состояние, чтобы функция take_sample() не обрабатывала их.

G.5.9.3. Функции экспорта и импорта #

Для экспорта и импорта данных предназначены следующие функции:

export_data([server name, [min_sample_id integer,] [max_sample_id integer,]] [, obfuscate_queries boolean] [, hide_connstr boolean]) #

Экспортирует собранные данные.

Аргументы:

  • server — имя сервера. Если оно опущено, данные экспортируется со всех настроенных серверов.

  • min_sample_id, max_sample_id — идентификаторы выборок, ограничивающих диапазон экспортируемых выборок (включающий указанные границы). Если min_sample_id опущен или равен NULL, экспортируются все выборки до выборки max_sample_id; если же max_sample_id опущен или равен NULL, экспортируются все выборки, начиная с выборки min_sample_id.

  • obfuscate_queries — экспортирует тексты запросов в виде хеша MD5 и исключает из экспорта строки подключения к серверу. Передавайте этот аргумент, только когда нужно скрыть тексты запросов.

  • hide_connstr — исключает из экспорта строки подключения к серверу.

import_data(data regclass [, server_name_prefix text]) #

Импортирует ранее экспортированные данные. Возвращает число строк, фактически загруженных в таблицы pgpro_pwr.

Аргументы:

  • data — имя таблицы, содержащей данные импорта.

  • server_name_prefix задаёт префикс имён серверов для операции импорта. Его можно использовать, чтобы избежать конфликтов имён.

G.5.10. Функции построения отчётов #

Отчёты pgpro_pwr формируются в формате HTML функциями построения. В pgpro_pwr имеются следующие типы отчётов:

  • Обычные отчёты предоставляют статистику по нагрузке для заданного интервала.

  • Разностные отчёты предоставляют статистику по одинаковым объектам в двух интервалах. Соответствующие значения выводятся рядом, что позволяет легко сравнивать профили нагрузки.

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

G.5.10.1. Обычные отчёты #

Для построения обычных отчётов воспользуйтесь следующими функциями:

get_report([server name,] start_id integer, end_id integer [, description text [, with_growth boolean [, db_exclude name[]]]])
get_report([server name,] time_range tstzrange [, description text [, with_growth boolean [, db_exclude name[]]]])
get_report([server name,] baseline varchar(25) [, description text [, with_growth boolean [, db_exclude name[]]]])

Строит обычный отчёт согласно заданным аргументам.

Аргументы:

  • server — имя сервера. Если оно опущено, подразумевается local.

  • start_id — идентификатор выборки, с которой начинается интервал.

  • end_id — идентификатор выборки, которой заканчивается интервал.

  • baseline — имя выборочной линии.

  • time_range — временной диапазон.

  • description — короткий текст, который будет включён в отчёт в качестве его описания.

  • with_growth — флаг, позволяющий расширить интервал до ближайших выборок, в которых имеются данные об увеличении отношений. Значение по умолчанию: false.

  • db_exclude — список исключаемых баз данных. Содержит базы данных, исключаемых из всех таблиц отчёта, содержащих столбец Database. Используйте этот параметр, чтобы скрыть в отчёте выбранные базы данных.

get_report_latest([server name,])
get_report_latest([server name [, db_exclude name[]]])

Строит обычный отчёт для двух последних выборок.

Аргументы:

  • server — имя сервера. Если оно опущено, подразумевается local.

  • db_exclude — список исключаемых баз данных. Содержит базы данных, исключаемых из всех таблиц отчёта, содержащих столбец Database. Используйте этот параметр, чтобы скрыть в отчёте выбранные базы данных.

G.5.10.2. Сравнительные отчёты #

Для построения сравнительных отчётов воспользуйтесь следующей функцией:

get_diffreport([server name,] start1_id integer, end1_id integer, start2_id integer, end2_id integer [, description text [, with_growth boolean [, db_exclude name[]]]])
get_diffreport([server name,] time_range1 tstzrange, time_range2 tstzrange [, description text [, with_growth boolean [, db_exclude name[]]]])
get_diffreport([server name,] baseline1 varchar(25), baseline2 varchar(25) [, description text [, with_growth boolean [, db_exclude name[]]]])
get_diffreport([server name,] baseline1 varchar(25), time_range2 tstzrange [, description text [, with_growth boolean[, db_exclude name[]]]])
get_diffreport([server name,] time_range1 tstzrange, baseline2 varchar(25) [, description text [, with_growth boolean[, db_exclude name[]]]])
get_diffreport([server name,] start1_id integer, end1_id integer, baseline2 varchar(25) [, description text [, with_growth boolean[, db_exclude name[]]]])
get_diffreport([server name,] baseline1 varchar(25), start2_id integer, end2_id integer [, description text [, with_growth boolean[, db_exclude name[]]]])

Формирует сравнительный отчёт за два интервала. Различные сочетания аргументов позволяют задать интервалы самыми разными способами.

Аргументы:

  • server — имя сервера. Если оно опущено, подразумевается local.

  • start1_id, end1_id — идентификаторы начальной и конечной выборок для первого интервала.

  • start2_id, end2_id — идентификаторы начальной и конечной выборок для второго интервала.

  • baseline1 — имя выборочной линии для первого интервала.

  • baseline2 — имя выборочной линии для второго интервала.

  • time_range1 — временной диапазон, задающий первый интервал.

  • time_range2 — временной диапазон, задающий второй интервал.

  • description — короткий текст, который будет включён в отчёт в качестве его описания.

  • with_growth — флаг, позволяющий расширить интервал до ближайших выборок, в которых имеются данные об увеличении отношений. Значение по умолчанию: false.

  • db_exclude — список исключаемых баз данных. Содержит базы данных, исключаемых из всех таблиц отчёта, содержащих столбец Database. Используйте этот параметр, чтобы скрыть в отчёте выбранные базы данных.

G.5.10.3. Пример построения отчёта #

Построение отчёта для локального сервера (local) за интервал, определяемый выборками:

psql -Aqtc "SELECT profile.get_report(480,482)" -o report_480_482.html

Построение отчёта для другого сервера:

psql -Aqtc "SELECT profile.get_report('omega',12,14)" -o report_omega_12_14.html

Построение отчёта за временной диапазон:

psql -Aqtc "SELECT profile.get_report(tstzrange('2020-05-13 11:51:35+03','2020-05-13 11:52:18+03'))" -o report_range.html

Построение отчёта за временной диапазон, определяемый относительно:

psql -Aqtc "SELECT profile.get_report(tstzrange(now() - interval '1 day',now()))" -o report_last_day.html

G.5.11. Разделы отчёта pgpro_pwr #

Каждый отчёт pgpro_pwr включает в себя разделы, описанные ниже. Число первых объектов, выбираемых из отсортированной таблицы при построении отчёта, задаётся параметром pgpro_pwr.max.

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

При прокрутке отчёта вниз его оглавление будет доступно в правой части страницы. Его можно скрыть одним щелчком мыши по закладке «content».

Также доступен фильтр на основе подстроки, который помогает ограничить содержимое отчёта определёнными объектами. В частности, фильтрация на основе подстроки применяется к текстам запросов.

G.5.11.1. Server statistics (Серверная статистика) #

Ниже описаны таблицы, относящиеся к этому разделу отчёта pgpro_pwr.

Таблицы «Database statistics» содержат статистику, собранную за интервал времени, в разрезе баз данных. Эта статистика основана на содержимом представления pg_stat_database. Столбцы такой таблицы отчёта перечислены в Таблице G.10.

Таблица G.10. Database statistics (Статистика баз данных)

СтолбецОписаниеПоле/вычисление
Database Имя базы данныхdatname
Commits Число зафиксированных транзакций xact_commit
Rollbacks Число отменённых транзакций xact_rollback
Deadlocks Число выявленных взаимоблокировок deadlocks
Checksum Failures Количество ошибок контрольных сумм в страницах данных этой базы. Это поле отображается, только если за отчётный интервал в этой базе данных были обнаружены какие-либо ошибки контрольной суммы. checksum_failures
Checksums Last Время выявления последней ошибки контрольной суммы в страницах данных этой базы. Это поле отображается, только если за отчётный интервал в этой базе данных были обнаружены какие-либо ошибки контрольной суммы. checksum_last_failure
Hit% Процент попаданий в кеш, то есть отношение числа страниц, прочитанных из буферов, к общему числу страниц 
Read Количество прочитанных дисковых блоков в этой базе данных blks_read
Hit Сколько раз требуемые блоки с диска уже находились в кеше blks_hit
Ret Количество выданных кортежей tup_returned
Fet Количество считанных кортежей tup_fetched
Ins Количество вставленных кортежей tup_inserted
Upd Количество изменённых кортежей tup_updated
Del Количество удалённых кортежей tup_deleted
Parallel workers Planned Количество параллельных рабочих процессов, которые планируется запустить запросами в этой базе данных
Parallel workers Launched Количество параллельных рабочих процессов, запущенных запросами в этой базе данных
Temp Size Общий объём данных, записанный во временные файлы при выполнении запросов в этой базе данных temp_bytes
Temp Files Количество временных файлов, созданных запросами в этой базе данных temp_files
Size Размер базы данных в момент получения последней выборки в отчётном интервале pg_database_size()
Growth Прирост объёма базы данных за отчётный интервалПриращение pg_database_size() на конец интервала относительно начала

Таблица отчёта «Cluster I/O statistics» (Статистика ввода-вывода кластера) показывает статистику ввода-вывода по типам объектов, типам обслуживающих процессов и контекстам. Эта таблица основана на представлении pg_stat_io Системы накопительной статистики, доступном начиная с Postgres Pro 16. Столбцы этой таблицы перечислены в Таблице G.11. Значения времени в ней выражаются в секундах.

Таблица G.11. Cluster I/O statistics (Статистика ввода-вывода кластера)

СтолбецОписание
Object Целевой объект операции ввода-вывода
Backend Тип обслуживающего процесса, выполнившего операцию ввода-вывода
Context Контекст операции ввода-вывода
Reads Count Количество операций чтения
Reads Bytes Объём прочитанных данных
Reads Time Время, затраченное операциями чтения
Writes Count Количество операций записи
Writes Bytes Объём записанных данных
Writes Time Время, затраченное операциями записи
Writebacks Count Количество блоков, запрошенных процессом для записи ядром в постоянное хранилище
Writebacks Bytes Объём данных, запрошенных для записи в постоянное хранилище
Writebacks Time Время, затраченное на операции отложенной записи, в том числе на постановку в очередь запросов на запись, и, возможно, на запись «грязных» данных
Extends Count Количество операций расширения отношений
Extends Bytes Объём пространства, использованного операциями расширения
Extends Time Время, затраченное операциями расширения
Hits Сколько раз нужный блок был найден в общем буфере
Evictions Сколько раз блок был записан из общего или локального буфера, чтобы его можно было переиспользовать
Reuses Сколько раз существующий буфер в кольцевом буфере с ограниченным размером за пределами общих буферов был повторно использован как часть операции ввода-вывода в контекстах bulkread, bulkwrite или vacuum
Fsyncs Count Количество вызовов fsync. Они отслеживаются только в контексте normal
Fsyncs Time Время, затраченное операциями синхронизации с файловой системой

Таблица отчёта «Cluster SLRU statistics» (Статистика SLRU-кеша кластера) показывает статистику доступа к SLRU-кешам (simple least-recently-used, простое вытеснение давно не используемых). Эта таблица основана на представлении pg_stat_slru Системы накопительной статистики. Столбцы этой таблицы перечислены в Таблице G.12. Значения времени в ней выражаются в секундах.

Таблица G.12. Cluster SLRU statistics (Статистика SLRU-кеша кластера)

СтолбецОписаниеПоле/вычисление
Name Имя SLRU-кешаname
Zeroed Количество блоков, обнулённых при инициализацииblks_zeroed
Hits Сколько раз дисковые блоки обнаруживались в SLRU-кеше и чтение с диска не требовалось (здесь учитываются только случаи обнаружения в этом кеше, а не в файловом кеше ОС)blks_hit
Reads Количество дисковых блоков, прочитанных для этого SLRU-кешаblks_read
%Hit Количество попаданий дискового блока для этого SLRU-кеша в процентах от Reads + Hitsblks_hit*100/blks_read + blks_hit
Writes Количество дисковых блоков, записанных для этого SLRU-кешаblks_written
Checked Количество блоков, проверенных на предмет наличия в этом SLRU-кеше blks_exists
Flushes Количество операций сброса «грязных» данных для этого SLRU-кешаflushes
Truncates Количество операций усечения для этого SLRU-кешаtruncates

Таблица «Session statistics by database» выводится в отчёте для баз Postgres Pro, начиная с версии 14. Эта таблица основана на представлении pg_stat_database сборщика статистики. Столбцы этой таблицы перечислены в Таблице G.13. Значения времени в ней выражаются в секундах.

Таблица G.13. Session statistics by database (Статистика сеансов по базам данных)

СтолбецОписаниеПоле/вычисление
Database Имя базы данных 
Timings Total Длительность сеансов в этой базе за отчётный интервал (обратите внимание, что статистика обновляется только при изменении состояния сеанса, поэтому, если сеансы простаивают в течение длительного времени, время простоя не будет учитываться) session_time
Timings Active Время, затраченное на выполнение операторов SQL в этой базе за отчётный интервал (соответствует состояниям active и fastpath function call в pg_stat_activity) active_time
Timings Idle Время простоя в транзакциях в этой базе за отчётный интервал (соответствует состояниям idle in transaction и idle in transaction (aborted) в pg_stat_activity) idle_in_transaction_time
Sessions Established Общее количество сеансов, относящихся к этой базе, за отчётный интервал sessions
Sessions Abandoned Количество сеансов в этой базе данных, прерванных из-за потери соединения с клиентом, за отчётный интервал sessions_abandoned
Sessions Fatal Количество сеансов в этой базе данных, прерванных из-за критических ошибок, за отчётный интервал sessions_fatal
Sessions Killed Количество сеансов в этой базе данных, прерванных из-за вмешательства оператора, за отчётный интервал sessions_killed

В базах данных Postgres Pro Enterprise версий, включающих версию pgpro_stats 1.4 и выше, доступна статистика нагрузки процессов очистки. В отчёте выводится таблица «Database vacuum statistics», содержащая общую агрегированную статистику очистки по базам данных из pgpro_stats_vacuum_tables. Столбцы этой таблицы перечислены в Таблице G.14. Значения времени в ней выражаются в секундах.

Таблица G.14. Database vacuum statistics (Статистика очистки баз данных)

СтолбецОписаниеПоле/вычисление
Database Имя базы данных 
Blocks fetched Общее количество блоков БД, полученных операциями очисткиtotal_blks_read + total_blks_hit
Fetched %Total Общее количество блоков БД (прочитанных и найденных в общих буферах), полученных операциями очистки, в процентах от общего числа блоков, полученных в кластереBlocks fetched * 100 / Cluster fetched
Blocks read Общее количество блоков БД, прочитанных операциями очистки total_blks_read
Read %Total Общее количество блоков БД, прочитанных операциями очистки, в процентах от общего числа блоков, прочитанных в кластереBlocks read * 100 / Cluster read
VM Frozen Общее количество блоков, помеченных в карте видимости как полностью замороженные pages_frozen
VM Visible Общее количество блоков, помеченных в карте видимости как полностью видимые pages_all_visible
Tuples deleted Общее количество «мёртвых» кортежей, удалённых операциями очистки из таблиц этой БД tuples_deleted
Tuples left Общее количество «мёртвых» кортежей, оставленных операциями очистки в таблицах этой БД из-за видимости этих кортежей в транзакциях dead_tuples
%Eff Эффективность очистки, оцениваемая по количеству удалённых кортежей. Это процент кортежей, удалённых из таблиц этой базы данных, от всех «мёртвых» кортежей, подлежащих удалению из этих таблиц.tuples_deleted * 100 / (tuples_deleted + dead_tuples)
WAL size Общий объём WAL (в байтах), сгенерированный операциями очистки, выполненными для таблиц этой БД wal_bytes
Read I/O time Время, затраченное на чтение блоков БД операциями очистки, выполненными для таблиц этой БД blk_read_time
Write I/O time Время, затраченное на запись блоков БД операциями очистки, выполненными для таблиц этой БД blk_write_time
%Total Время, затраченное на чтение/запись в процессе очистки, в процентах от всего времени чтения/записи в кластере
Vacuum time Total Общее время, затраченное на очистку таблиц этой БД total_time
Vacuum time Delay Время простоя в точке задержки при выполнении операций очистки таблиц этой БД delay_time
User CPU time Время использования процессора в пользовательском режиме при очистке таблиц этой БД user_time
System CPU time Время использования процессора в режиме ядра при очистке таблиц этой БД system_time
Interrupts Сколько раз операции очистки, выполнявшиеся для таблиц этой БД, были прерваны из-за каких-либо ошибок interrupts

Если в отчётном интервале было доступно расширение pgpro_stats, поддерживающее статистики аннулирования, в отчёте выводится таблица «Invalidation messages by database» с общей агрегированной статистикой событий аннулирования по каждой базе данных. Столбцы этой таблицы перечислены в Таблице G.15.

Таблица G.15. Invalidation messages by database (Число событий аннулирования в базе данных)

СтолбецОписаниеПоле/вычисление
Database Имя базы данных 
Invalidation messages sent Общее количество событий аннулирования, отправленных обслуживающими процессами в этой базе данных. Статистика предоставляется для соответствующих типов сообщений pgpro_stats_inval_msgsПоля столбца pgpro_stats_totals.inval_msgs
Cache resets Общее число сбросов разделяемого кешаpgpro_stats_totals.cache_resets

Если в отчётном интервале было доступно расширение pgpro_stats, в отчёте выводится таблица «Statement statistics by database» с общей агрегированной статистикой из pgpro_stats_statements по каждой базе данных. Столбцы этой таблицы перечислены в Таблице G.16. Значения времени в ней выражаются в секундах.

Таблица G.16. Statement statistics by database (Статистика SQL-операторов в базе данных)

СтолбецОписаниеПоле/вычисление
Database Имя базы данных 
Calls Счётчик всех выполненных SQL-операторов в базе calls
Plan Time Время, затраченное на планирование операторов в этой базеСумма значений total_plan_time
Exec Time Время, затраченное на выполнение всех операторов в этой базеСумма значений total_exec_time
Read Time Время, затраченное на чтение блоков в этой базеСумма значений blk_read_time
Write Time Время, затраченное на запись блоков в этой базеСумма значений blk_write_time
Trg Time Время, затраченное на выполнение триггерных функций в этой базе 
Shared Fetched Общее количество разделяемых блоков, прочитанных в этой базеСумма значений shared_blks_read + shared_blks_hit
Local Fetched Общее количество локальных блоков, прочитанных в этой базеСумма значений local_blks_read + local_blks_hit
Shared Dirtied Общее количество разделяемых блоков, загрязнённых при выполнении операторов в этой базеСумма значений shared_blks_dirtied
Local Dirtied Количество прочитанных локальных блоков, загрязнённых при выполнении операторов в этой базеСумма значений local_blks_dirtied
Read Temp Общее количество временных блоков, прочитанных всеми операторами в этой базеСумма значений temp_blks_read
Write Temp Общее количество временных блоков, записанных всеми операторами в этой базеСумма значений temp_blks_written
Read Local Общее количество локальных блоков, прочитанных в этой базеСумма значений local_blks_read
Write Local Общее количество локальных блоков, записанных в этой базеСумма значений local_blks_written
Statements Общее число обработанных SQL-операторов 
WAL Size Общий объём WAL, сгенерированный в этой базеСумма значений wal_bytes
WAL buffers full Количество случаев переполнения буферов WAL

Таблица отчёта «Statement average min/max timings» содержит агрегированную статистику о минимальных/максимальных замерах времени за отчётный интервал, в разрезе баз данных, из представлений расширения pgpro_stats или pg_stat_statements (предпочтение отдаётся представлению pgpro_stats). Этот отчёт учитывает самое быстрое и самое медленное планирование и выполнение каждого оператора в кластере, то есть позволяет увидеть стабильность выполнения и планирования в базе данных. Столбцы такой таблицы отчёта перечислены в Таблице G.17.

Таблица G.17. Statement average min/max timings (Средние значения минимальных/максимальных замеров времени)

СтолбецОписание
Database Имя базы данных
Min average planning time Среднее значение min_plan_time для всех операторов и всех выборок, включённых в отчёт, в миллисекундах
Max average planning time Среднее значение max_plan_time для всех операторов и всех выборок, включённых в отчёт, в миллисекундах
Delta% of average planning times Разность среднего значения max_plan_time и среднего значения min_plan_time в процентах от среднего значения min_plan_time. Чем меньше эта разность, тем стабильнее планирование запросов в базе данных.
Min average execution time Среднее значение min_exec_time для всех операторов и всех выборок, включённых в отчёт, в миллисекундах
Max average execution time Среднее значение max_exec_time для всех операторов и всех выборок, включённых в отчёт, в миллисекундах
Delta% of average execution times Разность среднего значения max_exec_time и среднего значения min_exec_time в процентах от среднего значения min_exec_time. Чем меньше эта разность, тем стабильнее выполнение запросов в базе данных.
Statements Общее число операторов, попавших в выборки

Если расширение, собирающее статистику операторов в отчётном интервале, собрало статистику JIT, в отчёте выводится таблица «JIT statistics by database» с общей агрегированной статистикой по использованию JIT в разрезе баз данных. Столбцы этой таблицы перечислены в Таблице G.18. Значения времени в ней выражаются в секундах.

Таблица G.18. JIT statistics by database (Статистика JIT в базах данных)

СтолбецОписаниеПоле/вычисление
Database Имя базы данных 
Calls Счётчик всех выполненных SQL-операторов в базе calls
Plan Time Время, затраченное на планирование операторов в этой базеСумма значений total_plan_time
Exec Time Время, затраченное на выполнение всех операторов в этой базеСумма значений total_exec_time
Generation count Общее число функций, скомпилированных в JIT-код при выполнении операторовСумма значений jit_functions
Generation time Общее время, затраченное на компиляцию JIT-кода при выполнении операторовСумма значений jit_generation_time
Inlining count Сколько раз встраивались функцииСумма значений jit_inlining_count
Inlining time Общее время, затраченное на встраивание функций при выполнении операторовСумма значений jit_inlining_time
Optimization count Общее число JIT-оптимизаций для операторовСумма значений jit_optimization_count
Optimization time Общее время, затраченное на JIT-оптимизацию при выполнении операторовСумма значений jit_optimization_time
Emission count Сколько раз выдавался кодСумма значений jit_emission_count
Emission time Общее время, затраченное на выдачу кода при выполнении операторовСумма значений jit_emission_time
Deform count Число функций преобразования кортежей, скомпилированных в JIT-код при выполнении данного оператора
Deform time Общее время, затраченное операторами на компилирование функций преобразования кортежей в JIT-код

В таблице отчёта «Cluster statistics» содержатся данные из представлений pg_stat_bgwriter и pg_stat_checkpointer. Последнее представление доступно, начиная с Postgres Pro 17. Строки данной таблицы перечислены в Таблице G.19. Значения времени в ней выражаются в секундах.

Таблица G.19. Cluster statistics (Статистика кластера)

СтрокаОписаниеПоле/вычисление
Checkpoints Scheduled Количество запланированных контрольных точек, которые уже были выполнены checkpoints_timed
Checkpoints Requested Количество запрошенных контрольных точек, которые уже были выполнены checkpoints_req
Checkpoints Done Количество контрольных точек, которые были выполнены
Restartpoints Scheduled Количество запланированных точек перезапуска из-за тайм-аута или после неудачной попытки выполнить перезапуск restartpoints_timed
Restartpoints Requested Количество запрошенных точек перезапуска (при наличии) restartpoints_req
Restartpoints Done Количество точек перезапуска, которые были выполнены (при наличии) restartpoints_done
Checkpoint write time Общее время, которое было затрачено на часть обработки контрольных точек и точек перезапуска, в которой файлы записываются на диск checkpoint_write_time
Checkpoint sync time Общее время, которое было затрачено на часть обработки контрольных точек и точек перезапуска, в которой файлы синхронизируются с диском checkpoint_sync_time
Checkpoint buffers written Количество общих буферов, записанных при выполнении контрольных точек и точек перезапуска buffers_checkpoint
SLRU-буферы, записанные при выполнении контрольной точки Количество SLRU-буферов, записанных при выполнении контрольных точек и точек перезапуска
Background buffers written Количество буферов, записанных фоновым процессом записи buffers_clean
Backend buffers written Количество буферов, записанных самим обслуживающим процессом. Не будет показываться в Postgres Pro 17 и выше. buffers_backend
Backend fsync count Сколько раз обслуживающему процессу пришлось выполнить fsync самостоятельно (обычно фоновый процесс записи сам обрабатывает эти вызовы, даже когда обслуживающий процесс выполняет запись самостоятельно). Не будет показываться в Postgres Pro 17 и выше. buffers_backend_fsync
Bgwriter interrupts (too many buffers) Сколько раз фоновый процесс записи останавливал сброс грязных страниц на диск из-за того, что записал слишком много буферов maxwritten_clean
Number of buffers allocated Общее количество выделенных буферов buffers_alloc
WAL generated Общий сгенерированный объём WALПриращение значения pg_current_wal_lsn()
Start LSN Последовательный номер в журнале в начале отчётного интервалаpg_current_wal_lsn() в первой выборке отчёта
End LSN Последовательный номер в журнале в конце отчётного интервалаpg_current_wal_lsn() в последней выборке отчёта
WAL generated by vacuum Общий объём WAL, сгенерированный при очисткеОсновано на значении поля wal_bytes представления pgpro_stats_vacuum_databases.
WAL segments archived Общее количество заархивированных сегментов WALОсновано на значении pg_stat_archiver.archived_count
WAL segments archive failed Общее количество ошибок, возникших при архивировании сегментов WALОсновано на значении pg_stat_archiver.failed_count.
Archiver performance Средняя производительность процесса архивирования в секундуОсновано на значении поля active_time представления pgpro_stats_archiver.
Archive command performance Средняя производительность команды archive_command в секундуОсновано на значении поля archive_command_time представления pgpro_stats_archiver.

Таблица «WAL statistics» выводится в отчёте для баз Postgres Pro, начиная с версии 14. Эта таблица основана на представлении pg_stat_wal сборщика статистики. Столбцы этой таблицы отчёта перечислены в Таблице G.20. Значения времени в ней выражаются в секундах.

Таблица G.20. WAL statistics (Статистика WAL)

СтрокаОписаниеПоле/вычисление
WAL generated Общий объём записей WAL, сгенерированных за отчётный интервалwal_bytes
WAL per second Среднее количество записей WAL, генерируемых в секунду, за отчётный интервалwal_bytes / report_duration
WAL records Общее число записей WAL, сгенерированных за отчётный интервалwal_records
WAL FPI Общее число образов полных страниц WAL, сгенерированных за отчётный интервалwal_fpi
WAL buffers full Сколько раз данные WAL записывались на диск из-за переполнения буферов WAL за отчётный интервалwal_buffers_full
WAL writes Сколько раз буферы WAL были записаны на диск функцией XLogWrite за отчётный интервалwal_write
WAL writes per second Сколько раз в секунду в среднем буферы WAL записывались на диск функцией XLogWrite за отчётный интервалwal_write / report_duration
WAL sync Сколько раз файлы WAL сбрасывались на диск функцией issue_xlog_fsync за отчётный интервал (если fsync включён и wal_sync_method имеет значение fdatasync, fsync или fsync_writethrough, в противном случае — ноль). Более подробную информацию о внутренней функции WAL issue_xlog_fsync можно найти в Разделе 30.5.wal_sync
WAL syncs per second Сколько раз в секунду в среднем файлы WAL сбрасывались на диск функцией issue_xlog_fsync за отчётный интервалwal_sync / report_duration
WAL write time Общее время, затраченное на запись буферов WAL на диск функцией XLogWrite, за отчётный интервал (если включён track_wal_io_timing, в противном случае — ноль; за дополнительными сведениями обратитесь к разделу Разделе 19.9). Учитывается и время синхронизации, когда wal_sync_method имеет значение open_datasync или open_sync.wal_write_time
WAL write duty Процент WAL write time от продолжительности отчётаwal_write_time * 100 / report_duration
WAL sync time Общее время, затраченное на сброс файлов WAL на диск функцией issue_xlog_fsync, за отчётный интервал (если track_wal_io_timing включён, значение fsync — on и wal_sync_method имеет значение fdatasync, fsync или fsync_writethrough, в противном случае — ноль).wal_sync_time
WAL sync duty Процент WAL sync time от продолжительности отчётаwal_sync_time * 100 / report_duration

В таблице отчёта «Tablespace statistics» содержится информация о размере и приросте табличных пространств. Столбцы этой таблицы перечислены в Таблице G.21.

Таблица G.21. Tablespace statistics (Статистика табличных пространств)

СтолбецОписаниеПоле/вычисление
Tablespace Имя табличного пространстваpg_tablespace.spcname
Path Путь табличного пространстваpg_tablespace_location()
Size Размер табличного пространства в момент получения последней выборки в отчётном интервале pg_tablespace_size()
Growth Прирост объёма табличного пространства за отчётный интервалПриращение pg_tablespace_size() на конец интервала относительно начала

Если в отчётном интервале было доступно расширение pgpro_stats, в отчёте выводится таблица «Wait statistics by database» с информацией об общем времени ожидания в разрезе типов ожидания и баз данных. Столбцы этой таблицы перечислены в Таблице G.22.

Таблица G.22. Wait statistics by database (Статистика ожидания в базах данных)

СтолбецОписание
Database Имя базы данных
Wait event type Тип события, которого ожидали серверные процессы. Звёздочка вместо типа соответствует совокупности всех типов ожидания в базе данных.
Waited Время, проведённое в ожидании событий типа Wait event type, в секундах
%Total Отношение времени, проведённого в ожидании событий типа Wait event type, к общему времени ожидания таких событий в кластере

Если в отчётном интервале было доступно расширение pgpro_stats, в отчёте выводится таблица «Top wait events» с информацией о наиболее длительных событиях ожидания в кластере. Столбцы этой таблицы перечислены в Таблице G.23.

Таблица G.23. Top wait events (Преобладающие события ожидания)

СтолбецОписание
Database Имя базы данных
Wait event type Тип события, которого ждали серверные процессы
Wait event Название события ожидания, которого ждали серверные процессы
Waited Общее время, проведённое в ожидании событий типа Wait event в базе данных, в секундах
%Total Отношение времени, проведённого в ожидании события Wait event в базе данных к общему времени ожидания этого события в кластере

G.5.11.2. Load distribution (Распределение нагрузки) #

Этот раздел отчёта pgpro_pwr основан на представлении pgpro_stats_totals расширения pgpro_stats, если оно было доступно в течение отчётного интервала. Каждая таблица в данном разделе предоставляет данные за отчётный интервал о распределении нагрузки для определённого типа объектов, для которых собирается агрегированная статистика, например, баз данных, приложений, узлов или пользователей. Каждая таблица содержит по одной строке для каждого из ресурсов (таких, как общее время или общее число записанных разделяемых блоков), где распределение нагрузки показано на графике в виде линейчатой диаграммы с накоплением для объектов с наибольшей нагрузкой по этому ресурсу. Если область диаграммы, соответствующая объекту, слишком узка для включения заголовков, наведите указатель на эту область, чтобы получить подсказку с заголовком, значением и процентом. Таблицы «Load distribution among heavily loaded databases», «Load distribution among heavily loaded applications», «Load distribution among heavily loaded hosts» и «Load distribution among heavily loaded users» показывают распределение нагрузки для соответствующих объектов. Строки этих таблиц описаны в Таблице G.24. Значения времени в этих таблицах выражаются в секундах.

Таблица G.24. Load distribution (Распределение нагрузки)

СтрокаОписаниеВычисление
Total time Общее время, затраченное на планирование и выполнение операторовtotal_plan_time + total_exec_time
Executed count Число выполненных запросовqueries_executed
I/O time Общее время, затраченное операторами на чтение или запись блоков (если включён track_io_timing, или ноль в противном случае)blk_read_time + blk_write_time
Blocks fetched Общее число разделяемых блоков, прочитанных с диска и из кеша, для данного оператораshared_blks_hit + shared_blks_read
Shared blocks read Общее количество разделяемых блоков, прочитанных операторами shared_blks_read
Shared blocks dirtied Общее число разделяемых блоков, «загрязнённых» операторами shared_blks_dirtied
Shared blocks written Общее число разделяемых блоков, записанных операторами shared_blks_written
WAL generated Общий объём WAL, сгенерированный при выполнении операторов wal_bytes
Temp and Local blocks written Общее число временных и локальных блоков, записанных операторамиtemp_blks_written + local_blks_written
Temp and Local blocks read Общее количество временных и локальных блоков, прочитанных операторамиtemp_blks_read + local_blks_read
Invalidation messages sent Общее число событий аннулирования, отправленных обслуживающими процессами в этой базе данных(pgpro_stats_totals.inval_msgs).all
Cache resets Общее число сбросов разделяемого кешаpgpro_stats_totals.cache_resets

G.5.11.3. Состояния сеансов, попадающие в промежуточные выборки #

В этом разделе отчёта pgpro_pwr содержится информация о состояниях сеансов, попавших в промежуточные выборки за отчётный интервал.

Ниже описаны таблицы, относящиеся к этому разделу отчёта.

Подраздел отчёта «Chart with session state» показывает состояния сеансов, попавшие в промежуточные выборки. Это график линии времени, иллюстрирующий попавшие в выборку состояния сеансов в обслуживающих процессах и транзакциях. Каждое состояние содержит всплывающее окно с атрибутами состояния сеанса. Нажмите на состояние, чтобы увидеть его в таблице состояний сеансов.

В таблице отчёта «Session state statistics by database» (Статистики состояний сеансов по базам данных) содержатся агрегированные данные о состояниях сеансов. Считаются только состояния сеансов, попавшие в промежуточные выборки. Столбцы этой таблицы перечислены в Таблице G.25.

Таблица G.25. Session state statistics by database (Статистики состояний сеансов по базам данных)

СтолбецОписание
Database Имя базы данных
Summary Active Общее время, проведённое в состояниях active, которые попали в промежуточные выборки
Summary Idle in xact Общее время состояний idle in transaction, попавших в промежуточные выборки
Summary Idle in xact (A) Общее время состояний idle in transaction (aborted), попавших в промежуточные выборки
Maximal Active Продолжительность самого длительного состояния active, попавшего в промежуточные выборки
Maximal Idle in xact Продолжительность самого длительного состояния idle in transaction, попавшего в промежуточные выборки
Maximal Idle in xact (A) Продолжительность самого длительного состояния idle in transaction (aborted), попавшего в промежуточные выборки
Maximal xact age Максимальный возраст транзакций, попавший в промежуточные выборки

В таблице отчёта «Top 'idle in transaction' session states by duration» показано pgpro_pwr.max самых длительных состояний idle in transaction для каждого сеанса. Эта информация основана на данных последнего наблюдения каждого из них в представлении pg_stat_activity. Столбцы такой таблицы отчёта перечислены в Таблице G.26.

Таблица G.26. Top 'idle in transaction' session states by duration (Самые длительные состояния 'idle in transaction' сеансов)

СтолбецОписаниеПоле/вычисление
Database Имя базы данныхdatname
User Имя пользователяusename
App Имя приложенияapplication_name
Pid Идентификатор процессаpid
Xact start Временная метка начала транзакцииxact_start
State change Временная метка изменения состоянияstate_change
State duration Продолжительность состоянияРазность clock_timestamp() и state_change

В таблице отчёта «Top 'active' session states by duration» показаны pgpro_pwr.max самых длительных состояний active для каждого сеанса. Эта информация основана на данных последнего наблюдения каждого из них в представлении pg_stat_activity. Столбцы такой таблицы отчёта перечислены в Таблице G.27.

Таблица G.27. Top 'active' session states by duration (Самые длительные состояния 'active' сеансов)

СтолбецОписаниеПоле/вычисление
Database Имя базы данныхdatname
User Имя пользователяusename
App Имя приложенияapplication_name
Pid Идентификатор процессаpid
Xact start Временная метка начала транзакцииxact_start
State change Временная метка изменения состоянияstate_change
State duration Продолжительность состоянияРазность clock_timestamp() и state_change

В таблице отчёта «Top states by transaction age» показаны состояния сеансов с самым большим возрастом транзакций. Эта информация основана на данных последнего наблюдения каждого из них в представлении pg_stat_activity. Столбцы такой таблицы отчёта перечислены в Таблице G.28.

Таблица G.28. Top states by transaction age (Состояния с самым большим возрастом транзакций)

СтолбецОписаниеПоле/вычисление
Database Имя базы данныхdatname
User Имя пользователяusename
App Имя приложенияapplication_name
Pid Идентификатор процессаpid
Xact start Временная метка начала транзакцииxact_start
Xact duration Продолжительность транзакцииРазность clock_timestamp() и xact_start
Age Возраст транзакцииage(backend_xmin)
State Состояние сеанса при максимальном обнаруженном возрасте 
State change Временная метка изменения состоянияstate_change
State duration Продолжительность состоянияРазность clock_timestamp() и state_change

В таблице отчёта «Top states by transaction duration» показаны самые длительные состояния сеансов. Эта информация основана на данных последнего наблюдения каждого из них в представлении pg_stat_activity. Столбцы такой таблицы отчёта перечислены в Таблице G.28.

Таблица G.29. Top states by transaction duration (Состояния с наибольшей продолжительностью транзакций)

СтолбецОписаниеПоле/вычисление
Database Имя базы данныхdatname
User Имя пользователяusename
App Имя приложенияapplication_name
Pid Идентификатор процессаpid
Xact start Временная метка начала транзакцииxact_start
Xact duration Продолжительность транзакцииРазность clock_timestamp() и xact_start
Age Возраст транзакцииage(backend_xmin)
State Состояние сеанса при максимальном обнаруженном возрасте 
State change Временная метка изменения состоянияstate_change
State duration Продолжительность состоянияРазность clock_timestamp() и state_change

G.5.11.4. Статистика SQL-запросов #

В этом разделе отчёта pgpro_pwr представлена информация о наиболее выдающихся по разным критериям операторах за отчётный интервал. В основном эти данные получаются из представлений расширения pgpro_stats и pg_stat_statements (предпочтение отдаётся представлению pgpro_stats). Каждый оператор можно выделить во всех разделах, связанных с SQL, одним щелчком мыши. При этом прямо под строкой статистики запроса также доступен для предварительного просмотра текст запроса, который можно скрыть повторным щелчком мыши по запросу.

Ниже описаны таблицы, относящиеся к этому разделу отчёта.

Таблица отчёта «Top SQL by elapsed time» показывает запросы с наибольшей длительностью, рассчитанной как сумма полей total_plan_time и total_exec_time в представлении pgpro_stats_statements или pg_stat_statements. Столбцы этой таблицы перечислены в Таблице G.30. Значения времени в ней выражаются в секундах.

Таблица G.30. Top SQL by elapsed time (SQL-запросы с наибольшей длительностью)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператораplanid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
%Total Отношение времени, затраченного на выполнение плана, к общему времени всех запросов в кластере 
Elapsed Time Общее время, затраченное на планирование и выполнение плана запросаtotal_plan_time + total_exec_time
Plan Time Общее время, затраченное на планирование запроса total_plan_time
Exec Time Общее время, затраченное на выполнение плана запроса total_exec_time
JIT Time Общее время, затраченное на выполнение этого плана оператора с применением JIT, в секундахjit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time
Read I/O time Общее время, потраченное при выполнении запроса на чтение блоков blk_read_time
Write I/O time Общее время, потраченное при выполнении запроса на запись блоков blk_write_time
Usr CPU time Процессорное время, потраченное в пользовательском режиме, в секундахrusage.user_time
Sys CPU time Процессорное время, потраченное в режиме ядра, в секундахrusage.system_time
Plans Сколько раз строился данный план запроса plans
Executions Сколько раз выполнялся план запроса calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by planning time» показывает запросы с наибольшей длительностью планирования, определяемой по значению поля total_plan_time представления pgpro_stats_statements или pg_stat_statements. Столбцы этой таблицы перечислены в Таблице G.31.

Таблица G.31. Top SQL by planning time (SQL-запросы с наибольшей длительностью планирования)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Plan elapsed Общее время, затраченное на построение плана данного запроса, в секундах total_plan_time
%Elapsed Отношение total_plan_time к сумме total_plan_time и total_exec_time для данного плана 
Mean plan time Среднее время планирования данного запроса, в миллисекундах mean_plan_time
Min plan time Минимальное время планирования данного запроса, в миллисекундах min_plan_time
Max plan time Максимальное время планирования данного запроса, в миллисекундах max_plan_time
StdErr plan time Стандартное отклонение времени, затраченного на планирование запроса, в миллисекундах stddev_plan_time
Plans Сколько раз строился данный план запроса plans
Executions Сколько раз выполнялся план запроса calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by execution time» показывает запросы с наибольшей длительностью выполнения, определяемой по значению поля total_time представления pgpro_stats_statements или pg_stat_statements. Столбцы этой таблицы перечислены в Таблице G.32.

Таблица G.32. Top SQL by execution time (SQL-запросы с наибольшей длительностью выполнения)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Exec Общее время, потраченное на выполнение плана запроса, в секундах total_exec_time
%Elapsed Процент времени total_exec_time, затраченного на выполнение плана, от времени выполнения данного оператора 
%Total Отношение времени total_exec_time, затраченного на выполнение плана, к общему времени выполнения всех запросов в кластере 
JIT Time Общее время, затраченное на выполнение этого плана оператора с применением JIT, в секундахjit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time
Read I/O time Общее время, затраченное на чтение страниц при выполнении плана, в секундах blk_read_time
Write I/O time Общее время, затраченное на запись страниц при выполнении плана, в секундах blk_write_time
Usr CPU time Процессорное время, потраченное в пользовательском режиме, в секундахrusage.user_time
Sys CPU time Процессорное время, потраченное в режиме ядра, в секундахrusage.system_time
Rows Число строк, полученных или обработанных при выполнении плана rows
Mean execution time Среднее время, потраченное на выполнение плана, в миллисекундах mean_exec_time
Min execution time Минимальное время, потраченное на выполнение плана, в миллисекундах min_exec_time
Max execution time Максимальное время, потраченное на выполнение плана, в миллисекундах max_exec_time
StdErr execution time Стандартное отклонение времени, затраченного на выполнение плана, в миллисекундах stddev_exec_time
Executions Сколько раз выполнялся план calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by mean execution time» показывает pgpro_pwr.max запросов с наибольшей средней длительностью выполнения, определяемой по значению поля mean_time или mean_exec_time представления pgpro_stats_statements или pg_stat_statements. Столбцы этой таблицы перечислены в Таблице G.33.

Таблица G.33. Top SQL by mean execution time (SQL-запросы с наибольшей средней длительностью выполнения)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Mean execution time Среднее время, потраченное на выполнение оператора, в миллисекундах mean_exec_time
Min execution time Минимальное время, потраченное на выполнение оператора, в миллисекундах min_exec_time
Max execution time Максимальное время, потраченное на выполнение оператора, в миллисекундах max_exec_time
StdErr execution time Стандартное отклонение времени, затраченного на выполнение оператора, в миллисекундах stddev_exec_time
Exec Время, потраченное на выполнение этого оператора, в секундах total_exec_time
%Elapsed Время выполнения этого оператора в процентах от общего времени, затраченного на оператор
%Total Время выполнения этого оператора в процентах от общего времени, затраченного на все операторы в кластере
JIT time Общее время, затраченное на выполнение этого оператора с применением JIT, в секундахjit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time
Read I/O time Время, затраченное на чтение блоков, в секундах blk_read_time
Write I/O time Время, затраченное на запись блоков, в секундах blk_write_time
Rows Число строк, полученных или обработанных оператором rows
Executions Счётчик выполнений этого оператора calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by executions» показывает запросы, которые выполнялись чаще других, что определяется по значению поля calls представления pgpro_stats_statements или pg_stat_statements. Столбцы этой таблицы перечислены в Таблице G.34.

Таблица G.34. Top SQL by executions (Наиболее частые SQL-запросы)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Executions Сколько раз выполнялся план запроса calls
%Total Отношение числа выполнений этого запроса (calls) к сумме значений calls по всем запросам, выполненным в кластере 
Rows Число строк, полученных или обработанных при выполнении плана rows
Mean Среднее время, потраченное на выполнение плана, в миллисекундах mean_exec_time
Min Минимальное время, потраченное на выполнение плана, в миллисекундах min_exec_time
Max Максимальное время, потраченное на выполнение плана, в миллисекундах max_exec_time
StdErr Стандартное отклонение времени, затраченного на выполнение плана, в миллисекундах stddev_time
Elapsed Общее время, потраченное на выполнение плана запроса, в секундах total_exec_time
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by I/O wait time» показывает запросы с наибольшей длительностью операций чтения/записи, определяемой как сумма полей blk_read_time и blk_write_time представления pgpro_stats_statements или pg_stat_statements. Столбцы этой таблицы перечислены в Таблице G.35. Значения времени в ней выражаются в секундах.

Таблица G.35. Top SQL by I/O wait time (SQL-запросы с наибольшим временем I/O)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
IO(s) Общее время, затраченное на чтение/запись при выполнении плана, то есть время ввода-выводаblk_read_time + blk_write_time
R(s) Общее время, затраченное на чтение при выполнении плана blk_read_time
W(s) Общее время, затраченное на запись при выполнении плана blk_write_time
%Total Отношение времени ввода-вывода при выполнении этого плана к общему времени ввода-вывода для всех запросов в кластере 
Shr Reads Общее число разделяемых блоков, прочитанных при выполнении плана shared_blks_read
Loc Reads Общее число локальных блоков, прочитанных при выполнении плана local_blks_read
Tmp Reads Общее число временных блоков, прочитанных при выполнении плана temp_blks_read
Shr Writes Общее число разделяемых блоков, записанных при выполнении планаshared_blks_written
Loc Writes Общее число локальных блоков, записанных при выполнении плана local_blks_written
Tmp Writes Общее число временных блоков, записанных при выполнении плана temp_blks_written
Elapsed(s) Общее время, затраченное на выполнение плана запросаtotal_plan_time + total_exec_time
Executions Сколько раз выполнялся план запроса calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by shared blocks fetched» показывает запросы с наибольшим количеством полученных (с диска или из кеша) блоков, что помогает выявить запросы, наиболее активно читающие данные. Столбцы этой таблицы перечислены в Таблице G.36.

Таблица G.36. Top SQL by shared blocks fetched (SQL-запросы, получившие максимум разделяемых блоков)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Blks fetched Число блоков, полученных при выполнении этого плана запросаshared_blks_hit + shared_blks_read
%Total Отношение числа блоков, полученных при выполнении этого плана, к общему числу блоков, полученных при выполнении всех запросов в кластере 
Hits(%) Отношение числа блоков, полученных из буферов, к общему числу полученных блоков 
Elapsed Общее время, затраченное на выполнение плана запроса, в секундахtotal_plan_time + total_exec_time
Rows Число строк, полученных или обработанных при выполнении плана rows
Executions Сколько раз выполнялся план запроса calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by shared blocks read» показывает запросы с наибольшим количеством прочитанных разделяемых блоков, что помогает выявить запросы, наиболее активно читающие данные. Столбцы этой таблицы перечислены в Таблице G.37.

Таблица G.37. Top SQL by shared blocks read (SQL-запросы, прочитавшие максимум разделяемых блоков)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператораplanid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Reads Количество прочитанных разделяемых блоков при выполнении этого плана shared_blks_read
%Total Отношение количества разделяемых блоков, прочитанных для этого плана, к количеству разделяемых блоков, прочитанных всеми выполненными в кластере запросами 
Hits(%) Отношение числа блоков, полученных из буферов, к общему числу блоков, полученных при выполнении этого плана 
Elapsed Общее время, затраченное на выполнение плана запроса, в секундахtotal_plan_time + total_exec_time
Rows Число строк, полученных или обработанных при выполнении плана rows
Executions Сколько раз выполнялся план запроса calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by shared blocks dirtied» показывает запросы с наибольшим количеством загрязнённых разделяемых буферов, что помогает выявить запросы, наиболее активно меняющие данные. Столбцы этой таблицы перечислены в Таблице G.38.

Таблица G.38. Top SQL by shared blocks dirtied (SQL-запросы, «загрязнившие» максимум разделяемых блоков)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Dirtied Количество разделяемых блоков, загрязнённых при выполнении этого плана shared_blks_dirtied
%Total Отношение количества загрязнённых разделяемых буферов для этого плана к количеству разделяемых блоков, загрязнённых всеми запросами, выполненными в кластере 
Hits(%) Отношение числа блоков, полученных из буферов, к общему числу блоков, полученных при выполнении этого плана 
WAL Общий объём WAL (в байтах), сгенерированный при выполнении планаwal_bytes
%Total Отношение объёма WAL, сгенерированного при выполнении плана, ко всему объёму WAL, сгенерированному в кластере 
Elapsed Общее время, затраченное на выполнение плана запроса, в секундахtotal_plan_time + total_exec_time
Rows Число строк, полученных или обработанных при выполнении плана rows
Executions Сколько раз выполнялся план запроса calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by shared blocks written» показывает запросы, записавшие наибольшее количество блоков. Столбцы этой таблицы перечислены в Таблице G.39.

Таблица G.39. Top SQL by shared blocks written (SQL-запросы, записавшие максимум разделяемых блоков)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Written Количество блоков, записанных при выполнении плана shared_blks_written
%Total Отношение числа блоков, записанных при выполнении этого плана, к общему числу записанных блоков в кластереОтношение shared_blks_written к pg_stat_bgwriter.buffers_checkpoint+ pg_stat_bgwriter.buffers_clean+ pg_stat_bgwriter.buffers_backend
%BackendW Отношение числа блоков, записанных при выполнении этого плана, к общему числу блоков, записанных обслуживающими процессамиОтношение shared_blks_written к pg_stat_bgwriter.buffers_backend
Hits(%) Отношение числа блоков, полученных из буферов, к общему числу блоков, полученных при выполнении этого плана 
Elapsed Общее время, затраченное на выполнение плана запроса, в секундахtotal_plan_time + total_exec_time
Rows Число строк, полученных или обработанных при выполнении плана rows
Executions Сколько раз выполнялся план запроса calls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by WAL size» показывает запросы, которые породили наибольший объём записей WAL. Столбцы этой таблицы перечислены в Таблице G.40.

Таблица G.40. Top SQL by WAL size (SQL-запросы, породившие наибольший объём WAL)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператораplanid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
WAL Общий объём WAL (в байтах), сгенерированный при выполнении планаwal_bytes
%Total Отношение объёма WAL, сгенерированного при выполнении плана, ко всему объёму WAL, сгенерированному в кластере 
WAL buffers full Количество случаев переполнения буферов WAL 
Dirtied Количество разделяемых блоков, загрязнённых при выполнении этого планаshared_blks_dirtied
WAL FPI Общее число образов полных страниц в WAL, сгенерированных при выполнении планаwal_fpi
WAL records Общее число записей WAL, сгенерированных при выполнении планаwal_records
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by temp usage» показывает запросы с наибольшим объёмом ввода-вывода временных блоков, которое считается как сумма полей temp_blks_read, temp_blks_written, local_blks_read и local_blks_written. Столбцы этой таблицы перечислены в Таблице G.41.

Таблица G.41. Top SQL by temp usage (SQL-запросы с максимальным использованием временных блоков)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператораplanid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Local fetched Число полученных локальных блоковlocal_blks_hit + local_blks_read
Hits(%) Отношение числа локальных блоков, полученных из буферов, к общему числу полученных локальных блоков 
Write Local (blk) Количество блоков, записанных при выполнении этого плана и относящихся к временным таблицамlocal_blks_written
Write Local %Total Отношение значения local_blks_written этого плана к сумме local_blks_written по всем запросам, выполненным в кластере 
Read Local (blk) Количество блоков, прочитанных при выполнении этого плана и относящихся к временным таблицамlocal_blks_read
Read Local %Total Отношение значения local_blks_read этого плана к сумме local_blks_written по всем запросам, выполненным в кластере 
Write Temp (blk) Количество временных блоков, записанных при выполнении этого планаtemp_blks_written
Write Temp %Total Отношение значения temp_blks_written этого плана к сумме temp_blks_written по всем запросам, выполненным в кластере 
Read Temp (blk) Количество временных блоков, прочитанных при выполнении этого планаtemp_blks_read
Read Temp %Total Отношение значения temp_blks_read этого плана к сумме temp_blks_read по всем запросам, выполненным в кластере 
Elapsed Общее время, затраченное на выполнение плана запроса, в секундахtotal_plan_time + total_exec_time
Rows Число строк, полученных или обработанных при выполнении планаrows
Executions Сколько раз выполнялся план запросаcalls
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

Таблица отчёта «Top SQL by invalidation messages sent» показывает операторы, для которых было отправлено наибольшее число событий аннулирования. Столбцы этой таблицы перечислены в Таблице G.42.

Таблица G.42. Top SQL by invalidation messages sent (Операторы с наибольшим числом отправленных событий аннулирования)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N).queryid
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Invalidation messages sent Общее количество событий аннулирования, которые были отправлены обслуживающими процессами, выполняющими этот оператор. Статистика предоставляется для соответствующих типов сообщений pgpro_stats_inval_msgsПоля столбца pgpro_stats_statements.inval_msgs

G.5.11.4.1. rusage statistics (Статистика использования ресурсов) #

Этот раздел добавляется в отчёт, только если в отчётном интервале было доступно расширение pgpro_stats или pg_stat_kcache.

Таблица отчёта «Top SQL by system and user time» показывает запросы с наибольшей суммой значений полей user_time и system_time в представлении pg_stat_kcache или pgpro_stats_totals. Столбцы этой таблицы перечислены в Таблице G.43. Значения времени в ней выражаются в секундах.

Таблица G.43. Top SQL by system and user time (SQL-запросы с наибольшей системной и пользовательской нагрузкой CPU)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
User Time Plan Время процессора в пользовательском режиме, затраченное на планирование plan_user_time
User Time Exec Время процессора в пользовательском режиме, затраченное на выполнение exec_user_time
User Time %Total Отношение значения plan_user_time + exec_user_time к общему времени использования процессора в пользовательском режиме всеми запросами 
System Time Plan Время процессора в режиме ядра, затраченное на планирование plan_system_time
System Time Exec Время процессора в режиме ядра, затраченное на выполнение exec_system_time
System Time %Total Отношение значения plan_system_time + exec_system_time к общему времени использования процессора в режиме ядра всеми запросами 

Таблица отчёта «Top SQL by reads/writes done by filesystem layer» показывает запросы с наибольшей суммой значений reads и writes представления pg_stat_kcache. Столбцы этой таблицы перечислены в Таблице G.44.

Таблица G.44. Top SQL by reads/writes done by filesystem layer (SQL-запросы, выполнившие максимум операций чтения/записи в файловой системе)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператора planid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Read Bytes Plan Количество байт, прочитанное при планировании plan_reads
Read Bytes Exec Количество байт, прочитанное при выполнении exec_reads
Read Bytes %Total Отношение значения plan_reads + exec_reads к общему количеству байт, прочитанному на уровне файловой системы всеми запросами 
Write Bytes Plan Количество байт, записанное при планировании plan_writes
Write Bytes Exec Количество байт, записанное при выполнении exec_writes
Write Bytes %Total Отношение значения plan_writes + exec_writes к общему количеству байт, прочитанному на уровне файловой системы всеми запросами 

G.5.11.5. SQL query wait statistics (Статистика ожидания по SQL-запросам) #

Если в отчётном интервале было доступно расширение pgpro_stats, в этом разделе отчёта будет содержаться таблица, разделённая на секции, в каждой из которой будут показываться запросы с наибольшем временем ожидания в целом или с наибольшим временем ожидания определённого типа события. Разделы этой таблицы, относящиеся к определённым событиям ожидания, располагаются в порядке уменьшения общего времени ожидания событий данного типа. Столбцы этой таблицы перечислены в Таблице G.45.

Таблица G.45. SQL query wait statistics (Статистика ожидания по SQL-запросам)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператораplanid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Waited Общее время, затраченное на ожидание всех типов событий при выполнении этого плана, в секундах 
%Total Отношение суммарного времени ожидания при выполнении этого плана к общему времени ожидания для всех запросов в кластере 
Details Детализация событий ожидания по типам 

Если расширение, собирающее статистику операторов в отчётном интервале, собрало статистику JIT, в отчёте выводится таблица «Top SQL by JIT elapsed time», где показаны основные операторы по сумме значений полей jit_*_time представления pgpro_stats_statements или pg_stat_statements. Столбцы этой таблицы перечислены в Таблице G.46. Значения времени в ней выражаются в секундах.

Таблица G.46. Top SQL by JIT elapsed time (SQL-запросы с наибольшей длительностью JIT)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Plan ID Хеш-код для идентификации нормализованного плана оператораplanid
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
JIT Time Общее время, затраченное на выполнение этого плана оператора с применением JITjit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time
Generation count Общее число функций, скомпилированных в JIT-код при выполнении данного оператораСумма значений jit_functions
Generation time Общее время, затраченное на компиляцию JIT-кода при выполнении оператораСумма значений jit_generation_time
Inlining count Сколько раз встраивались функцииСумма значений jit_inlining_count
Inlining time Общее время, затраченное на встраивание функций при выполнении оператораСумма значений jit_inlining_time
Optimization count Число JIT-оптимизаций для данного оператораСумма значений jit_optimization_count
Optimization time Общее время, затраченное на JIT-оптимизацию при выполнении данного оператораСумма значений jit_optimization_time
Emission count Сколько раз выдавался кодСумма значений jit_emission_count
Emission time Общее время, затраченное на выдачу кода при выполнении оператораСумма значений jit_emission_time
Deform count Число функций преобразования кортежей, скомпилированных в JIT-код при выполнении оператора
Deform time Общее время, затраченное оператором на компилирование преобразования кортежей в JIT-код
Plan Time Общее время, затраченное на планирование запроса total_plan_time
Exec Time Общее время, затраченное на выполнение плана запроса total_exec_time
Read I/O time Общее время, потраченное при выполнении запроса на чтение блоков blk_read_time
Write I/O time Общее время, потраченное при выполнении запроса на запись блоков blk_write_time
%Cvr Охват: продолжительность сбора статистики по операторам в процентах от продолжительности отчётного интервала

G.5.11.6. Top SQL by parallel workers usage (SQL-запросы с максимальным использованием параллельных рабочих процессов) #

Раздел отчёта «Top SQL by parallel workers usage» показывает запросы с наибольшим количеством запланированных и запущенных параллельных рабочих процессов, определяемым как сумма полей parallel_workers_to_launch и parallel_workers_launched представления pg_stat_statements. Некоторые статистические данные доступны, начиная с Postgres Pro 18. Столбцы этой таблицы перечислены в Таблице G.47. Значения времени в ней выражаются в секундах.

Таблица G.47. Top SQL by parallel workers usage (SQL-запросы с максимальным использованием параллельных рабочих процессов)

СтолбецОписаниеПоле/вычисление
Query ID Шестнадцатеричное представление queryid. Хеш от идентификатора запроса, идентификатора базы данных и идентификатора пользователя приводится в квадратных скобках. Для вложенных операторов (таких как операторы, вызываемые внутри операторов верхнего уровня) здесь будет отображаться метка (N). 
Database Имя базы данных, в которой выполнялся запросВыводится из dbid
User Имя пользователя, выполняющего запросВыводится из userid
Parallel workers Planned Число параллельных рабочих процессов, которые планируется запустить
Parallel workers Launched Число запущенных параллельных рабочих процессов
Exec Время процессора в режиме ядра, затраченное на выполнениеexec_system_time или system_time
Blks fetched Количество считанных блоковshared_blks_hit + shared_blks_read
Shr Reads Общее количество разделяемых блоков, прочитанных при выполнении плана операторов shared_blks_read
Loc Reads Общее количество локальных блоков, прочитанных при выполнении плана операторов local_blks_read
Tmp Reads Общее количество временных блоков, прочитанных при выполнении плана операторов temp_blks_read
Read I/O time Время, затраченное на чтение блоков blk_read_time
Write I/O time Время, затраченное на запись блоков blk_write_time

G.5.11.7. Complete list of SQL texts (Полный текст SQL-запросов) #

Раздел отчёта «Complete list of SQL texts» содержит таблицу с полным текстом и планом запроса для всех SQL-операторов, упомянутых в отчёте. Перейти к тексту соответствующего запроса/плана, можно из любой таблицы со статистикой по ссылке Query ID/Plan ID. Столбцы этой таблицы перечислены в Таблице G.48.

Таблица G.48. Complete list of SQL texts (Полный текст SQL-запросов)

СтолбецОписание
ID Шестнадцатеричное представление идентификатора запроса или плана
Query/Plan Text Текст или план запроса

G.5.11.8. Schema object statistics (Статистика по объектам схемы) #

Таблицы в этом разделе отчёта показывают наиболее активно используемые объекты базы согласно информации Сборщика статистики в Postgres Pro. Таблицы отчётов, содержащие данные по таблицам и индексам, позволяют просматривать параметры хранения. Щелчок мышью по соответствующей строке показывает параметры хранения непосредственно под строкой.

Таблица отчёта «Top tables by estimated sequentially scanned volume» показывает таблицы с наибольшим приблизительным объёмом, просканированным последовательным образом. Исходя из этого, можно понять, что для каких-то таблиц не хватает индексов. В отсутствие данных о размере, собираемых функцией pg_relation_size(), оценка размера берётся из поля pg_class.relpages. Для обозначения меньшей точности оценки она отображается в квадратных скобках. Данная информация основана на представлении pg_stat_all_tables. Столбцы этой таблицы перечислены в Таблице G.49.

Таблица G.49. Top tables by estimated sequentially scanned volume (Таблицы с наибольшим объёмом последовательно сканированных блоков)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
~SeqBytes Приблизительный объём, прочитанный при последовательном сканированииСумма (pg_relation_size() * seq_scan)
SeqScan Число операций последовательного сканирования, выполненных в таблицеseq_scan
IxScan Число операций сканирования по индексу, выполненных в этой таблицеidx_scan
IxFet Количество «живых» строк, отобранных при сканированиях по индексуidx_tup_fetch
Ins Количество вставленных строкn_tup_ins
Upd Количество изменённых строкn_tup_upd
Del Количество удалённых строкn_tup_del
Upd(HOT) Количество строк, изменённых по схеме HOTn_tup_hot_upd

В таблице отчёта «Top tables by blocks fetched» полученными блоками считаются блоки, как прочитанные с диска (read), так и найденные в общих буферах (hit). В ней показываются таблицы с максимальным суммарным количеством блоков, полученных из кучи, из индексов, из таблицы TOAST (при наличии) и индекса таблицы TOAST (при наличии). Это помогает понять, какие таблицы активнее других используют блоки данных. Эта информация основана на представлении pg_statio_all_tables. Столбцы этой таблицы перечислены в Таблице G.50.

Таблица G.50. Top tables by blocks fetched (Таблицы, для которых получено максимум блоков)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
Heap Blks Число блоков, полученных из кучи таблицыheap_blks_read + heap_blks_hit
Heap Blks %Total Отношение числа блоков, полученных из кучи таблицы, к общему числу блоков, полученных запросами в кластере 
Ix Blks Число блоков, полученных из индексов таблицыidx_blks_read + idx_blks_hit
Ix Blks %Total Отношение числа блоков, полученных из индексов таблицы, к общему числу блоков, полученных запросами в кластере 
TOAST Blks Число блоков, полученных из связанной таблицы TOASTtoast_blks_read + toast_blks_hit
TOAST Blks %Total Отношение числа блоков, полученных из связанной таблицы TOAST, к общему числу блоков, полученных запросами в кластере 
TOAST-Ix Blks Число блоков, полученных из индекса связанной таблицы TOASTtidx_blks_read + tidx_blks_hit
TOAST-Ix Blks %Total Отношение числа блоков, полученных из индекса связанной таблицы TOAST, к общему числу блоков, полученных запросами в кластере 

В таблице отчёта «Top tables by blocks read» показаны таблицы с максимальным суммарным количество блоков прочитанных из кучи, из индексов, из таблицы TOAST (при наличии) и индекса таблицы TOAST (при наличии). Это помогает понять, какие таблицы активнее других читают блоки данных с диска. Эта информация основана на представлении pg_statio_all_tables. Столбцы этой таблицы перечислены в Таблице G.51.

Таблица G.51. Top tables by blocks read (Таблицы, для которых прочитано максимум блоков)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
Heap Blks Число блоков, прочитанных из кучи таблицыheap_blks_read
Heap Blks %Total Отношение числа блоков, прочитанных из кучи таблицы, к общему числу блоков, прочитанных запросами в кластере 
Ix Blks Число блоков, прочитанных из индексов таблицы idx_blks_read
Ix Blks %Total Отношение числа блоков, прочитанных из индексов таблицы, к общему числу блоков, прочитанных запросами в кластере 
TOAST Blks Число блоков, прочитанных из таблицы TOAST, относящейся к данной toast_blks_read
TOAST Blks %Total Отношение числа блоков, прочитанных из связанной таблицы TOAST, к общему числу блоков, прочитанных запросами в кластере 
TOAST-Ix Blks Число блоков, прочитанных из индекса таблицы TOAST, относящейся к данной tidx_blks_read
TOAST-Ix Blks %Total Отношение числа блоков, прочитанных из индекса связанной таблицы TOAST, к общему числу блоков, прочитанных запросами в кластере 
Hit(%) Отношение числа блоков таблицы, индекса, TOAST-таблицы и индекса TOAST-таблицы, полученных из буферов для данной таблицы, к общему числу блоков, полученных для этой таблицы либо из файловой системы, либо из буферов 

В таблице отчёта «Top DML tables» показаны таблицы с наибольшим числом строк, затронутых операциями DML, то есть с наибольшей суммой значений n_tup_ins, n_tup_upd и n_tup_del (включая таблицы TOAST). Эта информация основана на представлении pg_stat_all_tables. Столбцы этой таблицы перечислены в Таблице G.52.

Таблица G.52. Top DML tables (Таблицы с наибольшим объёмом DML-изменений)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
Ins Количество вставленных строк n_tup_ins
Upd Количество изменённых строк, включая изменения по схеме HOT n_tup_upd
Del Количество удалённых строк n_tup_del
Upd(HOT) Количество строк, изменённых по схеме HOT n_tup_hot_upd
SeqScan Число операций последовательного сканирования, выполненных в таблице seq_scan
SeqFet Количество «живых» строк, прочитанных при последовательных чтениях seq_tup_read
IxScan Количество сканирований по индексу, запущенных по этой таблице idx_scan
IxFet Количество «живых» строк, отобранных при сканированиях по индексу idx_tup_fetch

В таблице отчёта «Top tables by updated/deleted tuples» показаны таблицы с наибольшим количеством кортежей, затронутых операциями UPDATE/DELETE, то есть с наибольшей суммой значений n_tup_upd и n_tup_del (включая таблицы TOAST). Эта информация основана на представлении pg_stat_all_tables. Столбцы этой таблицы перечислены в Таблице G.53.

Таблица G.53. Top tables by updated/deleted tuples (Таблицы с наибольшим количеством изменённых/удалённых кортежей)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
Upd Количество изменённых строк, включая изменения по схеме HOTn_tup_upd
Upd(HOT) Количество строк, изменённых по схеме HOTn_tup_hot_upd
Del Количество удалённых строкn_tup_del
Vacuum count Сколько раз очистка этой таблицы была выполнена вручную (VACUUM FULL не учитывается)vacuum_count
Autovacuum count Сколько раз очистка этой таблицы была выполнена фоновым процессом автоочисткиautovacuum_count
Analyze count Сколько раз сбор статистики для этой таблицы был выполнен вручнуюanalyze_count
AutoAnalyze count Сколько раз сбор статистики для этой таблицы был выполнен фоновым процессом автоочисткиautoanalyze_count

Таблица отчёта «Top tables by removed all-visible marks» показывает таблицы с наибольшим количеством меток полной видимости, удалённых обслуживающими процессами из карты видимости. Этот раздел отчёта отображается только при наличии соответствующей статистики. В Таблице G.54 перечислены столбцы этой таблицы отчёта.

Таблица G.54. Top tables by removed all-visible marks (Таблицы с наибольшим количеством удалённых меток полной видимости)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
All-Visible marks cleared Общее число меток полной видимости, удалённых из карты видимости отношенияrev_all_visible_pages
All-Visible marks set Общее число меток полной видимости, установленных в карте видимости отношенияpages_all_visible
All-Visible marks %Set Отношение числа установленных меток полной видимости к общему числу установленных и удалённых меток полной видимостиpages_all_visible * 100% / (rev_all_visible_pages + pages_all_visible)
Vacuum count Сколько раз очистка этой таблицы была выполнена вручную (VACUUM FULL не учитывается)vacuum_count
Autovacuum count Сколько раз очистка этой таблицы была выполнена фоновым процессом автоочисткиautovacuum_count

Таблица отчёта «Top tables by removed all-frozen marks» показывает таблицы с наибольшим количеством меток полной заморозки, удалённых обслуживающими процессами из карты видимости. Этот раздел отчёта отображается только при наличии соответствующей статистики. В Таблице G.55 перечислены столбцы этой таблицы отчёта.

Таблица G.55. Top tables by removed all-visible marks (Таблицы с наибольшим количеством удалённых меток полной заморозки)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
All-Frozen marks cleared Общее число меток полной заморозки, удалённых из карты видимости отношенияrev_all_frozen_pages
All-Frozen marks set Общее число меток полной заморозки, установленных в карте видимости отношенияpages_frozen
All-Frozen marks %Set Отношение числа установленных меток полной заморозки к общему числу установленных и удалённых меток полной заморозкиpages_frozen * 100% / (rev_all_frozen_pages + pages_frozen)
Vacuum count Сколько раз очистка этой таблицы была выполнена вручную (VACUUM FULL не учитывается)vacuum_count
Autovacuum count Сколько раз очистка этой таблицы была выполнена фоновым процессом автоочисткиautovacuum_count

Таблица отчёта «Top tables by new-page updated tuples» (Таблицы с наибольшим количеством изменённых кортежей, попавших на новую страницу) показывает таблицы с наибольшим количеством изменённых строк, новая версия которых переходит на новую страницу кучи, оставляя исходную версию с полем t_ctid, которое указывает на другую страницу кучи. Учитываются только изменения не по схеме HOT. Столбцы этой таблицы перечислены в Таблице G.56.

Таблица G.56. Top tables by new-page updated tuples (Таблицы с наибольшим количеством изменённых кортежей, попавших на новую страницу)

СтолбецОписание
DB Имя базы данных, к которой относится таблица
Tablespace Имя табличного пространства, в котором находится таблица
Schema Имя схемы, содержащей таблицу
Table Имя таблицы
NP Upd Количество изменённых строк, попавших на новую страницу кучи
%Upd Количество изменённых строк, попавших на новую страницу, в процентах от количества всех изменённых строк
Upd Количество изменённых строк, включая изменения по схеме HOT
Upd(HOT) Количество строк, изменённых по схеме HOT (т. е. без отдельного изменения индекса)

Таблица отчёта «Top growing tables» показывает таблицы, которые увеличились в объёме больше других. Эта информация основана на представлении pg_stat_all_tables. В отсутствие данных о размере, собираемых функцией pg_relation_size(), оценка размера берётся из поля pg_class.relpages. Для обозначения меньшей точности оценки она отображается в квадратных скобках. Столбцы этой таблицы перечислены в Таблице G.57.

Таблица G.57. Top growing tables (Наиболее быстро растущие таблицы)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится таблица 
Tablespace Имя табличного пространства, в котором находится таблица 
Schema Имя схемы, содержащей таблицу 
Table Имя таблицы 
Size Размер таблицы в момент получения последней выборки в отчётном интервалеpg_table_size() - pg_relation_size(toast)
Growth Увеличение размера таблицы 
Ins Количество вставленных строкn_tup_ins
Upd Количество изменённых строк, включая изменения по схеме HOTn_tup_upd
Del Количество удалённых строкn_tup_del
Upd(HOT) Количество строк, изменённых по схеме HOTn_tup_hot_upd

В таблице отчёта «Top indexes by blocks fetched» полученными блоками считаются блоки как прочитанные с диска (read), так и найденные в общих буферах (hit). Эта информация основана на представлении pg_statio_all_indexes. Столбцы этой таблицы перечислены в Таблице G.58.

Таблица G.58. Top indexes by blocks fetched (Индексы, из которых получено максимум блоков)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится индекс 
Tablespace Имя табличного пространства, в котором находится индекс 
Schema Имя схемы, содержащей нижележащую таблицу 
Table Имя таблицы, для которой создан индекс 
Index Имя индекса 
Scans Количество произведённых сканирований по этому индексуidx_scan
Blks Число блоков, полученных из индексаidx_blks_read + idx_blks_hit
%Total Отношение числа блоков, полученных из индекса, к общему числу блоков, полученных запросами в кластере 

Таблица отчёта «Top indexes by blocks read» также основана на представлениях pg_statio_all_indexes и pg_stat_all_indexes. Столбцы этой таблицы перечислены в Таблице G.59.

Таблица G.59. Top indexes by blocks fetched (Индексы, из которых прочитано максимум блоков)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится индекс 
Tablespace Имя табличного пространства, в котором находится индекс 
Schema Имя схемы, содержащей нижележащую таблицу 
Table Имя таблицы, для которой создан индекс 
Index Имя индекса 
Scans Количество произведённых сканирований по этому индексуidx_scan
Blk Reads Количество дисковых блоков, прочитанных из этого индексаidx_blks_read
%Total Отношение числа дисковых блоков, прочитанных из этого индекса, к общему числу блоков, прочитанных с диска запросами в кластере 
Hits(%) Отношение числа блоков индекса, полученных из буферов, к общему числу блоков, полученных для этого индекса 

Таблица отчёта «Top growing indexes» показывает индексы, которые увеличились в объёме больше других. Эта информация основана на представлениях pg_stat_all_tables и pg_stat_all_indexes. В отсутствие данных о размере, собираемых функцией pg_relation_size(), оценка размера берётся из поля pg_class.relpages. Для обозначения меньшей точности оценки она отображается в квадратных скобках. Столбцы этой таблицы перечислены в Таблице G.60.

Таблица G.60. Top growing tables (Наиболее быстро растущие индексы)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится индекс 
Tablespace Имя табличного пространства, в котором находится индекс 
Schema Имя схемы, содержащей нижележащую таблицу 
Table Имя таблицы, для которой создан индекс 
Index Имя индекса 
Index Size Размер индекса в момент получения последней выборки в отчётном интервалеpg_relation_size()
Index Growth Прирост объёма индекса за отчётный интервал 
Table Ins Количество строк, вставленных в нижележащую таблицуn_tup_ins
Table Upd Количество строк, изменённых в нижележащей таблицеn_tup_upd - n_tup_hot_upd
Table Del Количество строк, удалённых из нижележащей таблицыn_tup_del

Таблица отчёта «Unused indexes» показывает индексы, в нижележащих таблицах которых за отчётный интервал произведён наибольший объём изменений (требующих поддержания индекса), но при этом сами эти индексы не использовались. Индексы ограничений при этом не учитываются. Эта информация основана на представлении pg_stat_all_tables. Столбцы этой таблицы перечислены в Таблице G.61.

Таблица G.61. Unused indexes (Неиспользуемые индексы)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, к которой относится индекс 
Tablespace Имя табличного пространства, в котором находится индекс 
Schema Имя схемы, содержащей нижележащую таблицу 
Table Имя таблицы, для которой создан индекс 
Index Имя индекса 
Index Size Размер индекса в момент получения последней выборки в отчётном интервалеpg_relation_size()
Index Growth Прирост объёма индекса за отчётный интервал 
Table Ins Количество строк, вставленных в нижележащую таблицуn_tup_ins
Table Upd Количество строк, изменённых в нижележащей таблицеn_tup_upd - n_tup_hot_upd
Table Del Количество строк, удалённых из нижележащей таблицыn_tup_del

G.5.11.9. User function statistics (Статистика пользовательских функций) #

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

Таблица отчёта «Top functions by total time» показывает функции с наибольшей суммарной длительностью, таблица «Top functions by executions» — функции, выполняемые чаще других, а таблица «Top trigger functions by total time» — триггерные функции с наибольшей суммарной длительностью. Столбцы этих таблиц перечислены в Таблице G.62.

Таблица G.62. User function statistics (Статистика пользовательских функций)

СтолбецОписаниеПоле/вычисление
DB Имя базы данных, содержащей функцию 
Schema Имя схемы, содержащей функцию 
Function Имя функции 
Executions Сколько раз вызывалась функцияcalls
Total Time Общее время, затраченное на выполнение этой функции и всех других функций, вызванных еюtotal_time
Self Time Общее время, затраченное на выполнение собственно функции, без учёта других функций, которые были ею вызваныself_time
Mean Time Среднее время выполнения функцииtotal_time/calls
Mean self Time Среднее время выполнения собственно функцииself_time/calls

G.5.11.11. Cluster settings during the report interval (Параметры кластера в отчётном интервале) #

Этот раздел отчёта содержит таблицу, в которой показываются значения GUC-параметров Postgres Pro, данные функций version(), pg_postmaster_start_time(), pg_conf_load_time() и поле system_identifier функции pg_control_system(), полученные в отчётном интервале. Данные в этой таблице собраны в две группы — Defined settings (Заданные параметры) и Default settings (Параметры по умолчанию). Столбцы этой таблицы перечислены в Таблице G.77.

Таблица G.77. Cluster settings during the report interval (Параметры кластера в отчётном интервале)

СтолбецОписание
Setting Имя параметра
reset_val Поле reset_val представления pg_settings. Значения, изменявшиеся в отчётном интервале, выделяются полужирным шрифтом.
Unit Единица измерения параметра
Source Файл конфигурации, в котором определён параметр, и номер строки в нём через двоеточие
Notes Время выборки, в которой было получено данное значение в первый раз

G.5.11.12. Extension versions during the report interval (Версии расширения в отчётном интервале) #

Этот раздел отчёта содержит таблицу со списком установленных версий расширения, найденных в базах данных за отчётный интервал. Столбцы First seen и Last seen не отображаются, если версии расширения не изменялись за отчётный интервал. Столбцы этой таблицы перечислены в Таблице G.78.

Таблица G.78. Extension versions during the report interval (Версии расширения в отчётном интервале)

СтолбецОписание
Name Название расширения
DB Имя базы данных
First seen Время выборки, в которой эта версия расширения появилась в первый раз
Last seen Время выборки, в которой эта версия расширения появилась в последний раз
Version Название версии расширения

G.5.12. Диагностические средства pgpro_pwr #

В pgpro_pwr имеются средства для самодиагностики.

G.5.12.1. Сбор детальной статистики о времени выполнения процедур получения выборок #

Расширение pgpro_pwr собирает подробную информацию о длительности действий, связанных с получением выборок, когда включён параметр pgpro_pwr.track_sample_timings. Данную информацию вы можете просмотреть в представлении v_sample_timings. Столбцы этого представления перечислены в Таблице G.79.

Таблица G.79. Представление v_sample_timings

СтолбецОписание
server_name Имя сервера
sample_id Идентификатор выборки
sample_time Время получения выборки
sampling_event Этап получения выборки. Описания всех этапов приведены в Таблице G.80.
time_spent Длительность данного события

Таблица G.80. Описание событий sampling_event

СобытиеОписание
total Получение выборки (все этапы)
connect Установление подключения к серверу (с использованием dblink)
get server environment Получение от сервера GUC-параметров, списка доступных расширений и т. п.
collect database stats Получение из представления pg_stat_database статистики по базам данных
calculate database stats Вычисление изменения статистики по базам данных относительно предыдущей выборки
collect tablespace stats Получение из представления pg_tablespace статистики по табличным пространствам
collect statement stats Сбор статистики по SQL-операторам с использованием расширений pgpro_stats и pg_stat_kcache
collect wait sampling stats Сбор статистики по SQL-операторам с использованием расширения pg_wait_sampling
query pg_stat_bgwriter Сбор статистики уровня кластера с использованием представления pg_stat_bgwriter
query pg_stat_wal Сбор статистики WAL на уровне кластера с использованием представления pg_stat_wal
query pg_stat_io Сбор статистики ввода-вывода на уровне кластера с использованием представления pg_stat_io
query pg_stat_slru Сбор статистики SLRU-кеша кластера с использованием представления pg_stat_slru
query pg_stat_archiver Сбор статистики уровня кластера с использованием представления pg_stat_archiver
collect object stats Сбор статистики по объектам базы. Включает события из Таблицы G.81. Включает следующие события:
  • db:имя_бд get extensions version — составление списка версий расширений для базы данных имя_бд

  • db:имя_бд collect tables stats — сбор статистики по таблицам базы имя_бд

  • db:имя_бд collect indexes stats — сбор статистики по индексам базы имя_бд

  • db:имя_бд collect functions stats — сбор статистики по функциям базы имя_бд

  • analyzing collected data — анализ секций с собранной статистикой

processing subsamples Сбор статистики серверных процессов с использованием представления pg_stat_activity
disconnect Закрытие подключения к серверу (с использованием dblink)
maintain repository Выполнение процедур обслуживания
calculate tablespace stats Вычисление изменения статистики по табличным пространствам
calculate object stats Вычисление изменения статистики по объектам базы. Включает события из Таблицы G.82, а также:
  • merge new extensions version — обработка данных по версиям расширений

  • merge new relation storage parameters — обработка данных по параметрам хранения отношений

calculate cluster stats Вычисление изменения статистики на уровне кластера
calculate IO stats Вычисление изменения статистики ввода-вывода на уровне кластера
calculate SLRU stats Вычисление изменения статистики SLRU-кеша кластера
calculate WAL stats Вычисление изменения статистики WAL на уровне кластера
calculate archiver stats Вычисление изменения статистики архиватора
delete obsolete samples Удаление устаревших выборочных линий и выборок

Таблица G.81. Events of Collecting Statistics on Database Objects (События, связанные со сбором статистики по объектам БД)

СобытиеОписание
db:имя_бд collect tables stats Сбор статистики по таблицам базы имя_бд
db:имя_бд collect indexes stats Сбор статистики по индексам базы имя_бд
db:имя_бд collect functions stats Сбор статистики по функциям базы имя_бд

Таблица G.82. Events of Calculating Differences of Statistics on Database Objects (События, связанные с вычислением изменения статистики по объектам БД)

СобытиеОписание
calculate tables stats Вычисление изменения статистики по таблицам всех баз данных
calculate indexes stats Вычисление изменения статистики по индексам всех баз данных
calculate functions stats Вычисление изменения статистики по функциям всех баз данных

G.5.13. Важные замечания #

Используя расширение pgpro_pwr, имейте в виду следующее:

  • Postgres Pro собирает статистику о выполнении запроса после того, как он будет выполнен. Если выполнение одного запроса по времени охватывает несколько выборок, связанная с ним статистика попадёт только в ту выборку, ко времени которой он завершится. Кроме того, получить статистику по запросам, выполняемым в текущий момент, нет возможности. Также учтите, что процедуры обслуживания, например очистки и контрольных точек, обновляют статистику только при завершении.

  • В случае сброса статистики Postgres Pro информация в следующей выборке может оказаться неточной.

  • Установленные для отношений исключительные блокировки препятствуют вычислению размера этих отношений. Если функция take_sample() не сможет дождаться снятия такой блокировки в течение короткого периода времени (за 3 секунды), её выполнение прервётся и выборка не будет получена.