25.12.2025

Расширение auto_dump версии 1.1

Для расследования проблем с пакетными запросами в СУБД PostgreSQL с патчем от 1С, начиная с версий

было обновлено расширение auto_dump до версии 1.1.

Данное расширение помогает упростить процесс получения воспроизведения медленного выполнения запроса без использования платформы 1С:Предприятие.

Расширение:

 

Параметры для настройки расширения

Общие параметры

auto_dump.enable – булево

Признак включения расширения. По умолчанию расширение выключено.

auto_dump.output_directory - строка

Путь директории, в которую будут сохраняться файлы с дампами таблиц. Параметр обязателен для настройки. У пользователя, под которым запущена служба СУБД, должны быть права на запись в этой директории.

 

Параметры, включающие критерии срабатывания

auto_dump.dump_on_query_string - строка

Фрагмент sql-запроса, при появлении которого в запросе будет осуществлено срабатывание получения дампа.

auto_dump.dump_on_cancel - булево

При включении параметра будет осуществляться дамп запросов отмененных со стороны СУБД (например, командой pg_cancel_backend или в момент lock timeout). По умолчанию параметр выключен.

auto_dump.dump_on_bad_plan – булево

При включении параметра будет анализироваться ожидаемое и фактическое количество строк для всех запросов. Чтобы сработало автоматическое формирование дампа по запросу, должны одновременно выполниться два критерия auto_dump.bad_plan_percent_threshold и auto_dump.bad_plan_count_threshold, которые определяют запрос как «проблемный». По умолчанию параметр выключен.

auto_dump.bad_plan_count_threshold – число

Критерий срабатывания автоматического дампа по абсолютной разнице между ожидаемым и фактическим количеством строк.
Анализируются все узлы плана. Если ожидаемое количество строк отличается от фактического количества строк более чем на заданное в параметре число, то критерий считается выполнен.
Если значение равно 0, то критерий срабатывать не будет.
По умолчанию параметр установлен 0.

auto_dump.bad_plan_percent_threshold – число

Критерий срабатывания автоматического дампа по разнице в процентах между ожидаемым и фактическим количеством строк.
В качестве параметра устанавливается число от 0 до 100. Анализируются все узлы плана. По каждому узлу проверяется отношение суммы ожидаемого количества строк и фактического количества строк к ожидаемому количеству строк. Если это отношение превышает установленный параметр, то критерий считается выполненным.
Если значение равно 0, то критерий срабатывать не будет.
По умолчанию параметр установлен 0.

auto_dump.dump_on_duration - число

Критерий срабатывания автоматического дампа по времени выполнения запроса (в миллисекундах).
Если установлено значение 0 – будут сформированы дампы для всех запросов.
Если установлено значение -1 – параметр не будет срабатывать.
По умолчанию параметр установлен -1.

Параметры, определяющие объём данных в дампе

auto_dump.dump_temporary_tables – булево

При включении параметра в дамп будут добавлены временные таблицы сессии, участвующие в текущем запросе.
По умолчанию включено.

auto_dump.dump_persistent_tables – булево

При включении параметра в дамп будут добавлены все постоянные таблицы, участвующие в текущем запросе.
По умолчанию выключено.

auto_dump.dump_all_temp_tables – булево

При включении параметра в дамп будут добавлены все временные таблицы сессии, в том числе и участвующие в текущем запросе.
По умолчанию выключено.

auto_dump.dump_data – булево

При включении параметра в дамп будет записано содержимое таблиц, для которых снимается дамп. Если параметр выключен, то в sql-запросе будет описано только создание таблиц, без их заполнения.
По умолчанию включено.

auto_dump.dump_indexes – булево

При включении параметра в дамп будет записано создание индексов для таблиц, которые участвуют в дампе.
По умолчанию включено.

auto_dump.dump_query – булево

При включении параметра будет сформирован файл с sql-запросом, для которого сформирован дамп.
По умолчанию включено.

auto_dump.dump_create – булево

При включении параметра будет сформирован файл с sql-командами создания таблиц, для которых снимается дамп.
По умолчанию включено.

auto_dump.dump_plan - булево

При включении параметра будет сформирован файл с планом выполнения текущего SQL-запроса.
По умолчанию включено.

auto_dump.data_format - строка

Параметр задаёт формат сохранения данных при создании дампа. Возможные значения параметра:
- "insert" - данные помещаются в виде INSERT запроса;
- "copy-file" - данные помещаются в отельный файл с именем вида "table-имя_таблицы.txt". В sql файле помещается служебная команда "\copy" для psql. Данный режим совместим только с psql-совместимыми утилитами. Выполнение запроса необходимо осуществлять из директории с дампом.
- "copy-stdin" - данные помещаются в формате "COPY FROM stdin", аналогично утилите pg_dump.
По умолчанию установлено значение "copy-stdin".

  

Включение расширения

Для работы расширения необходимо добавить его в конфигурационном файле postgresql.conf

Копировать в буфер обмена

shared_preload_libraries = ‘auto_dump’

 

Затем описать необходимые параметры расширения и перезапустить службу СУБД.

Через утилиту psql необходимо подключиться к базе данных и создать в ней расширение

Копировать в буфер обмена

