F.42. pgpro_stats

Расширение pgpro_stats предоставляет возможности для сбора статистики планирования и выполнения всех обрабатываемых сервером SQL-операторов. Оно основано на модуле pg_stat_statements и реализует следующую дополнительную функциональность:

  • Сохранение помимо текста запросов соответствующих планов запросов.

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

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

  • Подсчёт статистики использования ресурсов при выполнении операторов.

  • Подсчёт статистики аннулирования кеша.

F.42.1. Ограничения

  • При некоторых обстоятельствах pgpro_stats может не сопоставить параметры в тексте запроса с теми же параметрами в соответствующем плане запроса.

  • Некоторые запросы SPI в статистике не учитываются.

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

  • pgpro_stats может не работать корректно со сторонними расширениями, добавляющими в планы узлы CustomScan и ForeignScan.

  • В текущей версии статистика планирования не собирается и соответствующие столбцы представлений содержат нули.

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

Расширение pgpro_stats включено в состав Postgres Pro Enterprise, но должно устанавливаться отдельно. Установив pgpro_stats, выполните следующие действия, чтобы подготовить pgpro_stats к работе:

  1. Добавьте pgpro_stats в параметр shared_preload_libraries в файле postgresql.conf:

    shared_preload_libraries = 'pgpro_stats'
  2. Перезапустите Postgres Pro Enterprise, чтобы изменения вступили в силу.

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

  3. Обращаться к собираемой статистики вы сможете после того, как создадите расширение pgpro_stats:

    CREATE EXTENSION pgpro_stats;

F.42.3. Использование

F.42.3.1. Сбор статистики по операторам запросов и планам

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

По умолчанию pgpro_stats собирает статистику по всем операторам, с учётом значений параметров pgpro_stats.track и pgpro_stats.track_utility. Однако в целях оптимизации производительности вы можете уменьшить частоту выборки, воспользовавшись параметром pgpro_stats.query_sample_rate, и тогда pgpro_stats для вычисления статистики будет случайным образом выбирать заданную долю запросов из общего количества.

Для сбора статистики по событиям ожидания pgpro_stats производит выборки с определённой периодичностью. Эта периодичность задаётся параметром pgpro_stats.profile_period и по умолчанию равна 10 мс. Если выборка показывает, что процесс находится в состоянии ожидания, к общей длительности ожидания события добавляется значение pgpro_stats.profile_period. Таким образом, оценка длительности ожидания остаётся корректной даже при изменениях значения pgpro_stats.profile_period. Если вас не интересует статистика по событиям ожидания, сбор этой информации можно отключить, установив для параметра pgpro_stats.enable_profile значение false.

Показатели pgpro_stats_statements.plans и pgpro_stats_statements.calls не обязательно должны совпадать, так как статистика планирования и выполнения обновляется в конце соответствующей фазы и только при успешном завершении этой фазы. Например, если для оператора успешно выполнилось планирование, но во время выполнения произошла ошибка, изменится только статистика планирования. Если же планирование пропускается по причине использования кешированного плана, увеличивается только счётчик выполнения.

Например, давайте создадим таблицу со случайными данными и построим в ней индекс:

CREATE TABLE test AS (SELECT i, random() x FROM generate_series(1,1000000) i);
CREATE INDEX test_x_idx ON test (x);

Выполните несколько раз следующий запрос с различными значениями :x_min и :x_max:

SELECT * FROM test WHERE x >= :x_min AND x <= :x_max;

После этого собранная статистика должна появиться в представлении pgpro_stats_statements:

SELECT queryid, query, planid, plan, wait_stats FROM pgpro_stats_statements WHERE query LIKE 'select * from test where%';
-[ RECORD 1 ]----------------------------------------------------------------------------------------------------------
queryid    | 1109491335754870054
query      | select * from test where x >= $1 and x <= $2
planid     | 8287793242828473388
plan       | Gather
           |   Output: i, x
           |   Workers Planned: 2
           |   ->  Parallel Seq Scan on public.test
           |         Output: i, x
           |         Filter: ((test.x >= $3) AND (test.x <= $4))
           |
wait_stats | {"IO": {"DataFileRead": 10}, "IPC": {"BgWorkerShutdown": 10}, "Total": {"IO": 10, "IPC": 10, "Total": 20}}
-[ RECORD 2 ]----------------------------------------------------------------------------------------------------------
queryid    | 1109491335754870054
query      | select * from test where x >= $1 and x <= $2
planid     | -9045072158333552619
plan       | Bitmap Heap Scan on public.test
           |   Output: i, x
           |   Recheck Cond: ((test.x >= $3) AND (test.x <= $4))
           |   ->  Bitmap Index Scan on test_x_idx
           |         Index Cond: ((test.x >= $5) AND (test.x <= $6))
           |
