- Что нужно учесть в первую очередь
- Базовые настройки sql-сервера в SSMS
- Настройка базы данных: файлы, рост, диски
- tempdb: мелочь, которая убивает скорость
- Настройка соединений 1С <-> sql (важно для производительности)
- Регламентные задания: то, без чего база начинает “тормозить”
- Бэкапы: как настроить full и differential
- Сжатие базы (когда оно оправдано)
- Антивирус и файловая нагрузка
- Короткий чек-лист, который обычно закрывает 80% проблем
- Что делать, если “настроили, а через время снова стало медленно”
- Принципиальная база: что именно делает 1С “вместе” с sql
- Полезные официальные источники
Если 1С работает медленно, чаще всего проблема не в “самом sql”, а в том, что сервер поставили и оставили как есть. 1С любит, когда база обслуживается регулярно, память и диски настроены под нагрузку, а обслуживание выполняется по расписанию.
Ниже - практичная схема настройки sql-сервера для клиент-серверного режима 1С: от базовых параметров до регламентных задач.
Что нужно учесть в первую очередь
Перед тонкой настройкой важно понимать вводные:
- Режим работы: 1С с СУБД - это когда 1С обращается к базе через sql, а тяжелые операции выполняет sql-сервер.
- Где стоят 1С и sql: на одной машине или на разных влияет протоколы соединения и настройки.
- Нагрузка: количество пользователей, размер базы, частота регламентных операций и фоновых задач (загрузки/выгрузки, отчеты).
Если sql и 1С на разных машинах, обычно лучше разделять нагрузку и не пытаться “выжать все” из одной виртуалки. И да, виртуализация часто усложняет предсказуемость производительности.
Базовые настройки sql-сервера в SSMS
1) Обновите управление через SSMS и зайдите под админом
Управлять sql удобнее через SQL Server Management Studio (SSMS): в интерфейсе настраиваются службы, база, параметры сервера и планы обслуживания.
2) Отключите то, что не нужно 1С
В первую очередь проверьте и отключите неиспользуемые компоненты sql, которые создают лишние процессы/нагрузку. Часто лишним бывает FullText Search, а также другие службы, если их не используют.
Минимально полезные для большинства сценариев:
- SQL Server (sqlservr.exe)
- SQL Server Agent (SQLAGENT.exe)
- SQL Writer (sqlwriter.exe)
3) Ограничьте память sql (и объясните ему рамки)
Типовая логика такая: OS нужно немного памяти, а остальное - под sql и рабочие процессы 1С (rphost), если они живут на том же сервере.
Условная схема расчета из практики:
- от общей RAM отнять 4 ГБ (или меньше/по вашей ОС),
- затем под каждый rphost отдать 1.5 ГБ,
- оставшееся - для sql.
Если sql и 1С на одном сервере, то sql должен заранее “знать”, сколько он может держать в RAM. Иначе он будет пытаться забрать больше, чем сервер реально может отдать, и начнет упираться в память и диск.
4) Выставьте потоки и приоритет
Практический ориентир:
- Maximum worker threads - целиться в 2048 (на практике это часто дает стабильную работу под 1С),
- Boost priority - включить, чтобы sql получил более высокий приоритет исполнения.
Эти параметры не “магия”, но они убирают лишнюю задержку в обработке запросов под нагрузкой.
Настройка базы данных: файлы, рост, диски
1) Размер первичных файлов и автоувеличение
Если вы переносите 1С из dt или пока примерно знаете размер, важно сразу задать файлы так, чтобы база не росла рывками.
Рекомендации по автоувеличению (ориентир):
- для данных: автоувеличение примерно 200 МБ
- для лога: автоувеличение примерно 50 МБ
Если автоувеличение слишком маленькое, sql будет часто расширять файлы и тратить ресурсы на рост после многих транзакций - скорость падает.
2) Данные и лог - по разным дискам
По возможности размещайте:
- данные базы и
- лог транзакций
на разных физических дисках.
Так меньше конкуренция за IO, а 1С меньше страдает от очередей на диске.
3) Ограничьте лог до разумного размера
Для рабочих сценариев часто достаточно, чтобы лог был ограничен в диапазоне примерно 2-4 ГБ (дальше - по модели восстановления и вашему бэкап-плану).
tempdb: мелочь, которая убивает скорость
Если tempdb работает “как попало”, у sql появляются паузы, и 1С это чувствует в отчетах, подборе и тяжелых запросах.
Что обычно делают:
- tempdb размещают на быстром диске (отдельный диск, если есть возможность),
- увеличивают количество файлов tempdb так, чтобы оно хорошо распределяло нагрузку (часто ориентир - 1 файл на ядро, но не более разумного лимита).
Точное число подбирают по железу, но сама идея - убрать “один общий узкий проход”.
Настройка соединений 1С <-> sql (важно для производительности)
Если 1С-сервер и sql на одной машине:
- обычно используют Shared Memory (в зависимости от версий платформы это актуально начиная с определенных релизов).
Если на разных машинах:
- используют TCP/IP.
Проверка транспорта обычно делается запросом к динамическим представлениям sql (в SSMS можно посмотреть, какой net_transport используется текущими соединениями).
Регламентные задания: то, без чего база начинает “тормозить”
Со временем появляются:
- замедления открытия документов,
- подвисания подбора,
- долгие отчеты.
Обычно это следствие того, что индексы фрагментируются, статистика устаревает, а обслуживание отсутствует или выполняется вручную “когда вспомнили”.
Maintenance Plan: что делать раз в неделю/день
Базовая логика из практики для базы 1С:
- Проверка целостности - примерно раз в неделю
- Дефрагментация индексов (реорганизация) и
- обновление статистики - обычно делают ежедневно
- Полное перестроение индексов (если фрагментация высокая) - реже, по ситуации (например, по расписанию отдельно или по порогу)
Обычно в SSMS это настраивается через:
Управление -> Планы обслуживания -> Мастер планов обслуживания
Порог по фрагментации индексов: когда реорганизовать, а когда перестраивать
Практичный ориентир:
- фрагментация 5-30% - делайте реорганизацию,
- фрагментация выше 30% - нужно полное перестроение.
Есть полезный запрос, который возвращает среднюю фрагментацию по индексам через sys.dm_db_index_physical_stats. Для базы 1С его удобно запускать в окно запроса SSMS, чтобы принять решение без гаданий.
Времена и технологическое окно
Запускайте обслуживание:
- в технологическом окне,
- когда нагрузка минимальная.
Но ежедневные операции обычно можно делать так, чтобы пользователи продолжали работать (реорганизация индексов обычно менее болезненна, чем восстановление/перестроение).
Бэкапы: как настроить full и differential
Для восстановления и стабильности важно, чтобы bэкапы выполнялись по расписанию.
Типовая схема:
- Full: раз в сутки
- Differential: раз в 1-2 часа
Идея: full дает основу, differential - быстрые точки восстановления чаще, чем full.
С точки зрения практики, full/backups через SQL Server Agent обычно выполняются T-SQL скриптами BACKUP DATABASE ... TO DISK ....
Про shrink и лог
Есть практики “сжимать лог” (DBCC SHRINKFILE для файла логов). Но это может быть спорно: если вы делаете это без понимания модели восстановления и частоты бэкапов, можно получить лишнюю нагрузку и рост/перерост файла обратно.
Если вы решаете, использовать ли shrink, делайте это осознанно и привязывайте к вашей модели восстановления и фактической стратегии бэкапов.
Сжатие базы (когда оно оправдано)
Сжатие базы часто не нужно постоянно. Обычно его имеет смысл включать:
- после существенных изменений в базе,
- после восстановления из дампа,
- после реструктуризации/сверток.
В остальное время сжатие может ухудшить читаемость IO-профиля и добавит лишние операции.
Антивирус и файловая нагрузка
Одна из частых “скрытых” проблем производительности: антивирус сканирует файлы базы и резко тормозит sql.
Что делают:
- исключают каталог(и), где лежат файлы базы данных и ldf/mdf,
- следят, чтобы антивирус не вмешивался в постоянную работу sql.
Короткий чек-лист, который обычно закрывает 80% проблем
| Область | Что сделать | Ориентир |
|---|---|---|
| Компоненты sql | Отключить неиспользуемые службы | FullText Search, если 1С использует собственный поиск |
| Память | Ограничить RAM sql | чтобы sql заранее “знал” лимит (особенно если sql и 1С на одном сервере) |
| Потоки | Настроить worker threads | целиться в 2048 |
| Файлы базы | Задать первичный размер | первичный файл >= ожидаемому после разворачивания dt |
| Автоувеличение | Установить разумные шаги | ~200 МБ данные, ~50 МБ лог |
| Диски | Разнести данные/лог | на разные физические диски, если возможно |
| tempdb | Разместить на быстром диске и раздать файлы | чтобы не было узкого места |
| Индексы | Реорганизация/перестроение по фрагментации | <30% реорганизация, >30% перестроение |
| Статистика | Обновлять регулярно | обычно раз в сутки |
| Бэкапы | Full + Differential по расписанию | full раз в сутки, diff каждый 1-2 часа |
| Антивирус | Исключить каталоги базы | чтобы файлы sql не сканировались постоянно |
Что делать, если “настроили, а через время снова стало медленно”
Это почти всегда значит одно из трех:
- обслуживание не выполняется стабильно (план обслуживания выключен/падает/не в технологическое окно),
- статистика и индексы уходят в плохое состояние (нет регламента или он слишком редкий),
- диски или tempdb стали узким местом (например, вырос объем базы, добавились пользователи, изменился режим работы).
В реальности путь простой: проверяете журнал плана обслуживания, смотрите фрагментацию и актуальность статистики, оцениваете IO и tempdb - и поправляете расписание/пороги под текущую нагрузку.
Принципиальная база: что именно делает 1С “вместе” с sql
Важно понимать, что 1С сама по себе не “ускоряет” работу базы. Она опирается на то, как sql хранит данные, строит планы запросов и обслуживает индексы/статистику. Поэтому правильно настроенный sql - это не один раз “выставить галочки”, а поддерживать стабильное состояние базы: индексы, статистика, бэкапы, диски и отсутствие фоновых конфликтов (например, антивирус).
Полезные официальные источники
- Документация Microsoft по реорганизации и перестроению индексов: https://docs.microsoft.com/ru-ru/sql/relational-databases/indexes/reorganize-and-rebuild-indexes
- Документация Microsoft по статистике: https://docs.microsoft.com/ru-ru/sql/relational-databases/statistics/statistics
- Рекомендации 1С по администрированию СУБД (ИТС): https://its.1c.ru/db/metod8dev/