Как включить версионный режим (RCSI) в 1С:УПП и повысить производительность системы

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В процессе эксплуатации высоконагруженных систем на базе 1С:Управление производственным предприятием (УПП) многие специалисты сталкиваются с проблемой блокировок. Традиционный режим работы SQL Server часто приводит к тому, что читающие транзакции (отчеты) блокируются записывающими (проведение документов), и наоборот. Решением этой проблемы является переход на версионный режим (Read Committed Snapshot Isolation — RCSI). В этой статье мы подробно разберем, как реализовать этот переход для УПП, какие настройки платформы потребуются и с какими рисками можно столкнуться.

Разберем основы: что такое версионный режим и зачем он нужен УПП

Проанализируем стандартную ситуацию: один пользователь запускает тяжелый отчет по себестоимости, а в это время другой пытается провести документ реализации. В обычном режиме блокировок отчет наложит разделяемые блокировки (Shared Locks) на таблицы, что не позволит документу сделать запись. С включенным режимом RCSI читающие транзакции не блокируют записывающие, так как они читают не саму таблицу, а ее снимок (версию данных) из временной базы tempdb. Для такой сложной и объемной конфигурации, как УПП, это может стать «вторым дыханием» в плане производительности.

Шаг 1. Настройка режима совместимости платформы

Первым делом нам необходимо обратить внимание на версию платформы и режим совместимости конфигурации. Рассмотрим технические требования:

  1. Для полноценной поддержки современных механизмов работы с SQL Server конфигурация должна быть переведена на платформу 1С:Предприятие 8.3.
  2. Крайне желательно снять режим совместимости или установить его в значение «8.3.X» (где X — актуальная версия, например, 8.3.11 и выше).

Если в свойствах корневого объекта конфигурации оставить режим совместимости «Версия 8.2», платформа может игнорировать некоторые настройки оптимизации, даже если они включены на уровне СУБД. Выясним причину: режим совместимости заставляет платформу эмулировать поведение старых версий, что ограничивает использование новых возможностей движка базы данных.

Шаг 2. Переход на управляемый режим блокировок

Это самый критичный и сложный этап для УПП. Исторически УПП проектировалась под автоматический режим блокировок, где управление доступом к данным полностью доверялось MS SQL Server. Чтобы версионник работал корректно, нам потребуется переключить свойство конфигурации Режим управления блокировками данных в значение Управляемый.

Внимание! Простое переключение этого свойства без доработки кода приведет к потере целостности данных. Давайте проанализируем, почему так происходит: в автоматическом режиме SQL сам блокировал связанные таблицы. В управляемом режиме за это отвечает МенеджерБлокировок в коде 1С. Поскольку в типовой УПП тысячи объектов не имеют явного вызова управляемых блокировок в модулях проведения, вам придется либо точечно переписывать критические узлы (например, регистры накопления партионного учета), либо использовать смешанный режим (что крайне не рекомендуется для стабильности).

Шаг 3. Включение RCSI на стороне SQL Server

После того как мы подготовили конфигурацию, перейдем к настройке самой базы данных. Нам необходимо выполнить специальный скрипт в SQL Server Management Studio (SSMS). Рассмотрим последовательность действий:


-- 1. Переводим базу в однопользовательский режим, чтобы закрыть все соединения
ALTER DATABASE [ИмяВашейБазы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

-- 2. Включаем режим Read Committed Snapshot
ALTER DATABASE [ИмяВашейБазы] SET READ_COMMITTED_SNAPSHOT ON;

-- 3. Разрешаем использование Snapshot Isolation
ALTER DATABASE [ИмяВашейБазы] SET ALLOW_SNAPSHOT_ISOLATION ON;

-- 4. Возвращаем многопользовательский режим
ALTER DATABASE [ИмяВашейБазы] SET MULTI_USER;

Проверить, что настройки применились, можно следующим запросом:


SELECT name, is_read_committed_snapshot_on, snapshot_isolation_state_desc 
FROM sys.databases 
WHERE name = 'ИмяВашейБазы';

Шаг 4. Настройка свойства «Использование режима развязки данных»

В современных версиях платформы 8.3 (начиная с 8.3.11) в корне конфигурации появилось свойство Использование режима развязки данных (Data Isolation Mode). Посмотрим на варианты его настройки:

Для гарантированной работы в УПП после снятия режима совместимости рекомендуется установить это значение в Включить. Это позволит платформе корректно взаимодействовать с механизмом версионирования SQL Server.

Шаг 5. Оценка рисков и работа с TempDB

Перевод УПП на версионник — это не только плюсы, но и серьезная нагрузка на оборудование. Проанализируем ситуацию с технической стороны:

1. Нагрузка на TempDB. При включении RCSI SQL Server начинает хранить копии (версии) изменяемых строк в системной базе tempdb. В УПП при расчете себестоимости или массовом проведении документов объем изменяемых данных колоссален. Это приведет к взрывному росту нагрузки на дисковую подсистему, где расположена tempdb. Рекомендуем перенести файлы tempdb на максимально быстрые NVMe SSD диски и разбить их на несколько файлов (по количеству ядер процессора).

2. Увеличение размера таблиц. К каждой строке в базе данных SQL Server добавит 14 байт для хранения указателя на версию строки. В масштабах терабайтной базы УПП это может привести к заметному увеличению объема занимаемого дискового пространства и к снижению плотности данных в кэше оперативной памяти.

3. Конфликты обновления (Update Conflicts). Рассмотрим пример: если в автоматическом режиме один пользователь ждал другого, то в режиме версионирования при одновременном изменении одной и той же записи второй пользователь может мгновенно получить ошибку: Snapshot isolation transaction aborted due to update conflict. Это требует готовности кода 1С к обработке таких исключений.

Шаг 6. Сохранение настроек при обновлении

Существует мнение, что после обновления конфигурации или реструктуризации базы настройки версионника на стороне SQL могут «слетать». Выясним, так ли это. В старых версиях платформы 8.2 и ранних 8.3 при глубокой реструктуризации (когда база пересоздается) настройки действительно могли сброситься. Однако, если вы правильно выставили свойства Использование режима развязки данных в дереве метаданных 1С, платформа сама проконтролирует наличие нужных флагов в SQL Server при обновлении конфигурации базы данных.

Краткий итог действий

Посмотрим на финальный чек-лист для перевода УПП на версионник:

  1. Обновляем платформу до актуальной 8.3.X.
  2. Меняем режим совместимости конфигурации на 8.3.
  3. Переключаем Режим управления блокировками данных в Управляемый (после аудита кода!).
  4. Устанавливаем Использование режима развязки данных в Включить.
  5. Выполняем скрипт ALTER DATABASE на SQL Server.
  6. Обеспечиваем высокую производительность дисков для tempdb.

Следуя этим шагам, мы сможем добиться существенного снижения количества блокировок в 1С:УПП и обеспечить комфортную работу большого количества пользователей одновременно.

← На главную