Как правильно настроить MS SQL Server для работы с 1С и распределить файлы TempDB, данных и журнала транзакций?

Системный администратор IT и автоматизация бизнеса
← На главную

При совместной работе системы 1С:Предприятие и Microsoft SQL Server производительность и стабильность базы данных напрямую зависят от корректной настройки СУБД и оптимального распределения дисковой подсистемы. Рассмотрим подробно основные архитектурные и технические рекомендации по настройке MS SQL Server для высоконагруженных систем 1С.

Оптимальное распределение файлов базы данных и TempDB по дискам

В идеальном сценарии рекомендуем физически разделять хранение различных типов файлов MS SQL Server на отдельных накопителях или RAID-массивах:

  1. Файлы данных (.mdf / .ndf): Хранятся на быстрых дисковых массивах (например, RAID 10 из SSD или NVMe), обеспечивающих высокую скорость случайного чтения и записи.
  2. Журнал транзакций (.ldf): Требует высокого показателя последовательной записи. Рекомендуется размещать на отдельном массиве RAID 1 или RAID 10 из быстрых накопителей.
  3. Служебная база TempDB: Испытывает колоссальную нагрузку со стороны 1С при работе с временными таблицами, аналитических запросах и реструктуризации. Ее рекомендуется выносить на отдельный, наиболее производительный SSD-диск или RAID-массив из SSD.

Что произойдет при выходе из строя диска с TempDB?

Служебная база TempDB характеризуется большим объемом неупорядоченных операций записи, что создает повышенный износ SSD. Разберем ситуацию, когда накопитель с TempDB выходит из строя.

При физическом сбое накопителя служба MSSQLSERVER мгновенно завершит работу с ошибкой доступа к файлу. Однако сами рабочие базы данных 1С останутся в полной сохранности, так как их файлы данных и транзакций находятся на других носителях.

Проанализируем по шагам порядок восстановления работы после сбоя диска TempDB:

  1. Заменяем неисправный накопитель на новый SSD.
  2. Назначаем новому диску ту же букву тома, которая использовалась ранее.
  3. Запускаем службу MS SQL Server.

При запуске СУБД автоматически создаст файлы базы TempDB на новом диске с начальными параметрами размера, и система 1С продолжит работу в штатном режиме.

Опасность использования RAM-диска для TempDB

Размещение TempDB в оперативной памяти с помощью сторонних драйверов RAM-диска на первый взгляд кажется привлекательным для скорости, однако несет скрытые риски. При непредвиденной перезагрузке сервера или сбое виртуального диска структура каталогов на RAM-диске будет утеряна. В результате служба SQL Server не сможет стартовать до тех пор, пока папки не будут воссозданы вручную с выдачей соответствующих прав учетной записи СУБД.

Детальная конфигурация служебной базы TempDB

Для исключения узких мест при работе с TempDB выполним следующие настройки:

  1. Количество файлов данных: Создаем по одному файлу данных на каждое логическое ядро процессора (но не более 8 файлов на первоначальном этапе). Все файлы данных должны находиться в одной файловой группе.
  2. Размер и автоувеличение: Все файлы данных TempDB должны иметь строго одинаковый начальный размер и одинаковый фиксированный шаг расширения (в мегабайтах, например, по 512 МБ, но ни в коем случае не в процентах). Это включает алгоритм Round-Robin и выравнивает нагрузку между файлами.
  3. Флаги трассировки: Для MS SQL Server 2014 и старше включаем параметры запуска -T1117 (равномерное расширение файлов в группе) и -T1118 (выделение полных экстентов). В MS SQL Server 2016 и новее эта функциональность включена по умолчанию.

Параметры памяти и параллелизма

Посмотрим на важнейшие настройки MS SQL Server, критичные для специфики работы платформы 1С:

  1. Ограничение памяти (Max Server Memory): По умолчанию SQL Server захватывает всю доступную оперативно память. Обязательно установим верхний лимит оперативной памяти в настройках СУБД (max server memory), оставив минимум 4–8 ГБ для операционной системы и дополнительную память под процессы сервера 1С, если они совмещены на одном хосте.
  2. Параллелизм (MAXDOP): Для рабочих баз 1С рекомендуется устанавливать Max Degree of Parallelism = 1. Запросы 1С оптимизированы под однопоточное выполнение, а параллелизм часто приводит к нерациональным накладным расходам и взаимоблокировкам (Deadlocks).
  3. Порог стоимости параллелизма: Если значение MAXDOP установлено больше 1, параметр Cost Threshold for Parallelism следует поднять со стандартного 5 до 50 и выше.

Уровень изоляции транзакций (RCSI) и настройки БД

Выясним причину высокой эффективности режима RCSI при работе с 1С:

При использовании режима управляемых блокировок 1С крайне рекомендуется включать режим Read Committed Snapshot Isolation (RCSI). Для этого в SQL Server выполняются команды:


ALTER DATABASE [ИмяБазы1С] SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE [ИмяБазы1С] SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;

Этот режим позволяет читающим транзакциям не блокировать пишущие транзакции (и наоборот). Обратите внимание: при использовании RCSI версии строк сохраняются в TempDB, что дополнительно повышает требования к производительности накопителя, на котором размещена эта база.

Также проверим параметры обслуживания баз данных:

  1. Установим AUTO_SHRINK OFF и AUTO_CLOSE OFF. Автоматическое сжатие базы вызывает колоссальную фрагментацию индексов и падение производительности.
  2. Включим параметры AUTO_CREATE_STATISTICS ON, AUTO_UPDATE_STATISTICS ON и AUTO_UPDATE_STATISTICS_ASYNC ON для поддержания актуальности статистики в асинхронном режиме.

Оптимизация на уровне операционной системы и дисков

Рассмотрим системные параметры Windows Server, оптимизирующие работу СУБД:

  1. Мгновенная инициализация файлов (Instant File Initialization): Предоставляем учетной записи службы SQL Server право Perform Volume Maintenance Tasks ("Выполнение задач по обслуживанию тома") в локальной политике безопасности OS. Это исключит задержки при автоматическом расширении файлов данных.
  2. Блокировка страниц в памяти (Lock Pages in Memory - LPIM): Выделяем право LPIM учетной записи СУБД, чтобы предотвратить вытеснение памяти SQL Server в файл подкачки Windows.
  3. Размер кластера файловой системы: Форматируем дисковые разделы под файлы данных и журналов транзакций с размером кластера NTFS 64 КБ вместо стандартных 4 КБ.
  4. Схема электропитания: Переводим профиль электропитания сервера Windows в режим High Performance ("Высокая производительность"), чтобы избежать сброса тактовой частоты процессора СУБД.
← На главную