Блокировки данных в 1С: почему пользователи ждут друг друга
Ожидания и взаимоблокировки в 1С: чем timeout отличается от deadlock, что смотреть в ТЖ и когда нужен разбор кода/СУБД.
«Документ не проводится — ждём» и «ошибка блокировки / deadlock» — разные истории. В публичных разборах (ИнфоСофт, МастерСофт, Habr/OTUS про управляемые блокировки, ITS) схема одна: отличить ожидание от взаимоблокировки, снять контекст через технологический журнал, потом трогать код или процесс — не «перезапустить сервер и надеяться».
Два разных симптома
Ожидание (timeout): транзакция A держит ресурс, B ждёт и отваливается по таймауту. Пользователи «встают в очередь» на один заказ, склад, кассу.
Взаимоблокировка (deadlock): A ждёт B, B ждёт A. СУБД или менеджер блокировок 1С откатывает одну транзакцию — жертву. Сообщение часто явное: «транзакция вызвала взаимоблокировку».
Путать их вредно: лечат по-разному.
Бытовая самопроверка (15–30 минут)
- Один тяжёлый отчёт / закрытие / обмен в рабочее время? Сдвиньте или ограничьте период.
- Один пользователь держит форму документа часами? Это не «сервер слабый».
- Файловая база при нескольких активных проведениях — грубые блокировки, очередь нормальна чаще, чем кажется.
- Воспроизведите на копии: два сеанса, одна и та же номенклатура/заказ.
Если после этого «лечится перезагрузкой» — вы ещё не нашли причину, вы сняли симптом.
Когда без ТЖ не обойтись
Для управляемых блокировок в ТЖ смотрят события вроде TLOCK / TTIMEOUT / TDEADLOCK (и связанные SDBL). Цель — понять:
- кто жертва и кто держал блокировку;
- какой объект/измерение;
- какой контекст кода (проведение, регистр, обработка).
Журнал регистрации покажет ошибку пользователю, но часто не покажет второго участника конфликта — для этого как раз ТЖ и/или логи СУБД (deadlock graph и т.п.).
Типичные причины из практики
- длинные транзакции (проведение + внешние вызовы + «подумать» внутри);
- разный порядок обращения к одним и тем же ресурсам в доработках;
- отчёты и обработки, которые блокируют «широко» в пик отгрузки;
- обмен/регламентные задания поверх живой работы;
- файловый режим там, где уже нужен клиент-сервер.
Как я обычно веду такие задачи
- Симптом: ожидание или deadlock, кто/когда/какая операция.
- Копия + воспроизведение двумя сеансами.
- ТЖ на узкое окно (не «логировать всё неделю»).
- План: процесс / индекс / код / переезд на SQL — по факту, не по ощущению.
- После фикса — регресс на пиковом сценарии (отгрузка, закрытие).
Я разбираю блокировки в enterprise-контурах как частный специалист: от 2 999 ₽/час или смета. Если рядом нужен постоянный присмотр — абонемент от 49 999 ₽/мес: услуги.
Пришлите: файл или клиент-сервер, текст ошибки, операция — по этому видно, хватит консультации или нужен замер.
Если по этой теме нужна работа на вашей базе — напишите в Telegram (производительность). Цены открыты на странице услуг.