F.44. pgpro_cpumeter

pgpro_cpumeter — это расширение, которое предоставляет доступ к новой системной функции мониторинга использования процессора. Функция pgpro_cpumeter непрерывно собирает и записывает информацию о ядрах процессора, используемых процессами сервера Postgres Pro.

F.44.1. Установка

Расширение pgpro_cpumeter включено в состав Postgres Pro Standard как стандартное расширение. Чтобы включить pgpro_cpumeter, выполните следующий запрос:

  CREATE EXTENSION pgpro_cpumeter;
  

F.44.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.44.3. Ограничения и особенности

При использовании pgpro_cpumeter учитывайте следующие особенности:

  • Собранная статистика записывается каждые 10 минут. Этот интервал не может быть изменён.

    Однако статистика также записывается в процессе остановки сервера до полной остановки. В этом случае последний период измерений может составлять менее 10 минут.

    При следующем запуске сервера значение start_time не будет совпадать со значением end_time последнего периода. Значение start_time для первой записи будет равно времени запуска сервера.

  • При сбое сервера собранная статистика за последний период измерений (до 10 минут) теряется.

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