Денис Рынков guides · Денис Рынков
ru

Блокировки данных в 1С: почему пользователи ждут друг друга

Ожидания и взаимоблокировки в 1С: чем timeout отличается от deadlock, что смотреть в ТЖ и когда нужен разбор кода/СУБД.

#блокировки #производительность #ТЖ

«Документ не проводится — ждём» и «ошибка блокировки / deadlock» — разные истории. В публичных разборах (ИнфоСофт, МастерСофт, Habr/OTUS про управляемые блокировки, ITS) схема одна: отличить ожидание от взаимоблокировки, снять контекст через технологический журнал, потом трогать код или процесс — не «перезапустить сервер и надеяться».

Два разных симптома

Ожидание (timeout): транзакция A держит ресурс, B ждёт и отваливается по таймауту. Пользователи «встают в очередь» на один заказ, склад, кассу.

Взаимоблокировка (deadlock): A ждёт B, B ждёт A. СУБД или менеджер блокировок 1С откатывает одну транзакцию — жертву. Сообщение часто явное: «транзакция вызвала взаимоблокировку».

Путать их вредно: лечат по-разному.

Бытовая самопроверка (15–30 минут)

  1. Один тяжёлый отчёт / закрытие / обмен в рабочее время? Сдвиньте или ограничьте период.
  2. Один пользователь держит форму документа часами? Это не «сервер слабый».
  3. Файловая база при нескольких активных проведениях — грубые блокировки, очередь нормальна чаще, чем кажется.
  4. Воспроизведите на копии: два сеанса, одна и та же номенклатура/заказ.

Если после этого «лечится перезагрузкой» — вы ещё не нашли причину, вы сняли симптом.

Когда без ТЖ не обойтись

Для управляемых блокировок в ТЖ смотрят события вроде TLOCK / TTIMEOUT / TDEADLOCK (и связанные SDBL). Цель — понять:

  • кто жертва и кто держал блокировку;
  • какой объект/измерение;
  • какой контекст кода (проведение, регистр, обработка).

Журнал регистрации покажет ошибку пользователю, но часто не покажет второго участника конфликта — для этого как раз ТЖ и/или логи СУБД (deadlock graph и т.п.).

Типичные причины из практики

  • длинные транзакции (проведение + внешние вызовы + «подумать» внутри);
  • разный порядок обращения к одним и тем же ресурсам в доработках;
  • отчёты и обработки, которые блокируют «широко» в пик отгрузки;
  • обмен/регламентные задания поверх живой работы;
  • файловый режим там, где уже нужен клиент-сервер.

Как я обычно веду такие задачи

  1. Симптом: ожидание или deadlock, кто/когда/какая операция.
  2. Копия + воспроизведение двумя сеансами.
  3. ТЖ на узкое окно (не «логировать всё неделю»).
  4. План: процесс / индекс / код / переезд на SQL — по факту, не по ощущению.
  5. После фикса — регресс на пиковом сценарии (отгрузка, закрытие).

Я разбираю блокировки в enterprise-контурах как частный специалист: от 2 999 ₽/час или смета. Если рядом нужен постоянный присмотр — абонемент от 49 999 ₽/мес: услуги.

Пришлите: файл или клиент-сервер, текст ошибки, операция — по этому видно, хватит консультации или нужен замер.

Если по этой теме нужна работа на вашей базе — напишите в Telegram (производительность). Цены открыты на странице услуг.

Автор: Денис Рынков

Ещё по теме