auto_explain

Автопротоколирование планов выполнения медленных операторов.
Схема размещения: не используется.
Модуль auto_explain предоставляет возможность автоматического протоколирования планов выполнения медленных операторов, что позволяет обойтись без выполнения EXPLAIN вручную. Возможно применение для выявления неоптимизированных запросов в больших приложениях.
Протокол выводится в текущий журнал работы СУБД. Журналы расположены в каталоге, который указан в параметре СУБД log_directory.
Ниже приведены параметры конфигурации, которые управляют поведением auto_explain. Поведение по умолчанию сводится к бездействию, поэтому необходимо установить как минимум переменную auto_explain.log_min_duration задается, если необходимо получить какие-либо результаты.
Все параметры могут изменять только суперпользователи.
ПараметрТип значенияЗначение по умолчаниюОписание
auto_explain.log_min_duration
integer-1 – отключенВремя выполнения оператора в миллисекундах; при превышении указанного времени план оператора будет протоколироваться;
0 – протоколируются все планы;
-1 – протоколирование планов отключается
auto_explain.log_analyze
booleanfalse – отключенПри включении параметра в протокол будет записываться вывод команды EXPLAIN ANALYZE (не просто EXPLAIN); замер времени на уровне узлов плана производится для всех операторов, даже если они выполняются недостаточно долго для протоколирования. Это может оказать негативное влияние на производительность; отключение auto_explain.log_timing исключает это влияние, при этом собирается меньше информации
auto_explain.log_buffers
booleanfalse – отключенОпределяет вывод статистики об использовании буферов при протоколировании плана; параметр равнозначен указанию BUFFERS команды EXPLAIN и действует при включенном параметре auto_explain.log_analyze
auto_explain.log_wal
booleanfalse – отключенОпределяет вывод статистики об использовании WAL при протоколировании плана; параметр равнозначен указанию WAL команды EXPLAIN и действует только при включенном параметре auto_explain.log_analyze
auto_explain.log_timing
booleanfalse – отключенОпределяет вывод длительности на уровне узлов при протоколировании плана; параметр равнозначен указанию TIMING команды EXPLAIN и действует при включенном параметре auto_explain.log_analyze
auto_explain.log_triggers
booleanfalse – отключенОпределяет запись в протокол статистики выполнения триггеров и действует при включенном параметре auto_explain.log_analyze
auto_explain.log_verbose
booleanfalse – отключенОпределяет вывод подробных сведений при протоколировании плана; параметр равнозначен указанию VERBOSE команды EXPLAIN
auto_explain.log_settings
booleanfalse – отключенОпределяет вывод измененных параметров конфигурации вместе с планами выполнения
auto_explain.log_format
enumtextФормат вывода для EXPLAIN;
возможные значения:
text (по умолчанию);
xml;
json;
yaml
auto_explain.log_level
enumLOGУровень, с которым auto_explain будет выводить в протокол планы запросов;
возможные значения:
DEBUG5;
DEBUG4;
DEBUG3;
DEBUG2;
DEBUG1;
INFO;
NOTICE;
WARNING;
LOG (по умолчанию)
auto_explain.log_nested_statements
booleanfalse – отключенПротоколирование вложенных операторов, выполняемых внутри функции; если параметр отключен, протоколируются планы запросов только верхнего уровня
auto_explain.sample_rate
real1 – отслеживаются все запросыПроцент операторов, которые будут отслеживаться в каждом сеансе;
вложенные операторы отслеживаются совместно:
– все;
– никакой из них

Настройка

Настройка параметров выполняется в конфигурационном файле СУБД $PGDATA/postgresql.conf. Пример:
auto_explain.log_min_duration = '3s'

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

Включите модуль и настройте параметры в рамках текущей сессии:
LOAD 'auto_explain';
SET auto_explain.log_min_duration = 0;
SET auto_explain.log_analyze = true;
Выполните тестовый запрос:
SELECT count(*)
    FROM pg_class, pg_index
    WHERE oid = indrelid AND indisunique;
Пример результата выполнения запроса:
Раскрыть type=sql
 count
-------
   268
(1 row)
В журнал СУБД будет выведен результат работы модуля. Пример:
2023-03-29 13:25:14 MSK [1457]: [4-1] app=psql,user=postgres,db=postgres,client=00.00.00.00,type=client backend LOG:  duration: 0.550 ms planning: 2.539 ms plan:
        Query Text: SELECT count(*)
            FROM pg_class, pg_index
            WHERE oid = indrelid AND indisunique;
        Aggregate  (cost=54.98..54.99 rows=1 width=8) (actual time=0.533..0.539 rows=1 loops=1)
          ->  Hash Join  (cost=43.64..54.31 rows=268 width=0) (actual time=0.386..0.515 rows=268 loops=1)
                Hash Cond: (pg_index.indrelid = pg_class.oid)
                ->  Seq Scan on pg_index  (cost=0.00..9.97 rows=268 width=4) (actual time=0.015..0.095 rows=268 loops=1)
                      Filter: indisunique
                      Rows Removed by Filter: 29
                ->  Hash  (cost=34.95..34.95 rows=695 width=4) (actual time=0.334..0.334 rows=695 loops=1)
                      Buckets: 1024  Batches: 1  Memory Usage: 33kB
                      ->  Seq Scan on pg_class  (cost=0.00..34.95 rows=695 width=4) (actual time=0.010..0.206 rows=695 loops=1)

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

Дополнительную информацию по поставляемому модулю auto_explaink можно получить по ссылке.
Предыдущий раздел
auth_delay
Следующий раздел
autoinc
Была ли страница полезной?