F.39. pgpro_pwr

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

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

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

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

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

F.39.1. Архитектура pgpro_pwr

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

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

    Примечание

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

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

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

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

F.39.2. Предварительные требования

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

F.39.2.1. Для базы данных pgpro_pwr

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

F.39.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_functions = all/pl
          

F.39.3. Установка и подготовка

Примечание

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

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

F.39.3.1. Упрощённая установка

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

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

CREATE SCHEMA profile;
CREATE EXTENSION pgpro_pwr SCHEMA profile;

F.39.3.2. Развёрнутая установка

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

F.39.3.2.1. В базе данных целевого сервера

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

CREATE USER stat_user PASSWORD 'stat_user_pwd';

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

GRANT pg_read_all_stats TO stat_user;
GRANT EXECUTE ON FUNCTION pgpro_stats_statements_reset TO stat_user;
F.39.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.

F.39.3.3. Настройка параметров расширения

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

pgpro_pwr.max (integer)

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

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

pgpro_pwr.max_sample_age (integer)

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

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

pgpro_pwr.track_sample_timings (boolean)

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

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

F.39.4. Управление серверами

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

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

F.39.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)

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

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)

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

show_servers()

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

F.39.5. Управление выборками

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

F.39.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, если она была сброшена после предыдущей выборки.

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

F.39.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)

F.39.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. Выборочная линия

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

F.39.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)

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

Аргументы:

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

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

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

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

Примечание

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

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

Пример:

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

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

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

F.39.7. Управление выборочными линиями

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

F.39.7.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.

F.39.8. Экспорт и импорт данных

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

F.39.8.1. Экспорт данных

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

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

F.39.8.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() не обрабатывала их.

F.39.8.3. Функции экспорта и импорта

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

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

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

Аргументы:

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

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

  • obfuscate_queries — если равняется true, тексты запросов экспортируются в виде хеша MD5.

import_data(data regclass)

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

F.39.9. Функции построения отчётов

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

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

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

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

F.39.9.1. Обычные отчёты

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

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

Строит обычный отчёт.

Аргументы:

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

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

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

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

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

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

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

F.39.9.2. Сравнительные отчёты

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

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

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

Аргументы:

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

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

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

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

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

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

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

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

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

F.39.9.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

F.39.10. Разделы отчёта pgpro_pwr

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

F.39.10.1. Server statistics (Серверная статистика)

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

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

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

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

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

Таблица F.28. 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

В таблице отчёта «Cluster statistics» содержатся данные из представления pg_stat_bgwriter. Строки данной таблицы перечислены в Таблице F.29. Значения времени в ней выражаются в секундах.

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

СтрокаОписаниеПоле/вычисление
Scheduled checkpointsКоличество запланированных контрольных точек, которые уже были выполненыcheckpoints_timed
Requested checkpointsКоличество запрошенных контрольных точек, которые уже были выполненыcheckpoints_req
Checkpoint write time (s)Общее время, которое было затрачено на этап обработки контрольной точки, в котором файлы записываются на дискcheckpoint_write_time
Checkpoint sync time (s)Общее время, которое было затрачено на этап обработки контрольной точки, в котором файлы синхронизируются с дискомcheckpoint_sync_time
Checkpoint buffers writtenКоличество буферов, записанных при выполнении контрольных точекbuffers_checkpoint
Background buffers writtenКоличество буферов, записанных фоновым процессом записиbuffers_clean
Backend buffers writtenКоличество буферов, записанных самим серверным процессомbuffers_backend
Backend fsync countСколько раз серверному процессу пришлось выполнить fsync самостоятельно (обычно фоновый процесс записи сам обрабатывает эти вызовы, даже когда серверный процесс выполняет запись самостоятельно)buffers_backend_fsync
Bgwriter interrupts (too many buffers)Сколько раз фоновый процесс записи останавливал сброс грязных страниц на диск из-за того, что записал слишком много буферовmaxwritten_clean
Number of buffers allocatedОбщее количество выделенных буферовbuffers_alloc
WAL generatedОбщий сгенерированный объём WALПриращение значения pg_current_wal_lsn()
WAL segments archivedОбщее количество заархивированных сегментов WALОсновано на значении pg_stat_archiver.archived_count
WAL segments archive failedОбщее количество ошибок, возникших при архивировании сегментов WALОсновано на значении pg_stat_archiver.failed_count

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

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

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

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

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

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

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

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

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

