Медленный сервер 1С: от диагностики до тюнинга SQL и железа
Содержание
Сервер 1С ускоряют в таком порядке: сначала замер, потом диск и память, затем настройки СУБД, после них кластер 1С, и только в конце код конфигурации. Начинать с покупки процессора нельзя: в большинстве случаев узкое место сидит в дисках, блокировках или параметрах SQL Server, а не в мощности ядер.
Ниже порядок работ для клиент-серверной базы на Windows Server и Microsoft SQL Server. Каждый шаг можно проверить цифрой до и после. Если изменение не дало эффекта, верните прежнее значение и идите дальше.
Сначала измерьте: где сервер 1С тормозит на самом деле
Жалоба «всё медленно» ничего не говорит. Нужно понять, какая именно операция тормозит и чем сервер занят в этот момент.
Что смотреть на сервере
Откройте монитор ресурсов Windows и снимите показатели в часы жалоб:
- 💽 Диск: задержка чтения и записи. Норма для данных и логов SQL — единицы миллисекунд, 20 мс и выше уже плохо.
- 🧠 Память: сколько свободно, есть ли активная подкачка.
- ⚙️ Процессор: загрузка по ядрам. Одно ядро в 100% при остальных свободных — признак однопоточной операции или MAXDOP.
- 🌐 Сеть: потери и задержки между клиентами, сервером 1С и SQL.
Что смотреть в самой 1С
Для замера конкретных операций есть «Центр управления производительностью» и встроенный замер производительности с оценкой APDEX. Он показывает ключевые операции пользователей (проведение документа, формирование отчёта) и их время. Из этого вы увидите: тормозит всё или два-три сценария.
Для разбора причин на уровне запросов включайте технологический журнал: файл logcfg.xml в каталоге conf платформы. Полезные события — DBMSSQL (медленные запросы к СУБД), TLOCK и TTIMEOUT (блокировки и таймауты), EXCP (исключения). Включайте на короткое время и с фильтром по длительности, иначе журнал сам съест диск.
Настройка Windows Server под нагрузку 1С
Операционная система редко даёт большой выигрыш, но три настройки делают заметную разницу.
- Схема электропитания. Выберите «Высокая производительность». На плане «Сбалансированная» процессор сбрасывает частоту, и однопоточные операции 1С выполняются медленнее.
- Антивирус. Добавьте в исключения каталоги данных SQL Server (файлы
.mdf,.ldf,.ndf), каталог кластера 1С (srvinfo) и процессыragent.exe,rmngr.exe,rphost.exe,sqlservr.exe. Построчная проверка файла базы при каждом обращении может замедлить работу в разы. - Файл подкачки. Не отключайте его. Задайте фиксированный размер, чтобы он не фрагментировался и не менял размер на ходу. Для сервера с большим объёмом памяти хватает умеренного значения, ориентир — несколько гигабайт.
Дополнительно:
- 🚫 Отключите индексирование дисков с данными.
- 🚫 Не держите на сервере 1С браузеры, почту и лишние службы.
- 🔄 Устанавливайте обновления Windows в окно обслуживания, а не по расписанию «когда придётся».
Если сервер виртуальный, проверьте, что хост не перегружен по процессору (метрика ожидания vCPU) и что у виртуальной машины включена статическая память, без «баллонинга». Виртуализация с динамической памятью для SQL Server даёт случайные провалы.
Параметры кластера серверов 1С: процессы, память, соединения
Кластер управляет тем, сколько рабочих процессов (rphost) запущено и сколько сеансов на каждый приходится. Настройки находятся в консоли администрирования серверов 1С: рабочие серверы кластера, их свойства.
Рабочие процессы
Ключевые параметры сервера:
| Параметр | На что влияет | Ориентир |
|---|---|---|
| Количество рабочих процессов | Параллельность обработки | Обычно 1 процесс на 4-8 ядер, не больше числа ядер |
| Количество соединений на рабочий процесс | Сколько сеансов обслуживает один rphost | Около 50-100 пользователей на процесс |
| Допустимый объём памяти рабочих процессов | Порог, после которого процесс перезапускается | Не менее 70-80% свободной памяти под 1С, в сумме по процессам |
| Временной интервал превышения допустимого объёма | Как долго процесс может превышать порог | Оставляйте по умолчанию, пока нет проблем |
Один процесс на сотню сеансов означает, что падение одного rphost оборвёт всех. Слишком много мелких процессов — лишние накладные расходы. Золотая середина подбирается на практике: начните с трёх-четырёх процессов на среднюю нагрузку.
Платформа и лицензии
- Используйте актуальную рекомендованную платформу 8.3 для вашей конфигурации. В новых релизах платформа оптимизирована лучше, а часть проблем с блокировками закрыта.
- Серверный
rphostдолжен быть 64-битным. 32-битный процесс упирается в лимит памяти. - Следите за тем, чтобы клиентские сеансы с типом «толстый клиент» не нагружали сервер лишней работой: тонкий и веб-клиент дешевле.
Если у базы сотни сеансов, а пользователи ходят в основном в справочники и документы, увеличьте число соединений на процесс. Если работают тяжёлые отчёты и закрытие месяца, наоборот, уменьшите: тяжёлые операции не должны мешать соседям на том же процессе.
Тюнинг Microsoft SQL Server для баз 1С
SQL Server по умолчанию настроен «универсально», а 1С — специфичная нагрузка: много коротких транзакций и часто плохие по форме запросы. Главные настройки задаются через свойства сервера в SSMS.
Память
Задайте max server memory, иначе SQL займёт почти всю память и оставит систему без неё. Пример для сервера на 64 ГБ, где живут и SQL, и кластер 1С:
- 🧩 ОС и служебные процессы: 8 ГБ
- 🧩 Кластер 1С (рабочие процессы): 16 ГБ
- 🧩 SQL Server: оставшиеся 40 ГБ (64 − 8 − 16)
Если SQL стоит на отдельной машине, оставьте ОС 4-6 ГБ, остальное отдайте SQL. Дополнительно можно включить право «Закрепление страниц в памяти» для учётной записи службы SQL Server — это защищает буферный кэш от вытеснения.
Параллелизм
Для баз 1С стандартная рекомендация такая:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'max degree of parallelism', 1; RECONFIGURE;
EXEC sp_configure 'cost threshold for parallelism', 50; RECONFIGURE;
MAXDOP = 1 отключает распараллеливание отдельного запроса. Для типичной нагрузки 1С это выгоднее: параллельные планы дают много ожиданий и нестабильное время. Если у вас регулярно выполняются тяжёлые аналитические запросы, проверьте эффект на тестовой копии.
Tempdb
1С активно использует временные таблицы, поэтому tempdb нагружается сильно:
- создайте несколько файлов данных tempdb одинакового размера, по числу ядер, но не больше 8;
- задайте размер заранее и приращение в мегабайтах, не в процентах;
- держите tempdb на самом быстром диске.
Модель восстановления и файлы
- Для рабочей базы обычно стоит полная модель восстановления, но только при регулярных резервных копиях журнала. Иначе файл
.ldfрастёт бесконечно. - Приращение файлов данных и журнала задавайте фиксированным, например 512 МБ-1 ГБ. Мелкие приращения вызывают частые остановки на расширение.
- Включите мгновенную инициализацию файлов (право «Выполнение задач обслуживания тома» для учётной записи SQL) — расширение данных станет почти мгновенным.
Диск, память и процессор: что закупать под сервер 1С
Если замеры показали, что упёрлись в железо, приоритеты такие.
- Дисковая подсистема. Это почти всегда первое. SSD или NVMe вместо HDD ускоряют проведение и отчёты в разы. Минимум — отдельные тома под данные, журнал транзакций и tempdb. RAID 10 для данных надёжнее и быстрее, чем RAID 5 при большом числе записей.
- Оперативная память. Чем больше база помещается в буферный кэш SQL, тем меньше чтения с диска. Ориентир: для базы в 100-200 ГБ и сотни пользователей разумно иметь 64-128 ГБ на SQL и отдельно память под 1С.
- Процессор. Для 1С важнее высокая тактовая частота ядра, чем их число: многие операции однопоточные. Лучше 8 ядер по 3,5 ГГц, чем 24 по 2,2 ГГц.
- Сеть. Гигабитный канал между серверами 1С и SQL достаточен для большинства, но задержка должна быть ниже миллисекунды.
Прежде чем покупать оборудование, сделайте замеры из первого раздела. Одна неудачная настройка MAXDOP или переполненный диск тормозят сильнее, чем слабый процессор.
Ориентировочно, ускорение от замены HDD на SSD для проведения документов и отчётов бывает от двух до десяти раз в зависимости от нагрузки. Это самое выгодное вложение на единицу стоимости.
Оптимизация конфигурации и кода 1С
Если сервер настроен, а операция всё равно медленная, причина в самой конфигурации. Это работа разработчика, но администратор должен уметь её локализовать.
Что искать:
- 🐌 Запросы в цикле. Обращение к базе на каждой итерации вместо одного запроса со всеми данными.
- 🐌 Обращение через точку к реквизитам ссылок в больших выборках — лишние соединения в запросе.
- 🐌 Отсутствие индексов по полям отбора в частых запросах.
- 🐌 Избыточные блокировки. Блокировка всей таблицы вместо ключа, долгие транзакции с интерактивными вопросами внутри.
- 🐌 Тяжёлые подписки и регламентные задания, которые идут в рабочее время.
План действий:
- По технологическому журналу найдите самые длительные запросы события
DBMSSQL. - Сопоставьте с кодом, который их вызывает.
- Проверьте план запроса в SQL Server и наличие индексов.
- Исправьте код или добавьте индекс и повторите замер.
Типовые конфигурации 1С оптимизированы вендором. Больше всего проблем в доработанных конфигурациях и самописных отчётах. Начинайте с них.
Регулярное обслуживание: чтобы сервер снова не замедлился
Скорость падает не внезапно, а накапливается. Настройте регламент.
Что делать по расписанию
| Операция | Как часто | Зачем |
|---|---|---|
| Обновление статистики | Ежедневно, ночью | Оптимизатор SQL строит планы по свежим данным |
| Перестроение или реорганизация индексов | Раз в неделю | Убирает фрагментацию |
| Резервная копия журнала транзакций | Каждые 15-60 минут | Журнал не растёт, есть точка восстановления |
| Полная резервная копия | Ежедневно | Страховка |
| Очистка технологического журнала и логов | Еженедельно | Не заполнять диск |
| Проверка свободного места | Ежедневно | Остановка при нуле места |
Перестраивайте индексы выборочно: для небольшой фрагментации достаточно реорганизации, а перестроение нужно при высокой. Универсальные скрипты обслуживания с пороговыми значениями экономят часы.
Внутри 1С
- 🗂️ Периодически сворачивайте и чистите старые данные по регламенту предприятия.
- 🗂️ Следите за размером регистров и журнала регистрации, он растёт быстро.
- 🗂️ Проверяйте, чтобы ночные регламентные задания не пересекались с копированием.