Переход с автоматического режима блокировок на управляемый в 1С
- Массовые блокировки пользователей даже при чтении простых отчетов на старых нетиповых базах.
- Невозможность масштабирования системы свыше 30-50 одновременно работающих пользователей.
- СУБД использует тяжелый уровень изоляции
Serializable.
1. Включение Read Committed Snapshot Isolation (RCSI) в MS SQL Server
Перед переключением конфигурации 1С активируйте версионирование строк на стороне СУБД в монопольном режиме:
ALTER DATABASE ib_production SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE ib_production SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE ib_production SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE ib_production SET MULTI_USER;
GO2. Переключение режима блокировок в конфигураторе 1С
- Откройте свойства корневого элемента конфигурации;
- Измените свойство Режим управления блокировкой данных с
АвтоматическийнаУправляемый(илиАвтоматический и управляемыйна этапе тестирования); - Для всех критических объектов (документы, регистры) установите режим
Управляемый.
3. Обязательный аудит кода проведения документов
В автоматическом режиме платформа 1С неявно накладывала блокировки на уровне СУБД. В управляемом режиме необходимо явно прописать объект БлокировкаДанных перед чтением остатков во всех модулях проведения документов.
Частые вопросы (FAQ)
Что такое режим 'Автоматический и управляемый'?
Это переходный режим, в котором объекты с установленным свойством 'Управляемый' работают через менеджер блокировок 1С, а остальные — по старой схеме через блокировки СУБД.
Почему после включения RCSI растет нагрузка на tempdb?
При включенном RCSI предыдущие версии строк для читающих транзакций сохраняются в версионном хранилище (Version Store) базы tempdb, что требует быстрого дискового хранилища.
Что произойдет, если переключить режим на 'Управляемый', но не переписать код проведения?
Документы начнут списывать остатки без блокировок, что приведет к 'грязному чтению', отрицательным остаткам на складах и нарушению целостности взаиморасчетов.
Как проверить, включен ли RCSI в текущей базе данных SQL Server?
Выполните запрос: SELECT name, is_read_committed_snapshot_on FROM sys.databases WHERE name = 'ib_production';