PostgreSQL Error 57014: query_canceled — Statement Timeout и Lock Timeout
- Ошибка выполнения:
ERROR: canceling statement due to statement timeout (SQLSTATE 57014). - Прерывание формирования тяжелых отчетов или регламентных заданий в 1С.
- Ошибки
canceling statement due to lock timeoutпри попытке захвата монопольных блокировок.
1. Проверка текущих лимитов таймаутов в СУБД
SHOW statement_timeout;
SHOW lock_timeout;
SHOW idle_in_transaction_session_timeout;2. Анализ отмененных запросов в логах
grep "canceling statement due to statement timeout" /var/log/postgresql/*.log3. Корректировка statement_timeout для конкретного пользователя или базы
Не отключайте таймаут глобально во всем кластере, меняйте его адресно:
-- Увеличение лимита для регламентного пользователя 1C
ALTER USER usr1cv8 SET statement_timeout = '30min';
-- Отключение таймаута для сессии резервного копирования
SET statement_timeout = 0;4. Настройка idle_in_transaction_session_timeout
Для предотвращения зависания открытых транзакций, удерживающих блокировки:
ALTER SYSTEM SET idle_in_transaction_session_timeout = '10min';
SELECT pg_reload_conf(); Частые вопросы (FAQ)
В каких случаях возвращается код ошибки 57014?
Код 57014 возвращается при срабатывании statement_timeout, lock_timeout, ручной отмене запроса пользователем (Ctrl+C, pg_cancel_backend) или разрыве соединения пулером.
Почему не рекомендуется ставить statement_timeout = 0 на всем сервере?
Нулевой таймаут позволяет некорректным неоптимизированным запросам выполняться бесконечно, утилизируя 100% CPU и удерживая блокировки от других пользователей.
Как 1С:Предприятие управляет statement_timeout?
Платформа 1С может переопределять параметры сессии при подключении. Настраивайте таймауты как на уровне СУБД, так и в настройках регламентных заданий в конфигураторе.
В чем разница между statement_timeout и lock_timeout?
statement_timeout отсчитывает полное время выполнения запроса, а lock_timeout ограничивает только время ожидания освобождения нужной таблицы/строки перед началом выполнения.