wait_stats | {"IO": {"DataFileRead": 40}, "Total": {"IO": 40, "Total": 40}}
-[ RECORD 3 ]----------------------------------------------------------------------------------------------------------
queryid    | 1109491335754870054
query      | select * from test where x >= $1 and x <= $2
planid     | -1062789671372193287
plan       | Seq Scan on public.test
           |   Output: i, x
           |   Filter: ((test.x >= $3) AND (test.x <= $4))
           |
wait_stats | NULL
-[ RECORD 4 ]----------------------------------------------------------------------------------------------------------
queryid    | 1109491335754870054
query      | select * from test where x >= $1 and x <= $2
planid     | -1748292253893834280
plan       | Index Scan using test_x_idx on public.test
           |   Output: i, x
           |   Index Cond: ((test.x >= $3) AND (test.x <= $4))
           |
wait_stats | NULL

F.42.3.2. Сбор дополнительных метрик

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

Чтобы настроить сбор дополнительной метрики, выполните следующее:

  1. Для каждой метрики необходимо определить все параметры конфигурации, перечисленные в Подразделе F.42.7.2. В именах параметров должен присутствовать уникальный идентификатор (номер) метрики.

    Например, чтобы раз в 60 секунд собирать информацию о замусоривании индексов, вы можете определить первую дополнительную метрику, установив соответствующие параметры следующим образом:

    pgpro_stats.metric_1_name = index_bloat
    pgpro_stats.metric_1_query = 'select iname, ibloat, ipages from bloat'
    pgpro_stats.metric_1_db = 'postgres'
    pgpro_stats.metric_1_user = postgres
    pgpro_stats.metric_1_period = '60s'
  2. Перезапустите сервер.

    pgpro_stats начинает собирать статистику по выполняемым операторам и сохраняет её в кольцевом буфере; собранная статистика появляется в представлении pgpro_stats_metrics:

    SELECT * FROM pgpro_stats_metrics;

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

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

F.42.4. Представления

F.42.4.1. Представление pgpro_stats_statements

Статистика, собираемая модулем, выдаётся через представление с именем pgpro_stats_statements. Это представление содержит отдельные строки для каждой комбинации идентификатора базы данных, идентификатора пользователя и идентификатора запроса (но в количестве, не превышающем максимальное число различных операторов, которые может отслеживать модуль). Столбцы представления показаны в Таблице F.72.

Таблица F.72. Столбцы pgpro_stats_statements

ИмяТипСсылкиОписание
useridoidpg_authid.oidOID пользователя, выполнявшего оператор
dbidoidpg_database.oidOID базы данных, в которой выполнялся оператор
queryidbigint Внутренний хеш-код, вычисленный для дерева разбора оператора
planidbigint Внутренний хеш-код, вычисленный для дерева плана оператора
querytext Текст, представляющий оператор
plantext План запроса, представленный в формате, определённом параметром конфигурации pgpro_stats.plan_format
plansint8 Число операций планирования этого оператора (если включён параметр pgpro_stats.track_planning, иначе 0)
total_plan_timefloat8 Общее время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0). В текущей версии всегда 0.
min_plan_timefloat8 Минимальное время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0). В текущей версии всегда 0.
max_plan_timefloat8 Максимальное время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0). В текущей версии всегда 0.
mean_plan_timefloat8 Среднее время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0). В текущей версии всегда 0.
stddev_plan_timefloat8 Стандартное отклонение времени, затраченного на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0). В текущей версии всегда 0.
plan_rusagepgpro_stats_rusage Статистика использования ресурсов при планировании оператора. В текущей версии содержит нули.
callsint8 Счётчик выполнений данного оператора
total_exec_timefloat8 Общее время, затраченное на выполнение оператора, в миллисекундах
min_exec_timefloat8 Минимальное время, затраченное на выполнение оператора, в миллисекундах
max_exec_timefloat8 Максимальное время, затраченное на выполнение оператора, в миллисекундах
mean_exec_timefloat8 Среднее время, затраченное на выполнение оператора, в миллисекундах
stddev_exec_timefloat8 Стандартное отклонение времени, затраченного на выполнение оператора, в миллисекундах
exec_rusagepgpro_stats_rusage Статистика использования ресурсов при выполнении оператора.
rowsint8 Общее число строк, полученных или затронутых оператором
shared_blks_hitint8 Общее число попаданий в разделяемый кеш блоков для данного оператора
shared_blks_readint8 Общее число чтений разделяемых блоков для данного оператора
shared_blks_dirtiedint8 Общее число разделяемых блоков, «загрязнённых» данным оператором
shared_blks_writtenint8 Общее число разделяемых блоков, записанных данным оператором
local_blks_hitint8 Общее число попаданий в локальный кеш блоков для данного оператора
local_blks_readint8 Общее число чтений локальных блоков для данного оператора
local_blks_dirtiedint8 Общее число локальных блоков, «загрязнённых» данным оператором
local_blks_writtenint8 Общее число локальных блоков, записанных данным оператором
temp_blks_readint8 Общее число чтений временных блоков для данного оператора
temp_blks_writtenint8 Общее число записей временных блоков для данного оператора
blk_read_timefloat8 Общее время, затраченное оператором на чтение блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае)
blk_write_timefloat8 Общее время, затраченное оператором на запись блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае)
wal_recordsint8 Общее число записей WAL, сгенерированных при выполнении оператора
wal_fpiint8 Общее число образов полных страниц в WAL, сгенерированных при выполнении оператора
wal_bytesnumeric Общий объём WAL (в байтах), сгенерированный при выполнении оператора
wait_statsjsonb Объект типа jsonb, содержащий статистику по событиям ожидания для каждого выполнения запроса по соответствующему плану
inval_msgspgpro_stats_inval_msgs Количество сообщений аннулирования кеша по типам, выданное при выполнении оператора (если это поддерживает сервер, иначе — 0)