user@server: psql -h localhost -U postgres -d myDB
myDB =# CREATE EXTENSION auto_dump;

 

Функции для ручного формирования дампов

Добавлены SQL функции для ручного запуска формирования дампов. Выполнение данных функций возможно только под пользователем с ролью superuser.

 

auto_dump_immediate(pid), где pid - число

Функция выполняет отмену запроса, выполняемого сессией с идентификатором pid, с последующим снятием дампа.

 

auto_dump_current(pid), где pid – число

Функция выполняет снятие дампа после завершения текущего выполняемого запроса в сессии с идентификатором pid.

 

auto_dump_next(pid), где pid – число

Функция выполняет снятие дампа следующего запроса в сессии с идентификатором pid.

 

Описание файлов дампа

При автоматическом срабатывании по одному из критериев или при ручном запуске расширения, в каталоге из параметра output_directory будет создан подкаталог, который имеет следующий формат:

PIDПроцесса-ГГГГ-ММ-ДД-ЧЧ-ММ-СС-ПорядковыйНомер

 

Внутри каталога формируются файлы:

 

query.sql - содержит текст запроса, для которого делается дамп. Наличие файла зависит от параметра dump_query.

 

create_persistent.sql - содержит команды по созданию постоянных таблиц и (или) индексов. Наличие файла зависит от параметров dump_create, dump_indexes и dump_persistent_tables.

 

create_temporary.sql - содержит команды по созданию временных таблиц и (или) индексов. Наличие файла зависит от параметра dump_create, dump_indexes, dump_all_temp_tables и dump_temporary_tables.

 

insert_persistent.sql - содержит команды по заполнению постоянных таблиц. Наличие файла зависит от параметров dump_data и dump_persistent_tables.

 

insert_temporary.sql - содержит команды по заполнению временных таблиц. Наличие файла зависит от параметров dump_data, dump_all_temp_tables и dump_temporary_tables.

 

plan_explain.txt - содержит план запроса в формате вывода команды EXPLAIN. Наличие файла зависит от параметра dump_plan.

 

plan_analyze.txt - содержит план запроса в формате вывода команды EXPLAIN (ANALYZE, BUFFERS, SETTINGS). Наличие файла зависит от параметра dump_plan.

 

файлы вида "table-<имя_таблица>.txt". Формируются только в случае auto_dump.data_format="copy-file".

 

readme.txt – содержит примеры использования вышеописанных файлов.

 

Пример использования

С помощью технологического журнала по событию DBPOSTGRS был получен текст sql-запроса

Копировать в буфер обмена
SELECT
T1._Q_001_F_000RRef,
T1._Q_001_F_001RRef,
T1._Q_001_F_002,
T2._Fld32
FROM pg_temp.tt1 T1
LEFT OUTER JOIN _Reference8 T2
ON (T1._Q_001_F_000RRef = T2._IDRRef)

 

В конфигурационном файле postgresql.conf были добавлены строки:

Копировать в буфер обмена
shared_preload_libraries = ‘auto_dump’
auto_dump.enable = on
auto_dump.output_directory =/tmp/auto_d’
auto_dump.dump_on_query_string = ‘LEFT OUTER JOIN _Reference8’
auto_dump.dump_persistent_tables = on

 

Перезапуск службы postgresql

Копировать в буфер обмена

user@server: sudo systemctl restart postgresql@16-main.service

 

Добавление расширения в базу данных auto_d

Копировать в буфер обмена
user@server: psql -h localhost -U postgres -d auto_d
auto_d=# create extension auto_dump;
CREATE EXTENSION

 

Пользователь в 1С выполнил действие, которое использует проблемный запрос.
После этого в каталоге ‘/tmp/auto_d’ появился новый каталог, который имеет следующий формат “PIDПроцесса-ГГГГ-ММ-ДД-ЧЧ-ММ-СС-ПорядковыйНомер

Копировать в буфер обмена
user@server:/tmp/auto_d/67748-2025_12_02_17_21_48_00$ ls -l
-rw-rw-r-- 1 postgres postgres 1241 дек  2 14:26 create_persistent.sql
-rw-rw-r-- 1 postgres postgres 120 дек  2 14:26 create_temporary.sql
-rw-rw-r-- 1 postgres postgres 4876 дек  2 14:26 insert_persistent.sql
-rw-rw-r-- 1 postgres postgres 3322 дек  2 14:26 insert_temporary.sql
-rw-rw-r-- 1 postgres postgres 1151 дек  2 14:26 plan_analyze.txt
-rw-rw-r-- 1 postgres postgres 458 дек  2 14:26 plan_explain.txt
-rw-rw-r-- 1 postgres postgres 166 дек  2 14:26 query.sql

 

 

Для отладки запроса можно перенести файлы на отдельный тестовый стенд, на нем подключиться через psql

Копировать в буфер обмена

user@testserver: psql -h localhost -U postgres -d testDB

 

Создать и заполнить необходимые таблицы

Копировать в буфер обмена
testDB =# \i create_persistent.sql;
testDB =# \i insert_persistent.sql;
testDB =# \i create_temporary.sql;
testDB =# \i insert_temporary.sql;

И выполнить запрос

Копировать в буфер обмена

testDB =# \i query.sql;