Проблема низкой производительности 1С в клиент-серверном варианте — одна из самых частых задач, с которыми сталкиваются администраторы и разработчики. Часто стандартные настройки MS SQL Server «из коробки» не подходят для специфики работы 1С, которая генерирует огромное количество коротких транзакций и активно использует временные таблицы. В этой статье мы подробно разберем технические настройки, которые позволят существенно ускорить работу системы.
Проанализируем ситуацию с распределением ресурсов. По умолчанию 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;
Выясним причину, по которой запросы 1С могут «тормозить» при наличии свободных ядер процессора. 1С:Предприятие лучше всего работает, когда один запрос выполняется на одном ядре. Если SQL Server пытается распараллелить простой запрос на 16 ядер, накладные расходы на синхронизацию потоков (ожидания CXPACKET) становятся выше, чем само время выполнения запроса.
Посмотрим на рекомендации фирмы «1С»: параметр Max Degree of Parallelism (MAXDOP) рекомендуется устанавливать в значение 1. Это гарантирует, что каждый отдельный запрос будет обрабатываться одним процессором.
Разберем, как применить эту настройку:
Max Degree of Parallelism равным 1.Проанализируем роль системной базы TempDB. В 1С она используется постоянно: для хранения временных таблиц запросов, промежуточных результатов и сортировок. Если TempDB настроена неправильно, она становится «бутылочным горлышком» всей системы.
Рассмотрим шаги по оптимизации TempDB:
TempDB на несколько файлов данных одинакового размера. Общая рекомендация — количество файлов должно быть равно количеству логических ядер процессора (но не более 8). Это снижает конкуренцию за распределение страниц памяти (ожидания PAGELATCH_UP).TempDB на самый быстрый диск (в идеале NVMe SSD).Для старых версий SQL Server (до 2016 года) крайне важно включить специфические флаги трассировки, которые меняют логику работы с дисковым пространством:
TempDB, разделенной на несколько файлов.На современных версиях SQL Server эти механизмы включены по умолчанию на уровне ядра базы данных.
Даже идеально настроенный сервер начнет работать медленно, если данные внутри него фрагментированы. Проанализируем необходимые регламентные задания:
Reorganize (для фрагментации 5–30%) и Rebuild (для фрагментации более 30%).Рассмотрим пример кода для обновления статистики по всей базе данных 1С:
USE [Имя_Вашей_Базы];
GO
EXEC sp_updatestats;
GO
Выясним причину, по которой создание базы или расширение файлов может занимать много времени. По умолчанию Windows зануляет место на диске при выделении его под файл. Мы можем ускорить этот процесс, предоставив учетной записи, под которой запущен SQL Server, право Perform volume maintenance tasks (Выполнение задач по обслуживанию тома) в локальных политиках безопасности Windows. Это позволит SQL Server мгновенно выделять место на диске.
Важно понимать, что никакие настройки SQL не спасут систему, если код написан неоптимально. Проанализируем основные правила эффективных запросов:
ГДЕ) или соединение (ПО), проиндексированы. В 1С это достигается установкой свойства индексирования у реквизитов или использованием измерений регистров.МенеджерВременныхТаблиц) для промежуточных данных.Пример правильного использования временной таблицы с индексацией:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Товар
|ПОМЕСТИТЬ ВТ_Товары
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ВидНоменклатуры = &Вид
|;
|////////////////////////////////////////////////////////////////////////////////
|ИНДЕКСИРОВАТЬ ПО
| Товар
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Товары.Товар,
| Остатки.КоличествоОстаток
|ИЗ
| ВТ_Товары КАК ВТ_Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
| ПО ВТ_Товары.Товар = Остатки.Номенклатура";
Мы проанализировали комплекс мер по ускорению 1С. Помните, что мониторинг — это ключ к успеху. Используйте стандартный Activity Monitor в SSMS или профессиональные инструменты (например, "Центр управления производительностью" от 1С), чтобы отслеживать самые «тяжелые» запросы и блокировки. Последовательное применение описанных настроек позволяет в большинстве случаев увеличить скорость отклика системы на 30–50% без вложений в новое оборудование.