F.5. auto_dump
Модуль auto_dump — расширение Postgres Pro, предназначенное для сбора данных по длительным и проблемным запросам и последующего воспроизведения этих запросов с целью устранения неполадок.
Чтобы упростить воспроизведение проблемных запросов, расширение формирует файл выгрузки со следующими сущностями:
операторы
CREATE TABLEдля временных и постоянных таблиц, на которые даётся ссылка в запросе;операторы
INSERT/COPYдля заполнения таблиц данными, которые существовали на момент выполнения исходного проблемного запроса;исходный проблемный SQL-запрос и план выполнения этого запроса, который можно сформировать с помощью команды
EXPLAINи/илиEXPLAIN ANALYZE.
F.5.1. Установка и настройка
Расширение auto_dump включено в состав Postgres Pro Standard. Установив Postgres Pro Standard, выполните следующие действия, чтобы подготовить auto_dump к работе:
Добавьте
auto_dumpв параметр shared_preload_libraries в файлеpostgresql.conf:shared_preload_libraries = 'auto_dump'
Поскольку расширение auto_dump по умолчанию отключено, включите его:
auto_dump.enable = on
Перед использованием расширения задайте другие обязательные параметры конфигурации и перезапустите сервер баз данных, чтобы изменения вступили в силу.
F.5.2. Параметры конфигурации
Расширение auto_dump предоставляет следующие параметры конфигурации для настройки автоматической выгрузки запросов.
F.5.2.1. Общие параметры конфигурации
auto_dump.enable(boolean)Включает расширение. По умолчанию этот параметр отключён.
auto_dump.output_directory(string)Задаёт путь в файловой системе к каталогу, в который сохраняются файлы выгрузки таблицы. Это обязательный параметр. У пользователя операционной системы, от имени которого запущена служба, должны быть права на чтение и запись в этом каталоге.
F.5.2.2. Параметры, управляющие условиями триггеров
Следующие параметры конфигурации управляют условиями, которые запускают автоматические выгрузки запросов.
auto_dump.dump_on_query_string(string)Определяет фрагмент SQL-запроса, нечувствительный к регистру, в качестве условия триггера. Если этот фрагмент встречается в запросе, запрос выгружается. Значение по умолчанию — пустая строка (
''), что означает, что триггер для запросов не задан.auto_dump.dump_on_cancel(boolean)Определяет, будет ли осуществляться выгрузка запросов, отменённых СУБД, например, функцией
pg_cancel_backendили по истечении времени ожидания блокировки.Обратите внимание, что параметр
auto_dump.dump_on_cancelне запускает выгрузку для сеансов, которые были прерваны из-за idle_in_transaction_session_timeout или idle_session_timeout.По умолчанию этот параметр отключён.
auto_dump.dump_on_bad_plan(boolean)Сравнить ожидаемое и фактическое число строк для всех запросов. Для выявления проблемных запросов используются два пороговых значения: auto_dump.bad_plan_count_threshold и auto_dump.bad_plan_percent_threshold. Триггер автоматической выгрузки срабатывает только, когда разница в числе строк превышает оба пороговых значения.
По умолчанию этот параметр отключён.
auto_dump.bad_plan_count_threshold(integer)Задаёт условие триггера автоматической выгрузки на основе абсолютной разницы между ожидаемым и фактическим числом строк.
Анализируются все узлы плана выполнения запроса. Условие считается выполненным, если разница между ожидаемым и фактическим числом строк превышает значение этого параметра.
Если для параметра задано значение
0, условие всегда считается выполненным. Значение по умолчанию —1000000.auto_dump.bad_plan_percent_threshold(integer)Задаёт условие триггера автоматической выгрузки на основе разницы между ожидаемым и фактическим числом строк в процентах. Параметр может принимать целочисленные значения от
0до100(значение по умолчанию).Анализируются все узлы плана выполнения запроса. Для каждого узла проверяется разница между ожидаемым и фактическим числом строк в процентах. Условие считается выполненным, если разница превышает значение этого параметра.
Если для параметра задано значение
0, условие всегда считается выполненным.auto_dump.dump_on_time(boolean)Сохранить выгрузку запроса, если время его выполнения превышает значение auto_dump.timeout. По умолчанию этот параметр отключён.
auto_dump.timeout(integer)Задаёт значение тайм-аута для auto_dump.dump_on_time в миллисекундах. Возможные значения — положительные целые числа. Значение по умолчанию —
0. Если для параметра задано значение0, выгружаются все запросы.
Если значения заданы для нескольких параметров, управляющих условиями триггеров, они обрабатываются в следующем порядке:
auto_dump.dump_on_cancelauto_dump.dump_on_query_stringauto_dump.dump_on_bad_planauto_dump.dump_on_time
F.5.2.3. Параметры, управляющие содержанием выгрузок
Следующие параметры конфигурации управляют областью и содержанием автоматических выгрузок.
auto_dump.dump_temporary_tables(boolean)Записать в файл выгрузки временные таблицы сеанса, используемые текущим запросом. По умолчанию этот параметр отключён.
auto_dump.dump_persistent_tables(boolean)Записать в файл выгрузки все постоянные таблицы, используемые текущим запросом. По умолчанию этот параметр отключён.
auto_dump.dump_all_temp_tables(boolean)Записать в файл выгрузки все временные таблицы сеанса, включая те, которые используются текущим запросом. По умолчанию этот параметр отключён.
auto_dump.dump_data(boolean)Записать в файл выгрузки содержимое таблиц. Если параметр отключён, выгружаются SQL-запросы только с командами для создания таблиц. Данными таблицы не наполняются. По умолчанию этот параметр отключён.
Чтобы создать SQL-файл с содержимым таблиц, включите этот параметр, а также auto_dump.dump_temporary_tables или auto_dump.dump_persistent_tables.
auto_dump.dump_indexes(boolean)Записать в файл выгрузки команды для создания индексов для таблиц. По умолчанию параметр отключён.
auto_dump.dump_copy_data(boolean)Определяет метод выгрузки данных таблиц.
Если параметр включён, данные таблиц выгружаются с помощью команды
COPY TO. В результате для каждой таблицы создаётся отдельный TXT-файл, на который даётся ссылка в оператореCOPY ... FROMв файле выгрузки.Если параметр отключён, данные таблиц выгружаются в файл выгрузки в виде операторов
INSERT, содержащих все значения таблиц.По умолчанию этот параметр отключён.
auto_dump.dump_query(boolean)Записать в файл выгрузки SQL-запрос, для которого создаётся выгрузка. По умолчанию этот параметр отключён.
auto_dump.dump_create(boolean)Записать в файл выгрузки SQL-команды для создания выгружаемых таблиц. По умолчанию этот параметр отключён.
auto_dump.dump_plan(boolean)Записать в файл выгрузки план текущего SQL-запроса. По умолчанию этот параметр отключён.
F.5.3. Ограничения и особенности
Используйте расширение auto_dump с осторожностью. Расширение предназначено для отладки и не может использоваться для непрерывного мониторинга. Поэтому не рекомендуется настраивать auto_dump таким образом, чтобы оно выгружало каждый запрос.
Операции auto_dump могут вызывать конфликты, особенно при выгрузке временных таблиц и их содержимого. Обратите внимание на следующие возможные проблемы:
Расширение auto_dump несовместимо с командой
PREPARE TRANSACTIONпри работе с временными таблицами. Проверка операций с временными объектами происходит раньше проверки включённых подготовленных транзакций, из-за чего возникает ошибка, даже если max_prepared_transactions настроен правильно.Если включён параметр
auto_dump.dump_all_temp_tables, расширение auto_dump не может обратиться к временным пространствам имён из автономных транзакций. В этом случае выводится соответсвующая ошибка.Использование расширения может отразиться на статистике производительности. Если параметр auto_dump.dump_data включён, расширение читает данные таблиц для формирования выгрузок, что искусственно увеличивает количество операций последовательного сканирования. Это приводит к неточной статистике.