F.5. auto_dump

Модуль auto_dump — расширение Postgres Pro, предназначенное для сбора данных по длительным и проблемным запросам и последующего воспроизведения этих запросов с целью устранения неполадок.

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

  1. операторы CREATE TABLE для временных и постоянных таблиц, на которые даётся ссылка в запросе;

  2. операторы INSERT/COPY для заполнения таблиц данными, которые существовали на момент выполнения исходного проблемного запроса;

  3. исходный проблемный SQL-запрос и план выполнения этого запроса, который можно сформировать с помощью команды EXPLAIN и/или EXPLAIN ANALYZE.

F.5.1. Установка и настройка

Расширение auto_dump включено в состав Postgres Pro Standard. Установив Postgres Pro Standard, выполните следующие действия, чтобы подготовить auto_dump к работе:

  1. Добавьте auto_dump в параметр shared_preload_libraries в файле postgresql.conf:

    shared_preload_libraries = 'auto_dump'
  2. Поскольку расширение 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, выгружаются все запросы.

Если значения заданы для нескольких параметров, управляющих условиями триггеров, они обрабатываются в следующем порядке:

  1. auto_dump.dump_on_cancel

  2. auto_dump.dump_on_query_string

  3. auto_dump.dump_on_bad_plan

  4. auto_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 включён, расширение читает данные таблиц для формирования выгрузок, что искусственно увеличивает количество операций последовательного сканирования. Это приводит к неточной статистике.