Перейти к основному содержимому

pg_stat_kcache. Статистика об операциях чтения и записи на уровне файловой системы

Версия: 2.2.1.

В исходном дистрибутиве установлено по умолчанию: да.

Связанные компоненты: pg_stat_statements.

Схема размещения: ext.

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

Модуль предоставляется в виде расширения и требует установки расширения pg_stat_statements.

Модуль создает несколько объектов:

  • pg_stat_kcache view;
  • pg_stat_kcache_detail view;
  • pg_stat_kcache_reset function;
  • pg_stat_kcache function.

Доработка

Доработка не проводилась.

Ограничения

Ограничения отсутствуют.

Установка

Сведения

Установка расширения может быть произведена в процессе развертывании СУБД Pangolin при использовании параметра pg_stat_kcache_is_enable: true (документ «Руководство по установке», раздел «Автоматизированная установка при помощи Ansible-скриптов»).

Ручная установка

  1. С помощью метакоманды \dx в psql проверьте, что расширение pg_stat_statements присутствует в списке:

    \dx

    Вывод:

            Name        | Version |   Schema   |                              Description
    --------------------+---------+------------+------------------------------------------------------------------------
    ...
    pg_stat_statements | 1.8 | ext | track planning and execution statistics of all SQL statements executed
    ...
  2. Создайте расширение pg_stat_kcache. Пропишите расширение в параметр предзагружаемых библиотек:

    shared_preload_libraries = 'pg_stat_statements,pg_stat_kcache'

    Внимание!

    Расширение pg_stat_kcache должно идти после pg_stat_statements, иначе база не запустится.

  3. Активируйте расширение. Установите расширение в схему ext:

    CREATE EXTENSION pg_stat_kcache schema ext;

    Настройте пользователя:

    GRANT EXECUTE ON FUNCTION ext.pg_stat_kcache_reset TO profile_tuz;
    GRANT EXECUTE ON FUNCTION ext.pg_stat_kcache TO profile_tuz;

    Настроить права пользователя as_admin:

    GRANT EXECUTE ON FUNCTION ext.pg_stat_kcache_reset to as_admin;
    GRANT EXECUTE ON FUNCTION ext.pg_stat_kcache to as_admin;

    Проверьте активацию параметра pg_stat_kcache.is_enabled.

  4. Обновите pg_stat_kcache до новой версии.

    Новые версии pg_stat_kcache будут содержать скрипт миграции (когда это возможно). Так, в случае обновления необходимо будет установить новые файлы расширения и обновить расширение:

    ALTER EXTENSION pg_profile UPDATE;

Настройка

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

Параметр pg_stat_kcache.linuz_hz = -1 позволяет установить частоту аппаратных прерываний (тиков ЦПУ) для компенсации ошибок выборки. Для данного расширения можно явно указать, какой параметр задан в системе (параметр CONFIG_HZ ядра linux). По умолчанию установлено значение -1 — это означает, что расширение попытается автоматически рассчитать эту частоту при старте.

Использование модуля

Просмотр детальной информации об операциях

  1. Создайте таблицу:

    CREATE TABLE big_table (id integer, val text);

    Вывод:

    CREATE TABLE
  2. Выполните запросы для изменения статистики:

    INSERT INTO big_table 
    SELECT i, repeat('line ' || i,50)
    FROM generate_series(1,1000000) i;

    Вывод:

    INSERT 0 1000000
    SELECT i, i * 2 AS doubled_value FROM generate_series(1,1000000) i;

    Часть вывода:

    i   | doubled_value
    ----+--------------
    1 | 2
    2 | 4
    3 | 6
    4 | 8
    5 | 10

  3. Посмотрите статистику последних выполненных запросов:

    SELECT * FROM pg_stat_kcache_detail;

    Пример вывода:

    -[ RECORD 1]---------------------------------------------------------------------------------
    query | INSERT INTO big_table SELECT i, repeat(? || i,?) FROM generate_series(?,?) i;
    datname | <database_name>
    rolname | <role_name>
    reads | 0
    reads_blks | 0
    writes | 933814272
    writes_blks | 107753
    user_time | 7.592
    system_time | 0.86
    -[ RECORD 2]---------------------------------------------------------------------------------
    query | SELECT i, i * 2 AS doubled_value FROM generate_series(?,?) i;
    datname | <database_name>
    rolname | <role_name>
    reads | 0
    reads_blks | 0
    writes | 0
    writes_blks | 0
    user_time | 5.032
    system_time | 0.088

Получен ряд показателей, среди которых информация о том, сколько времени заняло выполнение запроса, сколько данных было записано на диск и сколько использовано ресурсов процессора (CPU).

Ссылки на документацию разработчика

Дополнительно поставляемый модуль pg_stat_kcache: https://powa.readthedocs.io/en/latest/components/stats_extensions/pg_stat_kcache.html.