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

pg_stat_statements. Статистика выполнения сервером всех операторов SQL

Версия: 1.10.

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

Связанные компоненты: отсутствуют.

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

Модуль pg_stat_statements позволяет отслеживать статистику выполнения сервером всех операторов SQL.

Расширение установлено со следующими параметрами:

Параметр

Описание

Значение по умолчанию

pg_stat_statements.max

Максимальное количество различных запросов, по которым хранится статистика. Если этот параметр будет недостаточно большим — расширение pg_profile будет выдавать предупреждения (в случае, если кеш при сборе статистики заполнен на 80%)

5000 (из установщика)

pg_stat_statements.track

Типы запросов (top/nested) по которым хранится статистика: top, all, none

top

pg_stat_statements.track_utility

При значении параметра off, статистика будет храниться только для запросов SELECT, INSERT, UPDATE и DELETE

on

pg_stat_statements.track_planning

Сохранение отдельно статистику этапа планирования

off

pg_stat_statements.save

Сохранение статистики в файл, в случае штатной перезагрузки сервера

on

Доработка

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

Ограничения

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

Установка

Сведения

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

Включение модуля возможно вручную при наличии прав администратора СУБД:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements SCHEMA ext;

Настройка

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

Необходимо добавить модуль в shared_preload_libraries в файл postgresql.conf.

shared_preload_libraries = 'pg_stat_statements'

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

Просмотр статистики запроса

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

    CREATE TABLE t(n numeric);

    Вывод:

    CREATE TABLE
  2. Выполните запрос (к примеру, запись данных в таблицу):

    SELECT format('INSERT INTO t VALUES (%L)', x) FROM generate_series(1,5) AS x;

    Вывод:

    INSERT 0 1
    INSERT 0 1
    INSERT 0 1
    INSERT 0 1
    INSERT 0 1
  3. Выполните запрос на статистику оператора SQL, который выполнялся:

    SELECT * FROM pg_stat_statements ORDER BY calls DESC LIMIT 1;

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

    -[ RECORD 1 ]----------+--------------------------
    userid | {userid}
    dbid | {dbid}
    queryid | {queryid}
    query | INSERT INTO t VALUES ($1)
    plans | 0
    total_plan_time | 0
    min_plan_time | 0
    max_plan_time | 0
    mean_plan_time | 0
    stddev_plan_time | 0
    calls | 5
    total_exec_time | 0.21237
    min_exec_time | 0.017385
    max_exec_time | 0.106279
    mean_exec_time | 0.042474
    stddev_exec_time | 0.03365834724997649
    rows | 5
    shared_blks_hit | 4
    shared_blks_read | 0
    shared_blks_dirtied | 1
    shared_blks_written | 1
    local_blks_hit | 0
    local_blks_read | 0
    local_blks_dirtied | 0
    local_blks_written | 0
    temp_blks_read | 0
    temp_blks_written | 0
    blk_read_time | 0
    blk_write_time | 0
    temp_blk_read_time | 0
    temp_blk_write_time | 0
    wal_records | 5
    wal_fpi | 0
    wal_bytes | 300
    jit_functions | 0
    jit_generation_time | 0
    jit_inlining_count | 0
    jit_inlining_time | 0
    jit_optimization_count | 0
    jit_optimization_time | 0
    jit_emission_count | 0
    jit_emission_time | 0

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

Дополнительно поставляемый модуль pg_stat_statements.