Часто возникает ситуация, когда компания вкладывает значительные средства в покупку мощного серверного оборудования, но ожидаемого «взлета» производительности 1С не происходит. Процессоры загружены на 20%, оперативной памяти достаточно, но документы в «1С:Управление торговлей» или «1С:ERP» проводятся мучительно долго. Разберем по шагам, как настроить связку железа, ОС, MS SQL Server и платформы 1С, чтобы выжать максимум из имеющихся ресурсов.
Прежде чем приступать к программным настройкам, проанализируем базовый уровень — железо и BIOS. Современные серверные процессоры (например, серии Intel Xeon Gold) имеют агрессивные функции энергосбережения, которые могут «засыпать» в моменты низкой нагрузки, что критично для 1С, требующей мгновенного отклика.
Выясним, какие настройки необходимо проверить в первую очередь:
High Performance). Это отключает динамическое управление частотой со стороны оборудования и заставляет процессор работать на максимальной тактовой частоте постоянно.Рассмотрим ситуацию, когда в сервере установлено два физических процессора. В этом случае оперативная память распределяется между ними. Если процесс 1С работает на первом процессоре, а данные запрашивает из памяти, относящейся ко второму процессору, возникает задержка. Проанализируем, как этого избежать:
Разберем механизм CPU Affinity. Для систем, где 1С и SQL Server установлены на одном физическом сервере, крайне эффективно будет разделить их по разным процессорам (сокетам). Например, закрепим за SQL Server ядра процессора №0, а за процессами rphost.exe — ядра процессора №1. Это позволит минимизировать использование шины между процессорами и ускорит работу с памятью.
Настроим СУБД так, чтобы она не мешала платформе 1С, но при этом максимально быстро отдавала данные. Рассмотрим ключевые параметры:
Параметр MAXDOP (Maximum Degree of Parallelism): Посмотрим на план запросов 1С. Большинство из них — это короткие транзакционные запросы. Если SQL попытается распараллелить один маленький запрос на все 16 или 24 ядра, накладные расходы на сборку результата будут выше, чем само выполнение. Рекомендуем установить значение 1 для большинства баз 1С, либо 2–4 для очень тяжелых аналитических отчетов.
Memory Limit: Проанализируем потребление памяти. Если сервер 1С и SQL живут на одном хосте, необходимо жестко ограничить Maximum server memory для SQL Server. Оставим системе и 1С минимум 20-30% оперативной памяти, иначе при пиковых нагрузках SQL «вытеснит» сервер 1С в файл подкачки (swapping), что приведет к мгновенному падению производительности.
Shared Memory: Убедимся, что включен протокол Shared Memory (Общая память) в SQL Server Configuration Manager. Поскольку сервер 1С и SQL находятся «в одной коробке», этот протокол позволяет им обмениваться данными напрямую через оперативную память, минуя сетевой стек, что значительно быстрее.
Выясним причину, по которой 1С может не использовать все ядра процессора. Платформа 1С в рамках одного сеанса работает преимущественно в один поток. Это значит, что одно долгое проведение документа будет нагружать только одно ядро. Чтобы задействовать всю мощность, разберем настройку рабочих процессов:
Посмотрим на параметры рабочего сервера в консоли администрирования 1С:
rphost.exe. Уменьшим это значение (например, до 20–25 соединений), чтобы платформа создала несколько рабочих процессов. Это позволит ОС более равномерно распределять нагрузку по ядрам.Иногда даже самое мощное железо бессильно перед неоптимальным кодом. Проанализируем ситуацию на примере «Управления торговлей 11». Если проведение чека занимает 5–7 секунд, проблема часто кроется в избыточных запросах или блокировках.
Рассмотрим пример того, как неоптимальный запрос в цикле может убить производительность. Выясним, как можно оптимизировать получение цен или остатков. Рассмотрим логику подмены запроса, когда мы сначала собираем все необходимые данные в таблицу значений или временную таблицу, а потом одним запросом получаем результат:
// Пример оптимизации: вместо запроса в цикле используем временную таблицу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Количество КАК Количество
|ПОМЕСТИТЬ ВТ_Товары
|ИЗ
| &ТаблицаТоваров КАК Товары;
|
|ВЫБРАТЬ
| ВТ_Товары.Номенклатура,
| Цены.Цена
|ИЗ
| ВТ_Товары КАК ВТ_Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК Цены
| ПО ВТ_Товары.Номенклатура = Цены.Номенклатура";
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаДокумента);
Запрос.УстановитьПараметр("Период", ДатаДокумента);
Результат = Запрос.Выполнить().Выгрузить();
Проанализируем также влияние фоновых заданий. В современных конфигурациях 1С (УТ 11, ERP) активно используется механизм отложенного проведения. Если документы проводятся долго, проверим, не пытаются ли расчеты себестоимости или партионного учета выполняться в реальном времени при каждом проведении. Перевод этих процессов в регламентные задания может значительно ускорить работу пользователей в интерфейсе.
Несмотря на наличие SSD, диски могут стать узким местом из-за очередей. Разберем правила разделения данных:
.mdf) и файлы логов (.ldf) на разные физические диски (или разные RAID-массивы). Логи пишутся последовательно, и любое соседство с другими процессами чтения/записи замедляет транзакции.srvinfo на быстром SSD также добавит отзывчивости системе.Подводя итог, отметим, что «заставить сервер работать на всю катушку» — это не одна галочка в настройках, а комплекс мероприятий от BIOS до оптимизации конкретных запросов в коде 1С.