F.39.10.2. Статистика SQL-запросов

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

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

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

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

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

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

СтолбецОписаниеПоле/вычисление
Query IDИдентификатор запроса в виде хеша от идентификатора базы, идентификатора пользователя и текста запроса. Шестнадцатеричное представление queryid приводится в квадратных скобках. 
Plan IDВнутренний хеш-код, вычисленный для дерева плана запросаplanid
DatabaseИмя базы данных, в которой выполнялся запросВыводится из dbid
Plan elapsed(s)Общее время, затраченное на построение плана данного запроса, в секундах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

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

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

СтолбецОписаниеПоле/вычисление
Query IDИдентификатор запроса в виде хеша от идентификатора базы, идентификатора пользователя и текста запроса. Шестнадцатеричное представление queryid приводится в квадратных скобках. 
Plan IDВнутренний хеш-код, вычисленный для дерева плана запросаplanid
DatabaseИмя базы данных, в которой выполнялся запросВыводится из dbid
Exec (s)Общее время, потраченное на выполнение плана запроса, в секундахtotal_exec_time
%TotalОтношение времени total_exec_time, затраченного на выполнение плана, к общему времени выполнения всех запросов в кластере 
Read I/O time (s)Общее время, затраченное на чтение страниц при выполнении плана, в секундахblk_read_time
Write I/O time (s)Общее время, затраченное на запись страниц при выполнении плана, в секундахblk_write_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

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

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

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

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

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

СтолбецОписаниеПоле/вычисление
Query IDИдентификатор запроса в виде хеша от идентификатора базы, идентификатора пользователя и текста запроса. Шестнадцатеричное представление queryid приводится в квадратных скобках. 
Plan IDВнутренний хеш-код, вычисленный для дерева плана запросаplanid
DatabaseИмя базы данных, в которой выполнялся запросВыводится из dbid
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

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

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

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

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

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

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

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

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

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

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

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

СтолбецОписаниеПоле/вычисление
Query IDИдентификатор запроса в виде хеша от идентификатора базы, идентификатора пользователя и текста запроса. Шестнадцатеричное представление queryid приводится в квадратных скобках. 
Plan IDВнутренний хеш-код, вычисленный для дерева плана запросаplanid
DatabaseИмя базы данных, в которой выполнялся запросВыводится из dbid
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(s)Общее время, затраченное на выполнение плана запроса, в секундахtotal_plan_time + total_exec_time
RowsЧисло строк, полученных или обработанных при выполнении планаrows
ExecutionsСколько раз выполнялся план запросаcalls

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

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

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

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

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

СтолбецОписаниеПоле/вычисление
Query IDИдентификатор запроса в виде хеша от идентификатора базы, идентификатора пользователя и текста запроса. Шестнадцатеричное представление queryid приводится в квадратных скобках. 
Plan IDВнутренний хеш-код, вычисленный для дерева плана запросаplanid
DatabaseИмя базы данных, в которой выполнялся запросВыводится из dbid
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(s)Общее время, затраченное на выполнение плана запроса, в секундахtotal_plan_time + total_exec_time
RowsЧисло строк, полученных или обработанных при выполнении планаrows
ExecutionsСколько раз выполнялся план запросаcalls

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

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

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

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

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

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

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