F.42.4.2. Представление pgpro_stats_totals

Агрегированная статистика, собранная модулем, выдаётся через представление pgpro_stats_totals. Это представление содержит отдельные строки для каждого отдельного объекта БД (но в количестве, не превышающем максимальное число различных объектов, которое может отслеживать модуль). Столбцы представления показаны в Таблице F.73.

Таблица F.73. Столбцы pgpro_stats_totals

ИмяТипОписание
object_typetextТип объекта, для которого агрегируется статистика: "cluster" (кластер БД), "database" (база данных), "user" (пользователь), "client_addr" (адрес клиента), "application" (приложение), "backend" (обслуживающий процесс), "session" (сеанс)
object_idbigintИдентификатор объекта: oid для баз и пользователей, pid для обслуживающих процессов, sid для сеансов, NULL для иных объектов
object_nametextТекстовое имя объекта либо NULL
queries_plannedint8Число спланированных запросов
total_plan_timefloat8Общее время, затраченное на планирование операторов, в миллисекундах. В текущей версии всегда 0.
total_plan_rusagepgpro_stats_rusageАгрегированная статистика использования ресурсов при планировании операторов. В текущей версии содержит нули.
queries_executedint8Число выполненных запросов
total_exec_timefloat8Общее время, затраченное на выполнение операторов, в миллисекундах
total_exec_rusagepgpro_stats_rusageАгрегированная статистика использования ресурсов при выполнении операторов
rowsint8Общее число строк, полученных или затронутых агрегированными операторами
shared_blks_hitint8Общее число попаданий в разделяемый кеш блоков для агрегированных операторов
shared_blks_readint8Общее число чтений разделяемых блоков агрегированными операторами
shared_blks_dirtiedint8Общее число разделяемых блоков, «загрязнённых» агрегированными операторами
shared_blks_writtenint8Общее число разделяемых блоков, записанных агрегированными операторами
local_blks_hitint8Общее число попаданий в локальный кеш блоков для агрегированных операторов
local_blks_readint8Общее число чтений локальных блоков для агрегированных операторов
local_blks_dirtiedint8Общее число локальных блоков, «загрязнённых» агрегированными операторами
local_blks_writtenint8Общее число локальных блоков, записанных агрегированными операторами
temp_blks_readint8Общее число чтений временных блоков для агрегированных операторов
temp_blks_writtenint8Общее число записей временных блоков для агрегированных операторов
blk_read_timefloat8Общее время, затраченное операторами на чтение блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае)
blk_write_timefloat8Общее время, затраченное операторами на запись блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае)
wal_recordsint8Общее число записей WAL, сгенерированных при выполнении операторов
wal_fpiint8Общее число образов полных страниц в WAL, сгенерированных при выполнении операторов
wal_bytesnumericОбщий объём WAL (в байтах), сгенерированный при выполнении операторов
wait_statsjsonbОбъект типа jsonb, содержащий статистику по событиям ожидания для каждого выполнения запросов
inval_msgspgpro_stats_inval_msgsКоличество сообщений аннулирования кеша по типам, выданное при выполнении операторов (если это поддерживает сервер, иначе — 0)
cache_resetsint4Число сбросов разделяемого кеша (только для кластера БД, баз данных и обслуживающих процессов)

