«Превышено максимальное время ожидания предоставления блокировки» в 1С
Сеанс запросил управляемую блокировку данных, но другой сеанс держал её дольше, чем разрешено настройкой базы. Обычно текст идёт после фразы «Конфликт блокировок при выполнении транзакции».
Текст ошибки
Причины
- Другой сеанс выполняет долгую транзакцию по тем же данным
- Повисший сеанс или фоновое задание не освобождает блокировку
- Массовая обработка запущена в рабочее время
- Блокировка в коде установлена на слишком широкий диапазон данных
- Слишком маленькое время ожидания блокировки в параметрах базы
Как это устроено
В управляемом режиме блокировок платформа сама следит, кто и какие данные заблокировал. Если запрашиваемые данные заняты, сеанс ждёт. Когда ожидание превышает установленный лимит, транзакция отменяется с этой ошибкой. Значение по умолчанию — 20 секунд.
Найти, кто держит блокировку
- Откройте консоль администрирования кластера серверов и посмотрите сеансы базы. У сеанса, который держит транзакцию, растёт время вызова и показатели нагрузки.
- В типовых конфигурациях на БСП откройте обработку «Активные пользователи» и проверьте, кто работал в момент ошибки.
- Если ошибки частые, настройте технологический журнал на события
TLOCKиTTIMEOUT. По этим событиям видно, какое соединение ждало и какие соединения удерживали нужные данные.
Изменить время ожидания
Время ожидания задаётся в конфигураторе: «Администрирование» → «Параметры информационной базы» → «Время ожидания блокировки данных». Увеличение лимита оправдано, если тяжёлые операции нельзя перенести, а пользователи готовы подождать. Это не исправляет причину, а лишь даёт больше запаса.
Для отдельного сеанса, например фонового задания с длинной обработкой, время ожидания можно изменить программно:
// Время ожидания блокировки для текущего сеанса, в секундах УстановитьВремяОжиданияБлокировкиДанных(60);
Устранить причину
- Переносите массовое перепроведение, закрытие периода и загрузки на нерабочее время.
- Делите большие обработки на порции с отдельной транзакцией на каждую.
- Задавайте в
БлокировкаДанныхконкретные значения измерений, а не блокируйте весь регистр. - Не выполняйте внутри транзакции HTTP-запросы, работу с файлами и другие медленные операции.
- Проверьте, не зависают ли регламентные задания: в списке регламентных заданий видно время последнего запуска и состояние.
Для пользователя
Если ошибка возникла один раз, повторите операцию через минуту. Если повторяется регулярно в одно и то же время, сообщите администратору: скорее всего, по расписанию работает тяжёлая обработка.
Частые вопросы
Какое время ожидания блокировки ставить?
Значение по умолчанию 20 секунд подходит большинству баз. Увеличивать его стоит осторожно и лишь после анализа, какие операции держат блокировки.
Бывает ли эта ошибка в файловой базе?
В файловой базе параллельная работа ограничена сильнее, и конфликты обычно проявляются как ожидание или ошибки блокировки таблиц. Подробный анализ с технологическим журналом больше применим к клиент-серверным базам.