Как проверить и включить режим версионирования Read Committed Snapshot в MS SQL Server для 1С:Предприятие?

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

Разберем ситуацию, когда платформа «1С:Предприятие 8.3» развернута на MS SQL Server и переведена в режим управляемых блокировок. Выясним, как проверить, используется ли в СУБД режим изоляции Read Committed Snapshot (RCSI), почему он может быть выключен и как правильно организовать его включение.

Как проверить, включен ли режим Read Committed Snapshot на сервере MS SQL

Проанализируем состояние базы данных СУБД. Проверить активность версионирования строк можно с помощью T-SQL запроса к системному представлению sys.databases в среде MS SQL Server Management Studio.

Выполним следующий запрос:


SELECT name, snapshot_isolation_state_desc, is_read_committed_snapshot_on 
FROM sys.databases

Посмотрим на результаты выполнения запроса в колонках состояния:

  1. Если значение поля is_read_committed_snapshot_on равно 1 (или ON в snapshot_isolation_state_desc), режим версионирования активен.
  2. Если значение равно 0 (или OFF), режим выключен, и СУБД применяет стандартное блокировочное чтение.

Как проверить работу режима версионирования на стороне 1С

Протестируем поведение транзакций платформы «1С:Предприятие». Для этого разберем контрольный пример работы двух параллельных сеансов:

  1. В первом сеансе открываем транзакцию, меняем данные любого объекта (например, справочника или документа), сохраняем изменения, но не вызываем процедуру ЗафиксироватьТранзакцию().
  2. Во втором сеансе пытаемся прочитать этот же объект из базы данных.

Проанализируем поведение системы при выполнении этих действий:

  1. Режим отключен: Второй сеанс переходит в состояние ожидания блокировки до момента завершения транзакции в первом сеансе.
  2. Режим включен: Второй сеанс мгновенно считывает актуальную на момент начала чтения (до записи изменения) версию данных из базы без каких-либо задержек.

Почему режим Read Committed Snapshot может быть отключен

Выясним основные причины, по которым версионирование может оказаться выключенным:

  1. Режим совместимости конфигурации: При использовании режима совместимости с версией 8.2 платформа «1С:Предприятие 8.3» автоматически не подает команду на включение версионирования в СУБД при создании базы.
  2. Создание или восстановление базы средствами СУБД: При создании базы данных непосредственно в MS SQL Server или при разворачивании дампа из резервной копии параметр READ_COMMITTED_SNAPSHOT по умолчанию устанавливается в состояние OFF.
  3. Автоматический режим блокировок 1С: Если в конфигурации используется автоматический режим блокировок, платформа накладывает явные блокирующие хинты в SQL-запросах, что нивелирует работу версионирования.

Как правильно включить Read Committed Snapshot в MS SQL Server

Разберем по шагам порядок включения версионирования в СУБД. Обратим внимание, что для изменения этого параметра СУБД требует монопольного доступа к базе данных.

  1. Отключаем все активные сеансы пользователей и службы сервера 1С или переводим базу данных в монопольный режим: ALTER DATABASE [ИмяБазы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
  2. Включаем режим версионирования строк для чтения: ALTER DATABASE [ИмяБазы] SET READ_COMMITTED_SNAPSHOT ON;
  3. Возвращаем базу данных в многопользовательский режим: ALTER DATABASE [ИмяБазы] SET MULTI_USER;

Важно: Устанавливать параметр ALLOW_SNAPSHOT_ISOLATION ON не требуется, так как 1С работает с уровнем изоляции по умолчанию Read Committed.

Требования к инфраструктуре и особенности работы

Рассмотрим технические факторы, которые необходимо предусмотреть перед включением RCSI:

  1. Нагрузка на служебную базу tempdb: При включенном версионировании предыдущие версии изменяемых строк сохраняются в tempdb. Это создает высокую нагрузку на дисковую подсистему. Рекомендуется размещать файлы tempdb на высокоскоростных SSD/NVMe дисках.
  2. Отказ от режима совместимости: Для корректного взаимодействия платформы с версионным режимом СУБД рекомендуется перевести конфигурацию в режим совместимости 8.3 без использования совместимости с 8.2.
  3. Версия MS SQL Server: Хотя механизм появился в MS SQL Server 2005, механизмы очистки устаревших версий строк существенно оптимизированы в MS SQL Server 2008 R2 и более новых версиях СУБД.
← На главную