F.42.4.3. Представление pgpro_stats_inval_status

Представление pgpro_stats_inval_status содержит одну строку, показывающую текущее состояние очереди аннулирования глобального кеша. Столбцы представления показаны в Таблице F.74.

Таблица F.74. Столбцы pgpro_stats_inval_status

ИмяТипОписание
num_inval_messagesint8Число событий аннулирования в очереди
num_inval_queue_cleanupsint8Количество очисток очереди аннулирования, выполненных во избежание её переполнения
num_inval_queue_resetsint4Количество операций сброса для обслуживающих процессов, задерживающих очистку очереди

В работающей системе num_inval_messages обычно имеет значение около 4000, то есть очередь почти полностью заполнена. Увеличение num_inval_queue_cleanups говорит о том, что в очередь поступает много сообщений аннулирования кеша. Значение num_inval_queue_resets должно быть близким к 0, а его рост свидетельствует о слишком быстром поступлении таких сообщений или о задержках в их обработке со стороны обслуживающих процессов. Счётчики сброса для каждого обслуживающего процесса можно увидеть в столбце cache_resets представления pgpro_stats_totals.

F.42.4.4. Представление pgpro_stats_metrics

Метрики, собранные модулем pgpro_stats, выводятся в представлении pgpro_stats_metrics. В таблице ниже описаны столбцы этого представления.

Таблица F.75. Столбцы pgpro_stats_metrics

ИмяТипОписание
metric_numberint4Уникальный идентификатор собираемой метрики, назначаемый пользователем. Этот идентификатор входит в имена параметров, определяющих метрику.
metric_nametextИмя метрики, определённое параметром pgpro_stats.metric_N_name.
db_nametextИмя базы данных, для которой была получена метрика.
tstimestamptzВремя, когда было вычислено значение метрики.
valuejsonbРезультат запроса, производившего вычисление метрики. Он сериализуется в типе jsonb как массив объектов, полученных с помощью функции to_jsonb(строка_результата). В случае ошибки возвращается один объект, содержащий поля code (код ошибки), message (сообщение), detail (подробности) и hint (подсказка).

F.42.5. Типы данных

F.42.5.1. Тип pgpro_stats_rusage

Тип pgpro_stats_rusage представляет собой запись, содержащую статистику использования ресурсов во время планирования и выполнения запросов. Поля этого типа показаны в Таблице F.76.

Таблица F.76. Поля pgpro_stats_rusage

ИмяТипОписание
readsbigintКоличество байт, прочитанное на уровне файловой системы
writesbigintКоличество байт, записанное на уровне файловой системы
user_timedouble precisionВремя использования процессора в пользовательском режиме
system_timedouble precisionВремя использования процессора в режиме ядра
minfltsbigintКоличество восстановленных страниц (мягких ошибок обращения к страницам)
majfltsbigintКоличество ошибок обращения к страницам (жёстких)
nswapsbigintКоличество обращений к пространству подкачки
msgsndsbigintКоличество переданных сообщений IPC
msgrcvsbigintКоличество полученных сообщений IPC
nsignalsbigintКоличество полученных сигналов
nvcswsbigintКоличество «добровольных» переключений контекста
nivcswsbigintКоличество принудительных переключений контекста

F.42.5.2. Тип pgpro_stats_inval_msgs

Тип pgpro_stats_inval_msgs представляет собой запись, содержащую счётчики событий аннулирования данных. Поля этой записи показаны в Таблице F.77.

Таблица F.77. Поля pgpro_stats_inval_msgs

ИмяТипОписание
totalbigintОбщее число событий аннулирования
catcachebigintЧисло событий аннулирования кеша каталога
catalogbigintЧисло событий аннулирования каталога
relcachebigintЧисло событий избирательного аннулирования кеша отношений
relcache_allbigintЧисло событий полного аннулирования кеша отношений
smgrbigintЧисло событий аннулирования менеджера хранилища
relmapbigintЧисло событий аннулирования карты отношений
snapshotbigintЧисло событий аннулирования снимков

F.42.6. Функции

