G.5. pgpro_stats
Расширение pgpro_stats предоставляет возможности для сбора статистики планирования и выполнения всех обрабатываемых сервером SQL-операторов. Оно основано на модуле pg_stat_statements и реализует следующую дополнительную функциональность:
Сохранение помимо текста запросов соответствующих планов запросов.
Возможность изменения частоты сбора статистики для оптимизации связанных с ним издержек.
Вычисление статистики по событиям ожидания для выполняемых запросов.
Подсчёт статистики использования ресурсов при планировании и выполнении операторов.
Подсчёт статистики аннулирования кеша.
Вычисление дополнительной статистики архиватора.
Предоставление возможности просмотра статистики по очистке баз данных, таблиц и индексов, собранных ядром системы.
Трассировка сеансов приложений.
Создание представлений, эмулирующих другие расширения.
Примечание
Во время остановки сервера расширение pgpro_stats выгружает собранную статистику в два файла на диске в формате, который зависит от количества и порядка столбцов в представлениях pgpro_stats_statements и pgpro_stats_totals. Если этот формат изменился в новой версии pgpro_stats, то ранее сохранённые статистики не будут прочитаны при первом перезапуске сервера после обновления расширения, и в журнал будет записана ошибка:
LOG: pgpro_stats: could not load statements data file of obsolete format "pg_stat/pgpro_stats.stat"
или
LOG: pgpro_stats: could not load statements data file of obsolete format "pg_stat/pgpro_stats_totals.stat"
Содержимое файлов будет проигнорировано, а соответствующие статистики — обнулены. Чтобы узнать, изменился ли формат, ознакомьтесь с Замечаниями к выпускам для устанавливаемой версии pgpro_stats. Чтобы сохранить ранее собранные статистики, выгрузите их в CSV-файлы перед обновлением.
Описание типов и представлений, отображающих статистику аннулирования кешей, а также общая информация об этой статистике приводится в разделе Подраздел G.5.9.
G.5.1. Ограничения
При некоторых обстоятельствах
pgpro_statsможет не сопоставить параметры в тексте запроса с теми же параметрами в соответствующем плане запроса.Некоторые запросы SPI в статистике не учитываются.
Тексты и планы некоторых запросов SPI не нормализованы.
Расширение
pgpro_statsнесовместимо с pg_stat_statements, а также другими расширениями, встраивающими свои обработчики в анализатор, планировщик или исполнитель и влияющими на разбор, планирование или выполнение запросов. Более того, если иpgpro_stats, и pg_stat_statements включены в списокshared_preload_libraries, сервер баз данных не стартует. Также обратите внимание, что для получения окончательной версии запросов и планов библиотекаpgpro_statsдолжна указываться последней в спискеshared_preload_libraries, но есть расширения, например,pg_pathman, которые работают, только если их библиотека указана последней.pgpro_statsможет не работать корректно со сторонними расширениями, добавляющими в планы узлыCustomScanиForeignScan.
G.5.2. Установка и подготовка
Расширение pgpro_stats поставляется вместе с Postgres Pro Enterprise в виде отдельного пакета pgpro-stats-ent-15 (подробные инструкции по установке представлены в Главе 17). Установив pgpro_stats, выполните следующие действия, чтобы подготовить pgpro_stats к работе:
Добавьте
pgpro_statsв параметр shared_preload_libraries в файлеpostgresql.conf:shared_preload_libraries = 'pgpro_stats'
Перезапустите Postgres Pro Enterprise, чтобы изменения вступили в силу.
Когда сервер перезапустится,
pgpro_statsначнёт собирать статистику по всем базам данных в кластере. При необходимости вы можете изменять область сбора или отключить его, воспользовавшись параметрами конфигурацииpgpro_stats.Обращаться к собираемой статистике вы сможете после того, как создадите расширение
pgpro_stats:CREATE EXTENSION pgpro_stats;
Кроме того, необходимо включить вычисление идентификатора запроса, чтобы расширение pgpro_stats было активно. Это происходит автоматически, если для compute_query_id задано значение auto или on, или загружен любой сторонний модуль, вычисляющий идентификаторы запросов.
G.5.3. Использование
G.5.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 | NULLG.5.3.2. Сбор дополнительных метрик
Используя pgpro_stats, вы можете определить дополнительные интересующие вас метрики. Собираемые данные будут накапливаться в кольцевом буфере для последующей передачи их в систему мониторинга. Этот подход лучше, чем непосредственный опрос базы данных системой мониторинга, так как в случае кратковременного прерывания соединения собранные данные не будут потеряны, а сохранятся в буфере и могут быть считаны позднее.
Чтобы настроить сбор дополнительной метрики, выполните следующее:
Для каждой метрики необходимо определить все параметры конфигурации, перечисленные в Подразделе G.5.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'
Перезапустите сервер.
pgpro_statsначинает собирать статистику по выполняемым операторам и сохраняет её в кольцевом буфере; собранная статистика появляется в представленииpgpro_stats_metrics:SELECT * FROM pgpro_stats_metrics;
При необходимости настройте экспорт данных в систему мониторинга, которую вы используете.
G.5.4. Представления
G.5.4.1. Представление pgpro_stats_statements
Статистика, собираемая модулем, выдаётся через представление с именем pgpro_stats_statements. Это представление содержит отдельные строки для каждой комбинации идентификатора базы данных, идентификатора пользователя и идентификатора запроса (но в количестве, не превышающем максимальное число различных операторов, которые может отслеживать модуль). Столбцы представления показаны в Таблице G.81.
Таблица G.81. Столбцы pgpro_stats_statements
| Name | Тип | Ссылки | Описание |
|---|---|---|---|
userid | oid | | OID пользователя, выполнявшего оператор |
dbid | oid | | OID базы данных, в которой выполнялся оператор |
toplevel | bool | True, если данный запрос выполнялся на верхнем уровне (всегда true, если для параметра pgpro_stats.track задано значение top) | |
queryid | bigint | Хеш-код для идентификации нормализованного запроса | |
planid | bigint | Хеш-код для идентификации нормализованного плана оператора | |
query | text | Текст, представляющий оператор | |
plan | text | План запроса, представленный в формате, определённом параметром конфигурации pgpro_stats.plan_format | |
plans | int8 | Число операций планирования этого оператора (если включён параметр pgpro_stats.track_planning, иначе 0) | |
total_plan_time | float8 | Общее время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0) | |
min_plan_time | float8 | Минимальное время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0) | |
max_plan_time | float8 | Максимальное время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0) | |
mean_plan_time | float8 | Среднее время, затраченное на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0) | |
stddev_plan_time | float8 | Стандартное отклонение времени, затраченного на планирование этого оператора в миллисекундах (если включён параметр pgpro_stats.track_planning, иначе 0) | |
plan_rusage | pgpro_stats_rusage | Статистика использования ресурсов при планировании оператора. | |
calls | int8 | Счётчик выполнений данного оператора | |
total_exec_time | float8 | Общее время, затраченное на выполнение оператора, в миллисекундах | |
min_exec_time | float8 | Минимальное время, потраченное на выполнение оператора, в миллисекундах | |
max_exec_time | float8 | Максимальное время, потраченное на выполнение оператора, в миллисекундах | |
mean_exec_time | float8 | Среднее время, потраченное на выполнение оператора, в миллисекундах | |
stddev_exec_time | float8 | Стандартное отклонение времени, затраченного на выполнение оператора, в миллисекундах | |
exec_rusage | pgpro_stats_rusage | Статистика использования ресурсов при выполнении оператора. | |
rows | int8 | Общее число строк, полученных или затронутых оператором | |
shared_blks_hit | int8 | Общее число попаданий разделяемых блоков в кеш для данного оператора | |
shared_blks_read | int8 | Общее число разделяемых блоков, прочитанных данным оператором | |
shared_blks_dirtied | int8 | Общее число разделяемых блоков, «загрязнённых» данным оператором | |
shared_blks_written | int8 | Общее число разделяемых блоков, записанных данным оператором | |
local_blks_hit | int8 | Общее число попаданий локальных блоков в кеш для данного оператора | |
local_blks_read | int8 | Общее число локальных блоков, прочитанных данным оператором | |
local_blks_dirtied | int8 | Общее число локальных блоков, «загрязнённых» данным оператором | |
local_blks_written | int8 | Общее число локальных блоков, записанных данным оператором | |
temp_blks_read | int8 | Общее число временных блоков, прочитанных данным оператором | |
temp_blks_written | int8 | Общее число временных блоков, записанных данным оператором | |
shared_blk_read_time | float8 | Общее время, затраченное оператором на чтение разделяемых блоков, в миллисекундах (если включён track_io_timing, иначе ноль) | |
shared_blk_write_time | float8 | Общее время, затраченное оператором на запись разделяемых блоков, в миллисекундах (если включён track_io_timing, иначе ноль) | |
local_blk_read_time | float8 | Общее время, затраченное оператором на чтение локальных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 17 всегда содержит ноль. | |
local_blk_write_time | float8 | Общее время, затраченное оператором на запись локальных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 17 всегда содержит ноль. | |
temp_blk_read_time | float8 | Общее время, затраченное оператором на чтение временных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
temp_blk_write_time | float8 | Общее время, затраченное оператором на запись временных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
wal_records | int8 | Общее число записей WAL, сгенерированных при выполнении оператора | |
wal_fpi | int8 | Общее число образов полных страниц в WAL, сгенерированных при выполнении оператора | |
wal_bytes | numeric | Общий объём WAL (в байтах), сгенерированный при выполнении оператора | |
wal_buffers_full | bigint | Количество случаев переполнения буферов WAL. В версиях Postgres Pro ниже 18 всегда содержит ноль. | |
jit_functions | int8 | Общее число функций, скомпилированных в JIT-код при выполнении оператора. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_generation_time | float8 | Общее время, затраченное на компиляцию JIT-кода при выполнении оператора, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_inlining_count | int8 | Количество встраиваний функций, используемых в операторе. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_inlining_time | float8 | Общее время, затраченное на встраивание функций при выполнении оператора, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_optimization_count | int8 | Количество JIT-оптимизаций для оператора. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_optimization_time | float8 | Общее время, затраченное на JIT-оптимизацию при выполнении оператора, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_emission_count | int8 | Сколько раз выдавался код при выполнении оператора. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_emission_time | float8 | Общее время, затраченное на выдачу кода при выполнении оператора, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. | |
jit_deform_count | int8 | Общее число функций преобразования кортежей, скомпилированных в JIT-код при выполнении оператора. В версиях Postgres Pro ниже 17 всегда содержит ноль. | |
jit_deform_time | float8 | Общее время, затраченное оператором на компилирование функций преобразования кортежей в JIT-код, в миллисекундах. В версиях Postgres Pro ниже 17 всегда содержит ноль. | |
parallel_workers_to_launch | bigint | Число параллельных рабочих процессов, которые планируется запустить. В версиях Postgres Pro ниже 18 всегда содержит ноль. | |
parallel_workers_launched | bigint | Число запущенных параллельных рабочих процессов. В версиях Postgres Pro ниже 18 всегда содержит ноль. | |
wait_stats | jsonb | Объект типа jsonb, содержащий статистику по событиям ожидания для каждого выполнения запроса по соответствующему плану. Все показатели представлены в миллисекундах и кратны параметру конфигурации pgpro_stats.profile_period. | |
inval_msgs | pgpro_stats_inval_msgs | Число сообщений аннулирования кеша по типам, выданных при выполнении оператора (если это поддерживает сервер, иначе — 0). | |
stats_since | timestamp with time zone | Время начала сбора статистики по этому оператору | |
minmax_stats_since | timestamp with time zone | Время начала сбора статистики минимальных/максимальных значений по этому оператору (столбцы min_plan_time, max_plan_time, min_exec_time и max_exec_time) |
Аналогично расширению pg_stat_statements, DML запросы (то есть SELECT, INSERT, UPDATE, DELETE и MERGE) в pgpro_stats объединяются в одну запись, когда они имеют идентичные структуры запросов согласно внутреннему вычисленному хешу. Обычно два запроса будут считаться равными при таком сравнении, если они семантически равнозначны, не считая значений констант, фигурирующих в запросе. Однако служебные команды (то есть все другие команды) сравниваются строго по текстовым строкам запросов. Когда значение константы игнорируется в целях сравнения запроса с другими запросами, эта константа заменяется в выводе pgpro_stats обозначением параметра, например, $k, где k - натуральное число. Если в запросе уже есть параметры, то начальное значение k равно номеру, следующим за номером последнего параметра $n в исходном тексте запроса. Если параметров нет, то начальное значение k равно единице. Стоит отметить, что в некоторых случаях на эту нумерацию могут влиять скрытые символы параметров. Например, PL/pgSQL применяет такие символы для добавления в запросы значений локальных переменных функций, так что оператор PL/pgSQL вида SELECT i + 1 INTO j будет представлен в тексте как SELECT i + $2.
В некоторых случаях запросы с визуально различными текстами могут быть объединены в одну запись pgpro_stats_statements. Обычно это происходит только для семантически равнозначных запросов, но есть небольшая вероятность, что из-за наложений хеша несвязанные запросы могут оказаться объединёнными в одной записи. (Однако это невозможно для запросов, относящимся к разным пользователям или базам данных.)
Подобный механизм объединения текстов pgpro_stats использует и для текстов планов. При этом делается попытка сопоставить номера констант в тексте плана соответствующим номерам констант в тексте запроса. Если такая попытка для какой-либо константы в тексте плана оканчивается неудачей, то ей присваивается следующий номер, больший максимального номера заменённой константы в тексте запроса. Например, для запроса:
SELECT 1::int, 'abc'::VARCHAR(3), 2::int;
в его тексте и в тексте соответствующего плана pgpro_stats подставит номера констант следующим образом:
postgres=# SELECT query, plan FROM pgpro_stats_statements;
query | plan
------------------------------------------------+--------------------------------------------------
SELECT $1::int, $2::VARCHAR(3), $3::int | Result +
| Output: $1, $4, $3 +В данном тексте плана удалось сопоставить константы с номерами 1 и 3 из текста запроса, а константу с номером 2 сопоставить не удалось, и она была заменена номером, следующим за максимальным номером в тексте запроса — номером 4.
При подстановке номеров в тесте плана делается исключение для номера версии XML документа. Если в исходном запросе он был задан константой, например '1.0', то в тексте плана это значение сохранится как есть и не будет заменено на подстановочный символ вида $k. Если в исходном запросе номер версии XML документа был задан выражением, то подстановка символов вместо констант будет сделана по обычным правилам.
G.5.4.2. Представление pgpro_stats_totals
Агрегированная статистика, собранная модулем, выдаётся через представление pgpro_stats_totals. Это представление содержит отдельные строки для каждого отдельного объекта БД (но в количестве, не превышающем максимальное число различных объектов, которое может отслеживать модуль). Столбцы представления показаны в Таблице G.82.
Таблица G.82. Столбцы pgpro_stats_totals
| Name | Тип | Описание |
|---|---|---|
object_type | text | Тип объекта, для которого агрегируется статистика: «cluster» (кластер БД), «database» (база данных), «user» (пользователь), «client_addr» (адрес клиента), «application» (приложение), «backend» (обслуживающий процесс), «session» (сеанс) |
object_id | bigint | Идентификатор объекта: OID для баз и пользователей, PID для обслуживающих процессов, NULL для иных объектов |
object_name | text | Текстовое имя объекта либо NULL |
queries_planned | int8 | Число спланированных запросов |
total_plan_time | float8 | Общее время, затраченное на планирование операторов, в миллисекундах |
total_plan_rusage | pgpro_stats_rusage | Агрегированная статистика использования ресурсов при планировании операторов |
queries_executed | int8 | Число выполненных запросов |
total_exec_time | float8 | Общее время, затраченное на выполнение операторов, в миллисекундах |
total_exec_rusage | pgpro_stats_rusage | Агрегированная статистика использования ресурсов при выполнении операторов |
rows | int8 | Общее число строк, полученных или затронутых операторами |
shared_blks_hit | int8 | Общее число попаданий разделяемых блоков в кеш для данных операторов |
shared_blks_read | int8 | Общее число разделяемых блоков, прочитанных операторами |
shared_blks_dirtied | int8 | Общее число разделяемых блоков, «загрязнённых» операторами |
shared_blks_written | int8 | Общее число разделяемых блоков, записанных операторами |
local_blks_hit | int8 | Общее число попаданий локальных блоков в кеш для данных операторов |
local_blks_read | int8 | Общее число локальных блоков, прочитанных операторами |
local_blks_dirtied | int8 | Общее число локальных блоков, «загрязнённых» операторами |
local_blks_written | int8 | Общее число локальных блоков, записанных операторами |
temp_blks_read | int8 | Общее число локальных блоков, прочитанных операторами |
temp_blks_written | int8 | Общее число временных блоков, записанных операторами |
shared_blk_read_time | float8 | Общее время, затраченное операторами на чтение разделяемых блоков, в миллисекундах (если включён track_io_timing, иначе ноль) |
shared_blk_write_time | float8 | Общее время, затраченное операторами на запись разделяемых блоков, в миллисекундах (если включён track_io_timing, иначе ноль) |
local_blk_read_time | float8 | Общее время, затраченное операторами на чтение локальных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 17 всегда содержит ноль. |
local_blk_write_time | float8 | Общее время, затраченное операторами на запись локальных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 17 всегда содержит ноль. |
temp_blk_read_time | float8 | Общее время, затраченное операторами на чтение временных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 15 всегда содержит ноль. |
temp_blk_write_time | float8 | Общее время, затраченное операторами на запись временных блоков, в миллисекундах (если включён track_io_timing, или ноль в противном случае). В версиях Postgres Pro ниже 15 всегда содержит ноль. |
wal_records | int8 | Общее число записей WAL, сгенерированных при выполнении операторов |
wal_fpi | int8 | Общее число образов полных страниц в WAL, сгенерированных при выполнении операторов |
wal_bytes | numeric | Общий объём WAL (в байтах), сгенерированный при выполнении операторов |
wal_buffers_full | bigint | Общее количество случаев переполнения буферов WAL. В версиях Postgres Pro ниже 18 всегда содержит ноль. |
jit_functions | int8 | Общее число функций, скомпилированных в JIT-код при выполнении операторов. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_generation_time | float8 | Общее время, затраченное на компиляцию JIT-кода при выполнении операторов, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_inlining_count | int8 | Количество встраиваний функций, используемых в операторах. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_inlining_time | float8 | Общее время, затраченное на встраивание функций при выполнении операторов, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_optimization_count | int8 | Количество JIT-оптимизаций для операторов. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_optimization_time | float8 | Общее время, затраченное на JIT-оптимизацию при выполнении операторов, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_emission_count | int8 | Сколько раз выдавался код при выполнении операторов. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_emission_time | float8 | Общее время, затраченное на выдачу кода при выполнении операторов, в миллисекундах. В версиях Postgres Pro ниже 15 всегда содержит ноль. |
jit_deform_count | int8 | Общее число функций преобразования кортежей, скомпилированных в JIT-код при выполнении операторов. В версиях Postgres Pro ниже 17 всегда содержит ноль. |
jit_deform_time | float8 | Общее время, затраченное операторами на компилирование функций преобразования кортежей в JIT-код, в миллисекундах. В версиях Postgres Pro ниже 17 всегда содержит ноль. |
parallel_workers_to_launch | bigint | Число параллельных рабочих процессов, которые операторы планируют запустить. В версиях Postgres Pro ниже 18 всегда содержит ноль. |
parallel_workers_launched | bigint | Число параллельных рабочих процессов, запущенных операторами. В версиях Postgres Pro ниже 18 всегда содержит ноль. |
wait_stats | jsonb | Объект типа jsonb, содержащий статистику по событиям ожидания для каждого выполнения запроса. Все показатели представлены в миллисекундах и кратны параметру конфигурации pgpro_stats.profile_period. |
inval_msgs | pgpro_stats_inval_msgs | Число сообщений аннулирования кеша по типам, выданных при выполнении операторов (если это поддерживает сервер, иначе — 0). |
cache_resets | int4 | Число сбросов разделяемого кеша (только для кластера БД, баз данных и обслуживающих процессов). Увеличивается для обслуживающего процесса, когда он получает сообщение, вызывающее полный сброс кеша. |
stats_since | timestamp with time zone | Время, когда начался сбор статистики по операторам |
G.5.4.3. Представление pgpro_stats_info
Статистика самого модуля pgpro_stats собирается и выдаётся через представление с именем pgpro_stat_info. Это представление содержит только одну строку. Столбцы представления показаны в Таблице G.83.
Таблица G.83. Столбцы pgpro_stats_info
| Name | Тип | Описание |
|---|---|---|
dealloc | bigint | Сколько всего раз в pgpro_stats_statements отбрасывались записи о редко выполняемых операторах, поскольку на обработку поступало больше различных операторов, чем задано в параметре pgpro_stats.max |
stats_reset | timestamp with time zone | Время последнего сброса всех статистических данных в представлении pgpro_stats_statements |