Многие системные администраторы и разработчики сталкиваются с ситуацией, когда связка 1С:Предприятие + MS SQL Server начинает работать медленно. Часто проблема проявляется периодически: система «зависает», время выполнения операций увеличивается, а перезагрузка службы SQL или всего сервера временно исправляет ситуацию. В этой статье мы подробно разберем, почему возникают такие тормоза, и проанализируем шаги по комплексной настройке серверной инфраструктуры для достижения максимальной производительности.
Рассмотрим ситуацию, когда SQL Server постепенно «съедает» всю доступную оперативную память на сервере. Разберем, почему это происходит и нужно ли вводить ограничения. По умолчанию настройки Microsoft SQL Server позволяют ему занимать почти всю физическую память, которую «видит» операционная система. Это проектная особенность: сервер старается кэшировать как можно больше данных в Buffer Pool, чтобы минимизировать обращения к медленной дисковой подсистеме.
Однако в среде 1С это может привести к негативным последствиям:
rphost), им может не хватить памяти для выполнения тяжелых запросов или формирования отчетов, что вызовет активное использование файла подкачки (swapping).Рекомендация: Обязательно ограничьте параметр Max Server Memory в настройках SQL Server. Оставьте операционной системе и серверу 1С минимум 4-8 ГБ (в зависимости от нагрузки и количества пользователей). Если SQL Server начнет вытеснять старые данные из кэша — это гораздо лучше, чем если вся система уйдет в «своп» на жестком диске.
Проанализируем вопрос размещения компонентов. Существует устойчивое мнение, что разделение 1С и SQL на разные виртуальные машины повышает надежность, однако с точки зрения производительности это создает дополнительные задержки на сетевом уровне. Разберем преимущества совместного размещения:
Когда сервер приложений 1С и СУБД находятся на одном хосте, мы можем использовать протокол Shared Memory (общая память) вместо TCP/IP. Это позволяет компонентам обмениваться данными напрямую через оперативную память, минуя сетевой стек протоколов. Для настройки в строке подключения к базе данных (в консоли администрирования 1С) можно принудительно указать протокол или убедиться, что в SQL Server Configuration Manager включен порядок протоколов, где Shared Memory стоит на первом месте.
Выясним причину, по которой один пользователь может «повесить» всю базу. Одной из самых частых ошибок настройки является параметр Max Degree of Parallelism (MAXDOP). По умолчанию он равен 0, что позволяет SQL Server использовать все доступные ядра процессора для выполнения одного тяжелого запроса.
Для информационных систем на базе 1С, где преобладают короткие транзакции и большое количество мелких запросов, рекомендуется:
MAXDOP в значение 1 (запретить параллелизм для одного запроса) или в значение 2-4 для очень мощных многоядерных систем.Cost Threshold for Parallelism. Поднимем его значение с 5 до 50. Это заставит SQL Server распараллеливать только действительно «дорогие» запросы, не тратя ресурсы на управление потоками в простых операциях.Посмотрим на проблему со стороны гипервизора (VMware или Hyper-V). Если 1С работает внутри виртуальной машины, критически важно правильно выделить ресурсы:
Reserve all guest memory. Это запретит гипервизору использовать механизм Ballooning (забирание памяти у гостевой ОС), который крайне губителен для производительности SQL Server.vNUMA. Если процесс 1С прыгает между разными физическими процессорами, это вызывает задержки при обращении к локальной памяти сокета.Maximum Performance. Режимы энергосбережения динамически меняют частоту процессора, что 1С воспринимает как микрофризы.Разберем специфическую настройку для Windows Server 2012 и выше. Служба Fair Share предназначена для равномерного распределения ресурсов между сессиями пользователей в терминальном режиме. Однако она часто мешает работе 1С, ошибочно ограничивая дисковый ввод-вывод или процессорное время для процессов платформы.
Рассмотрим, как отключить этот механизм через реестр для ускорения работы, особенно если конфигуратор открывается долго:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk.EnableFairShare в значение 0.CPU в соседних ветках.Проанализируем состояние системной базы TempDB. В 1С она используется постоянно для хранения временных таблиц. Если она настроена неправильно, возникает «очередь» к файлам.
TempDB, равное числу ядер процессора (но обычно не более 8).TempDB.Не забудем про регламентные операции. Стандартного плана обслуживания SQL может быть недостаточно. Для 1С критически важно регулярное обновление статистик (UPDATE STATISTICS) с параметром FULLSCAN. Без актуальной статистики оптимизатор SQL Server может выбрать неверный план запроса, что приведет к росту нагрузки на CPU и диск в десятки раз.
Напоследок разберем настройки самого сервера 1С:Предприятие. Чтобы избежать утечек памяти и деградации производительности со временем, выполним следующие действия:
В консоли администрирования 1С настроим перезапуск рабочих процессов rphost. Например, можно установить параметр Период перезапуска в 86400 секунд (раз в сутки) или настроить Допустимый объем памяти, после которого процесс будет плавно заменен новым. Это позволяет очищать кэши и освобождать память, которую конфигурация не вернула операционной системе вовремя.
Также проанализируем количество соединений на один рабочий процесс. Вместо одного огромного процесса rphost на 100 пользователей, эффективнее создать несколько процессов, ограничив их, например, 25-30 соединениями на каждый. Это повысит общую отзывчивость системы и отказоустойчивость.