F.41. pgpro_cpumeter
pgpro_cpumeter — это расширение, которое предоставляет доступ к новой системной функции мониторинга использования процессора. Функция pgpro_cpumeter непрерывно собирает и записывает информацию о ядрах процессора, используемых процессами сервера Postgres Pro.
F.41.1. Установка
Расширение pgpro_cpumeter включено в состав Postgres Pro Standard как стандартное расширение. Чтобы включить pgpro_cpumeter, выполните следующий запрос:
CREATE EXTENSION pgpro_cpumeter;
F.41.2. Функция pgpro_cpumeter
Расширение pgpro_cpumeter предоставляет следующую системную функцию:
-
pgpro_cpumeter(OUT start_time timestamptz, OUT end_time timestamptz, OUT user_time int, OUT system_time int, OUT cpus_allowed int, OUT cpus_online int, OUT arch text, OUT machine_id text, OUT system_identifier bigint) returns setof record Возвращает собранную статистику использования процессора в следующих выходных столбцах:
start_timeВремя начала периода измерений. Это значение включается в период измерений (
[start_time, end_time)). Соответствует значениюend_timeпредыдущего периода измерений.end_timeВремя окончания периода измерений, указывает момент записи собранной информации на диск. Это значение не включается в период измерения (
[start_time, end_time)). Используется какstart_timeдля следующего периода измерений.user_timeОбщее время использования процессора всеми процессами Postgres Pro в пользовательском режиме, в секундах.
system_timeОбщее время использования процессора всеми процессами Postgres Pro в режиме ядра, в секундах.
cpus_allowedКоличество логических ядер процессора, доступных процессам Postgres Pro. Это значение может быть ограничено, например, с помощью утилиты
taskset, и обычно меньше или равноcpus_online.cpus_onlineКоличество логических ядер процессора, активных в данный момент и доступных операционной системе. Это значение может быть меньше общего количества физических ядер в системе, например, если некоторые ядра отключены.
archАрхитектура процессора. Это значение остаётся постоянным для всего кластера баз данных.
machine_idУникальный идентификатор хоста, хранящийся в файле
/etc/machine-id. Это значение может измениться при переносе каталогаPGDATAна другой сервер.system_identifierСистемный идентификатор кластера баз данных. Это значение остаётся постоянным на протяжении всего существования кластера и изменяется только в редких исключительных случаях.
F.41.3. Ограничения и особенности
При использовании pgpro_cpumeter учитывайте следующие особенности:
Собранная статистика записывается каждые 10 минут. Этот интервал не может быть изменён.
Однако статистика также записывается в процессе остановки сервера до полной остановки. В этом случае последний период измерений может составлять менее 10 минут.
При следующем запуске сервера значение
start_timeне будет совпадать со значениемend_timeпоследнего периода. Значениеstart_timeдля первой записи будет равно времени запуска сервера.При сбое сервера собранная статистика за последний период измерений (до 10 минут) теряется.
F.41.4. Пример
В примере ниже показано, как использовать pgpro_cpumeter, а также представлен ожидаемый результат.
postgres=# CREATE EXTENSION pgpro_cpumeter;
CREATE EXTENSION
postgres=# SELECT * FROM pgpro_cpumeter() ORDER BY start_time ASC LIMIT 5;
start_time | end_time | user_time | system_time | cpus_allowed | cpus_online | arch | machine_id | system_identifier
-------------------------------+-------------------------------+-----------+-------------+--------------+-------------+--------+----------------------------------+---------------------
2025-11-18 14:20:18.83645+03 | 2025-11-18 14:30:19.209694+03 | 43 | 23 | 8 | 8 | x86_64 | 38ee3ff28a0044acbb18dd42c3c3b626 | 7574023672154028988
2025-11-18 14:30:19.209694+03 | 2025-11-18 14:40:19.494243+03 | 5456 | 432 | 8 | 8 | x86_64 | 38ee3ff28a0044acbb18dd42c3c3b626 | 7574023672154028988
2025-11-18 14:40:19.494243+03 | 2025-11-18 14:50:19.718256+03 | 0 | 0 | 3 | 8 | x86_64 | 38ee3ff28a0044acbb18dd42c3c3b626 | 7574023672154028988
2025-11-18 14:50:19.718256+03 | 2025-11-18 15:00:19.972368+03 | 5 | 2 | 3 | 8 | x86_64 | 38ee3ff28a0044acbb18dd42c3c3b626 | 7574023672154028988
2025-11-18 15:00:19.972368+03 | 2025-11-18 15:10:20.222102+03 | 97 | 21 | 3 | 8 | x86_64 | 38ee3ff28a0044acbb18dd42c3c3b626 | 7574023672154028988
(5 rows)
postgres=# SELECT start_time, end_time, user_time, system_time, cpus_allowed, cpus_online FROM pgpro_cpumeter() ORDER BY start_time ASC LIMIT 5;
start_time | end_time | user_time | system_time | cpus_allowed | cpus_online
-------------------------------+-------------------------------+-----------+-------------+--------------+-------------
2025-11-18 14:20:18.83645+03 | 2025-11-18 14:30:19.209694+03 | 43 | 23 | 8 | 8
2025-11-18 14:30:19.209694+03 | 2025-11-18 14:40:19.494243+03 | 5456 | 432 | 8 | 8
2025-11-18 14:40:19.494243+03 | 2025-11-18 14:50:19.718256+03 | 0 | 0 | 3 | 8
2025-11-18 14:50:19.718256+03 | 2025-11-18 15:00:19.972368+03 | 5 | 2 | 3 | 8
2025-11-18 15:00:19.972368+03 | 2025-11-18 15:10:20.222102+03 | 97 | 21 | 3 | 8
(5 rows)
postgres=# SELECT
min(start_time) AS min_start_time,
max(end_time) AS max_end_time,
sum(user_time) AS total_user_time,
sum(system_time) AS total_system_time,
cpus_allowed,
cpus_online,
arch,
machine_id,
system_identifier
FROM pgpro_cpumeter()
WHERE start_time >= '2025-11-17' AND end_time < '2025-11-22'
GROUP BY cpus_allowed, cpus_online, arch, machine_id, system_identifier
ORDER BY min_start_time ASC;
min_start_time | max_end_time | total_user_time | total_system_time | cpus_allowed | cpus_online | arch | machine_id | system_identifier
-------------------------------+-------------------------------+-----------------+-------------------+--------------+-------------+--------+----------------------------------+---------------------
2025-11-18 14:20:18.83645+03 | 2025-11-21 12:15:30.438471+03 | 755332 | 43234 | 8 | 8 | x86_64 | 38ee3ff28a0044acbb18dd42c3c3b626 | 7574023672154028988
2025-11-18 18:31:08.321651+03 | 2025-11-21 13:25:53.491532+03 | 54526 | 3231 | 3 | 8 | x86_64 | 38ee3ff28a0044acbb18dd42c3c3b626 | 7574023672154028988
(2 rows)