Как оптимизировать работу 1С:Предприятие 8.3 на MS SQL Server для повышения производительности?

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

Проблема низкой производительности 1С в клиент-серверном варианте — одна из самых частых задач, с которыми сталкиваются администраторы и разработчики. Часто стандартные настройки MS SQL Server «из коробки» не подходят для специфики работы 1С, которая генерирует огромное количество коротких транзакций и активно использует временные таблицы. В этой статье мы подробно разберем технические настройки, которые позволят существенно ускорить работу системы.

Настройка оперативной памяти SQL Server

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

Рассмотрим, как правильно ограничить потребление памяти. Нам необходимо оставить операционной системе и процессам 1С (rphost) достаточный объем (минимум 4–8 Гб для ОС + по 2–4 Гб на каждый рабочий процесс 1С). Оставшийся объем мы отдаем SQL Server через параметр Max Server Memory.

Для настройки выполним следующий сценарий в SQL Server Management Studio (SSMS):


EXEC sys.sp_configure N'show advanced options', N'1';
RECONFIGURE;
EXEC sys.sp_configure N'max server memory (MB)', N'32768'; -- Указываем лимит в мегабайтах
RECONFIGURE;

Настройка параллелизма (MAXDOP)

Выясним причину, по которой запросы 1С могут «тормозить» при наличии свободных ядер процессора. 1С:Предприятие лучше всего работает, когда один запрос выполняется на одном ядре. Если SQL Server пытается распараллелить простой запрос на 16 ядер, накладные расходы на синхронизацию потоков (ожидания CXPACKET) становятся выше, чем само время выполнения запроса.

Посмотрим на рекомендации фирмы «1С»: параметр Max Degree of Parallelism (MAXDOP) рекомендуется устанавливать в значение 1. Это гарантирует, что каждый отдельный запрос будет обрабатываться одним процессором.

Разберем, как применить эту настройку:

  1. Откроем свойства сервера в SSMS.
  2. Перейдем на вкладку Advanced.
  3. Установим значение Max Degree of Parallelism равным 1.
  4. Дополнительно проверим Cost Threshold for Parallelism (рекомендуется устанавливать значение 50, если вы все же решили оставить MAXDOP отличным от 1).

Оптимизация базы данных TempDB

Проанализируем роль системной базы TempDB. В 1С она используется постоянно: для хранения временных таблиц запросов, промежуточных результатов и сортировок. Если TempDB настроена неправильно, она становится «бутылочным горлышком» всей системы.

Рассмотрим шаги по оптимизации TempDB:

  1. Количество файлов данных: Разделим TempDB на несколько файлов данных одинакового размера. Общая рекомендация — количество файлов должно быть равно количеству логических ядер процессора (но не более 8). Это снижает конкуренцию за распределение страниц памяти (ожидания PAGELATCH_UP).
  2. Размещение: Вынесем файлы TempDB на самый быстрый диск (в идеале NVMe SSD).
  3. Фиксированный размер: Установим начальный размер файлов таким образом, чтобы они не росли в процессе работы. Авторасширение должно быть включено, но срабатывать только в экстренных случаях.

Включение флагов трассировки 1117 и 1118

Для старых версий SQL Server (до 2016 года) крайне важно включить специфические флаги трассировки, которые меняют логику работы с дисковым пространством:

На современных версиях SQL Server эти механизмы включены по умолчанию на уровне ядра базы данных.

Регламентные операции в SQL Server

Даже идеально настроенный сервер начнет работать медленно, если данные внутри него фрагментированы. Проанализируем необходимые регламентные задания:

  1. Обновление статистики: 1С часто создает и удаляет временные таблицы. Оптимизатор SQL Server должен знать актуальное распределение данных, чтобы строить эффективные планы запросов. Рекомендуется обновлять статистику ежедневно или даже несколько раз в день.
  2. Дефрагментация индексов: При интенсивной записи (проведении документов) индексы «разваливаются». Посмотрим на методы решения: Reorganize (для фрагментации 5–30%) и Rebuild (для фрагментации более 30%).
  3. Очистка процедурного кэша: Иногда после массового обновления статистики полезно очистить кэш планов запросов, чтобы SQL Server построил их заново.

Рассмотрим пример кода для обновления статистики по всей базе данных 1С:


USE [Имя_Вашей_Базы];
GO
EXEC sp_updatestats;
GO

Параметр "Instant File Initialization"

Выясним причину, по которой создание базы или расширение файлов может занимать много времени. По умолчанию Windows зануляет место на диске при выделении его под файл. Мы можем ускорить этот процесс, предоставив учетной записи, под которой запущен SQL Server, право Perform volume maintenance tasks (Выполнение задач по обслуживанию тома) в локальных политиках безопасности Windows. Это позволит SQL Server мгновенно выделять место на диске.

Оптимизация на уровне кода 1С

Важно понимать, что никакие настройки SQL не спасут систему, если код написан неоптимально. Проанализируем основные правила эффективных запросов:

Пример правильного использования временной таблицы с индексацией:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	Номенклатура.Ссылка КАК Товар
|ПОМЕСТИТЬ ВТ_Товары
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	Номенклатура.ВидНоменклатуры = &Вид
|;
|////////////////////////////////////////////////////////////////////////////////
|ИНДЕКСИРОВАТЬ ПО
|	Товар
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	ВТ_Товары.Товар,
|	Остатки.КоличествоОстаток
|ИЗ
|	ВТ_Товары КАК ВТ_Товары
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
|		ПО ВТ_Товары.Товар = Остатки.Номенклатура";

Заключение

Мы проанализировали комплекс мер по ускорению 1С. Помните, что мониторинг — это ключ к успеху. Используйте стандартный Activity Monitor в SSMS или профессиональные инструменты (например, "Центр управления производительностью" от 1С), чтобы отслеживать самые «тяжелые» запросы и блокировки. Последовательное применение описанных настроек позволяет в большинстве случаев увеличить скорость отклика системы на 30–50% без вложений в новое оборудование.

← На главную