«Ожидание на блокировке» — одна из самых частых проблем в многопользовательских базах. Разберём, почему возникают блокировки и как их минимизировать.
Что такое блокировка?
Блокировка — механизм защиты данных от одновременного изменения несколькими пользователями. Когда один пользователь редактирует запись, другие ждут освобождения.
Виды блокировок в 1С
- Управляемые блокировки — устанавливаются кодом через объект «Блокировка»
- Автоматические — при записи/удалении объектов
- На уровне СУБД — транзакционные блокировки SQL
Причины длительных блокировок
1. Избыточная блокировка
Блокировка всей таблицы вместо конкретных записей.
// Плохо - блокирует всю таблицу
Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
// Хорошо - блокирует только нужный товар
Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров")
.УстановитьЗначение("Номенклатура", Товар);
2. Долгие транзакции
Чем дольше транзакция — тем дольше блокировка.
3. Конкурентный доступ
Много пользователей работают с одними данными (например, один склад).
Как найти блокировки?
- Консоль кластера → Сеансы → Блокировки
- Технологический журнал — события TLOCK, TTIMEOUT
- SQL Profiler — Lock:Timeout, Lock:Deadlock
- ЦУП — Центр управления производительностью
Как устранить?
- Найти код, устанавливающий избыточную блокировку
- Сузить область блокировки (добавить условия)
- Сократить время транзакции
- Разнести работу пользователей по времени
- Использовать разделение по складам/организациям
Проблемы с блокировками?
Проведу аудит, найду причину и оптимизирую код. Опыт работы с базами 50-500+ пользователей.
Заказать аудит