СтолбецОписаниеПоле/вычисление
Query IDИдентификатор запроса в виде хеша от идентификатора базы, идентификатора пользователя и текста запроса. Шестнадцатеричное представление queryid приводится в квадратных скобках. 
Plan IDВнутренний хеш-код, вычисленный для дерева плана запросаplanid
DatabaseИмя базы данных, в которой выполнялся запросВыводится из dbid
Read BytesКоличество байт, прочитанное на уровне файловой системыreads
Plan ReadsКоличество байт, прочитанное при планированииplan_reads
Exec ReadsКоличество байт, прочитанное при выполненииexec_reads
Read %TotalОтношение значения reads к общему количеству байт, прочитанному на уровне файловой системы всеми запросами 
Write BytesКоличество байт, записанное на уровне файловой системыwrites
Plan WritesКоличество байт, записанное при планированииplan_writes
Exec WritesКоличество байт, записанное при выполненииexec_writes
Write %TotalОтношение значения writes к общему количеству байт, прочитанному на уровне файловой системы всеми запросами 

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

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

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

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

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

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

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

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

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

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

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

Таблица F.48. 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. Столбцы этой таблицы перечислены в Таблице F.49.

Таблица F.49. 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. Столбцы этой таблицы перечислены в Таблице F.50.

Таблица F.50. 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, к общему числу блоков, прочитанных запросами в кластере 

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

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

СтолбецОписаниеПоле/вычисление
DBИмя базы данных, к которой относится таблица 
TablespaceИмя табличного пространства, в котором находится таблица 
SchemaИмя схемы, содержащей таблицу 
TableИмя таблицы 
InsКоличество вставленных строкn_tup_ins
UpdКоличество изменённых строк, включая изменения по схеме HOTn_tup_upd
DelКоличество удалённых строкn_tup_del
Upd(HOT)Количество строк, изменённых по схеме HOTn_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. Столбцы этой таблицы перечислены в Таблице F.52.

Таблица F.52. 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Сколько раз очистка этой таблицы была выполнена вручную (VACUUM FULL не учитывается)vacuum_count
AutoVacuumСколько раз очистка этой таблицы была выполнена фоновым процессом автоочисткиautovacuum_count
AnalyzeСколько раз сбор статистики для этой таблицы был выполнен вручнуюanalyze_count
AutoAnalyzeСколько раз сбор статистики для этой таблицы был выполнен фоновым процессом автоочисткиautoanalyze_count

В таблице отчёта «Top growing tables» показаны таблицы, которые увеличились в объёме больше других. Эта информация основана на представлении pg_stat_all_tables. Столбцы этой таблицы перечислены в Таблице F.53.

Таблица F.53. 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. Столбцы этой таблицы перечислены в Таблице F.54.

Таблица F.54. 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. Столбцы этой таблицы перечислены в Таблице F.55.

Таблица F.55. 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. Столбцы этой таблицы перечислены в Таблице F.56.

Таблица F.56. 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. Столбцы этой таблицы перечислены в Таблице F.57.

Таблица F.57. 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

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

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

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

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

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

F.39.10.8. 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 (Параметры по умолчанию). Столбцы этой таблицы перечислены в Таблице F.64.

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

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

F.39.11. Диагностические средства pgpro_pwr

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

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

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

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

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

Таблица F.66. Описание событий 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
query pg_stat_bgwriterСбор статистики уровня кластера с использованием представления pg_stat_bgwriter
query pg_stat_archiverСбор статистики уровня кластера с использованием представления pg_stat_archiver
collect object statsСбор статистики по объектам базы (включает события из Таблицы F.67)
maintain repositoryВыполнение процедур обслуживания
calculate tablespace statsВычисление изменения статистики по табличным пространствам
calculate object statsВычисление изменения статистики по объектам базы (включает события из Таблицы F.68)
calculate cluster statsВычисление изменения статистики на уровне кластера
calculate archiver statsВычисление изменения статистики архиватора
delete obsolete samplesУдаление устаревших выборочных линий и выборок

Таблица F.67. События, связанные со сбором статистики по объектам БД

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

Таблица F.68. События, связанные с вычислением изменения статистики по объектам БД

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

F.39.12. Важные замечания

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

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

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

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