pgpro_stats_statements_reset(userid Oid, dbid Oid, queryid bigint, planid bigint) returns void

Функция pgpro_stats_statements_reset очищает всю статистику, собранную к этому времени модулем pgpro_stats для заданного пользователя (userid), базы данных (dbid), запроса (queryid) и плана (planid). В случае отсутствия одного из параметров для него подразумевается нулевое значение (неприменимое ограничение) и очищается статистика, соответствующая другим параметрам. Если никакой параметр не задан или все параметры имеют нулевое значение (неприменимое), очищается вся статистика. По умолчанию эту функцию могут выполнять только суперпользователи. Другим пользователям можно дать доступ к ней, используя GRANT.

pgpro_stats_statements(showtext boolean) returns setof record

Представление pgpro_stats_statements определяется как результат вызова одноимённой функции. Функцию pgpro_stats_statements можно также вызывать непосредственно, а с аргументом showtext := false можно получить результат без текста запроса (то есть в выходном аргументе, соответствующем столбцу представления query, будет выдаваться null). Эта возможность предусмотрена для того, чтобы внешние средства мониторинга могли не загружать каждый раз текст запросов, который может быть довольно объёмным. Средство мониторинга может просто один раз запомнить текст запросов для каждой записи в представлении (как это и делает сам модуль pgpro_stats) и затем запрашивать текст для новых запросов только при необходимости. Так как сервер сохраняет текст запросов в файле, при таком подходе постоянное чтение содержимого pgpro_stats_statements будет создавать меньшую нагрузку на ввод/вывод.

pgpro_stats_totals_reset(type text, id bigint) returns void

Функция pgpro_stats_totals_reset очищает всю статистику, собранную к этому времени модулем pgpro_stats для заданного типа (type) и идентификатора (id) объекта. В случае отсутствия параметров или когда параметр type равен 0, очищается вся статистика. Если в параметре type передаётся корректный тип объекта, то в случае указания id очищается статистика только для объекта с заданным идентификатором, а в отсутствие такого указания — для всех объектов заданного типа. Если же параметр type не задаёт существующий тип объекта, никакая статистика не очищается. По умолчанию эту функцию могут выполнять только суперпользователи. Другим пользователям можно дать доступ к ней, используя GRANT.

pgpro_stats_totals() returns setof record

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

pgpro_stats_metrics(showtext boolean) returns setof record

Определяет представление pgpro_stats_metrics, описанное подробно в Таблице F.75.

F.42.7. Параметры конфигурации

F.42.7.1. Основные параметры

pgpro_stats.max (integer)

Параметр pgpro_stats.max задаёт максимальное число операторов, отслеживаемых модулем (то есть максимальное число строк в представлении pgpro_stats_statements). Когда на обработку поступает больше, чем заданное число различных операторов, информация о редко выполняемых операторах отбрасывается. Значение по умолчанию — 5000. Этот параметр можно задать только при запуске сервера.

pgpro_stats.max_totals (integer)

Параметр pgpro_stats.max_totals задаёт максимальное число объектов, отслеживаемых модулем (то есть максимальное число строк в представлении pgpro_stats_totals). Когда количество наблюдаемых объектов превышает заданное, информация о наименее активно используемых объектах удаляется. Значение по умолчанию — 1000. Этот параметр можно задать только при запуске сервера.

pgpro_stats.track (enum)

Параметр pgpro_stats.track определяет, какие операторы будут отслеживаться модулем. Со значением top отслеживаются операторы верхнего уровня (те, что непосредственно выполняются клиентами), со значением all также отслеживаются вложенные операторы (например, операторы, вызываемые внутри функций), а значение none полностью отключает сбор статистики по операторам. Значение по умолчанию — top. Изменять этот параметр могут только суперпользователи.

pgpro_stats.track_utility (boolean)

Параметр pgpro_stats.track_utility определяет, будет ли этот модуль отслеживать служебные команды. Служебными командами считаются команды, отличные от SELECT, INSERT, UPDATE и DELETE. Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_planning (boolean)

Параметр pgpro_stats.track_planning определяет, будет ли этот модуль отслеживать операции планирования и их длительность. При включении этого параметра возможно заметное снижение производительности, особенно когда параллельно выполняется большое количество практически однотипных запросов. Значение по умолчанию — off (выкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_totals (boolean)

Параметр pgpro_stats.track_totals определяет, будет ли агрегироваться статистика по объектам (на уровне кластера, баз, пользователей и т. д.). Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_cluster (boolean)

Параметр pgpro_stats.track_cluster определяет, будет ли агрегироваться статистика по кластеру в целом. Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_databases (boolean)

Параметр pgpro_stats.track_databases определяет, будет ли агрегироваться статистика по базам данных. Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_users (boolean)

Параметр pgpro_stats.track_users определяет, будет ли агрегироваться статистика по пользователям. Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_applications (boolean)

Параметр pgpro_stats.track_applications определяет, будет ли агрегироваться статистика по приложениям (по именам, задаваемым в application_name). Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_client_addr (boolean)

Параметр pgpro_stats.track_client_addr определяет, будет ли агрегироваться статистика по IP-адресам клиентов. Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_backends (boolean)

Параметр pgpro_stats.track_backends определяет, будет ли агрегироваться статистика по обслуживающим процессам. Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.track_sessions (boolean)

Параметр pgpro_stats.track_sessions определяет, будет ли агрегироваться статистика по сеансам. Значение по умолчанию — on (вкл.). Изменить этот параметр могут только суперпользователи.

pgpro_stats.save (boolean)

Параметр pgpro_stats.save определяет, должна ли статистика операторов сохраняться после перезагрузки сервера. Если он отключён (имеет значение off), статистика не сохраняется при остановке сервера и не перезагружается при запуске. Значение по умолчанию — on (вкл.). Этот параметр можно задать только в postgresql.conf или в командной строке сервера.

pgpro_stats.plan_format (text)

Параметр pgpro_stats.plan_format выбирает формат плана запроса в выводе EXPLAIN. Возможные значения: text, xml, json и yaml. Значение по умолчанию: text. При изменении этого параметра требуется перезапустить сервер.

pgpro_stats.enable_profile (boolean)

Параметр pgpro_stats.enable_profile включает профилирование событий ожидания по отдельным операторам. Значение по умолчанию: true (вкл.). При изменении этого параметра требуется перезапустить сервер.

pgpro_stats.query_sample_rate (float)

Параметр pgpro_stats.query_sample_rate задаёт долю запросов, которые будут выбираться случайным образом для подсчёта статистики. Возможные значения лежат в диапазоне от 0.0 (пропускать все запросы) до 1.0 (обрабатывать все запросы). Значение по умолчанию: 1.0. При изменении этого параметра требуется перезапустить сервер.

pgpro_stats.profile_period (integer)

Параметр pgpro_stats.profile_period задаёт интервал (в миллисекундах) для сбора информации о событиях ожидания. Значение по умолчанию: 10. Изменить этот параметр могут только суперпользователи.

pgpro_stats.metrics_buffer_size (integer)

Параметр pgpro_stats.metrics_buffer_size задаёт размер кольцевого буфера для сбора статистических метрик. Значение по умолчанию: 16kB. При изменении этого параметра требуется перезапустить сервер.

pgpro_stats.metrics_workers (integer)

Параметр pgpro_stats.metrics_workers задаёт количество рабочих процессов, которые будут собирать статистические метрики. Если этот параметр больше или равен 2, один из рабочих процессов будет главным, распределяющим запросы между всеми остальными. Если количество рабочих процессов ограничивается одним, он будет перезапускаться для подключения к разным базам данных. Когда этот параметр равен 0, сбор метрик отключается. Значение по умолчанию: 2. При изменении этого параметра требуется перезапустить сервер.

F.42.7.2. Параметры, определяющие метрики

Следующие параметры предназначены для определения дополнительных метрик, которые будет собирать pgpro_stats. Номер N в имени параметра служит уникальным идентификатором метрики, к которой будет применяться задаваемое значение; он должен быть положительным и уникальным среди всех метрик.

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

pgpro_stats.metric_N_name (text)

Имя метрики с номером N. Это имя будет выводиться в столбце metric_name представления pgpro_stats_metrics.

pgpro_stats.metric_N_query (text)

Текст запроса, определяющий значение собираемой метрики.

pgpro_stats.metric_N_period (integer)

Интервал, с которым будет собираться метрика N, в миллисекундах. Значение по умолчанию: 60000 ms

pgpro_stats.metric_N_db (text)

Список баз данных, в которых будет собираться метрика N. Имена баз данных должны разделяться запятыми. Чтобы выбрать все базы данных в кластере, за исключением баз-шаблонов, можно указать значение *. Если вы также хотите анализировать запросы в базах-шаблонах, их нужно перечислить явно.

pgpro_stats.metric_N_user (text)

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

F.42.8. Авторы

Postgres Professional, Москва, Россия