SQL Server для 1С: что смотреть в настройках и когда звать администратора
Если 1С по SQL Server тормозит на растущей базе, за 20 минут без прав администратора можно проверить пять настроек: MAXDOP, cost threshold for parallelism, max server memory, число файлов tempdb и автоувеличение баз. Часто именно дефолтные значения после установки SQL Server, а не «слабое железо», держат систему заметно медленнее, чем она могла бы работать.
симптом: база встаёт в 9 утра, а не ночью
На 45 пользователях база 1С:Управление торговлей виснет ровно в 9:05, когда бухгалтерия открывает продажи за вчера, а склад одновременно проводит отгрузки по вчерашним заказам. К половине десятого вроде отпускает. К обеду тяжело снова: закрытие смены на кассах плюс обмен с сайтом. Администратор проверяет диск — свободно 40%. Проверяет процессор — редко выше 30%. Железо вроде ни при чём, а зависания повторяются день в день в одни и те же 20-25 минут.
Тут и кроется конфликт: цепляться за «купить сервер помощнее» соблазнительно, поэтому в бюджет закладывают апгрейд, а зависания остаются теми же — потому что причина не в мощности железа, а в том, как SQL Server эту мощность распределяет между запросами. Если потратить на диагностику 20 минут вместо новой закупки, ответ обычно виден в Activity Monitor и в счётчиках ожиданий.
Цена бездействия считается просто. Если у 20 сотрудников каждое утро зависает работа на 20-25 минут, это примерно 7-8 часов рабочего времени компании в день — почти один полный сотрудник, который просто ждёт, пока проведётся документ. За месяц это не разовая неприятность, а стабильная статья потерь, которую никто не видит в отчёте о прибылях.
что смотреть в первую очередь: activity monitor и статистика ожиданий
Прав администратора базы данных для базовой диагностики не нужно — достаточно доступа на чтение к SQL Server Management Studio. Порядок такой:
- ✓Activity Monitor, вкладка Processes: сколько сессий 1С реально выполняют запросы, а сколько висят в статусе suspended.
- ✓Recent Expensive Queries: какие запросы съедают процессор и диск дольше остальных — обычно это два-три отчёта или регламентных задания.
- ✓sys.dm_os_wait_stats: если преобладают PAGEIOLATCH — упирается диск, если CXPACKET — проблема в параллелизме запросов, если LCK_M — блокировки между сессиями 1С.
Для 1С типична одна и та же картина: несколько «тяжёлых» отчётов или проведений документов уходят в параллельное выполнение, забирают ядра у остальных сессий, и вся база выстраивается в очередь. Дальше это правится не железом, а настройками сервера — прежде всего MAXDOP и cost threshold for parallelism.
пять настроек, которые SQL Server сам не поменяет
После установки SQL Server работает на значениях по умолчанию, рассчитанных на любую нагрузку сразу — от аналитики до онлайн-транзакций. Для 1С это компромисс не в её пользу. Таблица показывает, что стоит проверить в первую очередь и на что поменять.
| настройка | по умолчанию после установки | рекомендация для 1С | что даёт |
|---|---|---|---|
| MAXDOP | 0 (без ограничений) | 1 для сервера, где работает только 1С | убирает конкуренцию потоков за ядра на коротких запросах проведения документов |
| cost threshold for parallelism | 5 | 50 и выше | мелкие запросы 1С не уходят в параллельный план без необходимости |
| max server memory | не ограничена | физическая память минус 2-4 ГБ на операционную систему | SQL Server не выдавливает саму ОС и службы 1С в своп |
| файлы tempdb | 1 файл | по числу ядер, до 8 файлов | снимает конкуренцию за tempdb при массовом проведении документов |
| автоувеличение баз (autogrowth) | в процентах от размера | фиксированный шаг, например 512 МБ - 1 ГБ | меньше фрагментации файлов при росте базы |
maxdop и параллелизм: главная причина «зависаний по расписанию»
SQL Server по умолчанию сам решает, сколько ядер выделить на один запрос — MAXDOP равен 0, то есть «сколько сочтёт нужным». Для аналитической нагрузки это иногда полезно, но для 1С почти всегда вредно: платформа генерирует множество коротких транзакций — провести документ, записать регистр, обновить остаток, — и каждая из них не должна конкурировать за все ядра сервера с соседним отчётом.
Пока MAXDOP = 0, один тяжёлый отчёт по продажам может забрать 6 из 8 ядер на 30-40 секунд, а в это время десяток пользователей просто проводят обычные документы и упираются в очередь. Поэтому для 1С рекомендуют MAXDOP = 1 на серверах, где база 1С работает одна, а cost threshold for parallelism поднимают до 50, чтобы мелкие запросы вообще не уходили в параллельный план. Актуальные системные требования и рекомендованные версии SQL Server опубликованы на сайте 1С — их стоит сверять при каждом обновлении платформы, а обновление 1С — удобный повод заодно пересмотреть и эти настройки.
если на сервере несколько баз 1С или сторонние службы
Жёсткое правило MAXDOP = 1 работает, когда на инстансе SQL Server крутится только 1С. Если рядом живут ещё две-три базы других систем или тяжёлая аналитика, единичное значение может задушить их собственные параллельные запросы — тогда MAXDOP выставляют в 2-4, отталкиваясь от числа NUMA-узлов сервера, и проверяют результат отдельно по каждой базе.
Отдельная история — нетиповые отчёты и обработки, написанные под конкретный процесс компании: если запрос в коде плохо оптимизирован, никакой MAXDOP не спасёт, и решение здесь не в настройках сервера, а в переработке самого запроса — это уже зона доработки 1С.
память и tempdb: где ещё теряются секунды
max server memory по умолчанию не ограничена — SQL Server готов забрать всю доступную оперативную память сервера. На выделенной машине под 1С это не страшно, но если на ней же живут терминальные сессии, файловый сервис или контроллер домена, операционная система начинает уходить в своп, и тормозит уже не база, а весь сервер целиком. Правило простое: оставить операционной системе 2-4 ГБ, остальное отдать SQL Server.
tempdb — вторая частая недоработка. По умолчанию это один файл, а 1С активно использует временные таблицы при формировании отчётов и при проведении документов с большим числом движений. Один файл tempdb на восьмиядерном сервере — это восемь потоков, дерущихся за один и тот же файл. Рекомендация — отдельный файл tempdb на каждое ядро, до восьми файлов, равного начального размера и с одинаковым шагом автоувеличения.
Автоувеличение самих баз 1С по умолчанию задано в процентах, например 10% от текущего размера. На базе в 200 ГБ это прирост файла на 20 ГБ за одну операцию, которая блокирует запись на всё время, пока диск выделяет место. Фиксированный шаг в 512 МБ - 1 ГБ срабатывает чаще и короче, поэтому пользователи не замечают заминок.
плановое обслуживание: то, что SQL Server сам не запускает
Из коробки SQL Server не перестраивает индексы, не обновляет статистику по расписанию и не проверяет целостность базы — это отдельные задания, которые нужно создать самостоятельно через SQL Server Agent. Без них индексы 1С фрагментируются за несколько недель активной работы, планировщик запросов начинает опираться на устаревшую статистику и выбирает не самый быстрый план выполнения — а внешне это выглядит как та же самая утренняя тормознутость, только причина уже не в MAXDOP.
Базовый план обслуживания для 1С обычно включает: перестроение или реорганизацию индексов раз в неделю по расписанию, обновление статистики ежедневно ночью, полную проверку целостности базы раз в неделю и резервное копирование по схеме, которая реально проверялась на восстановление, а не просто настроена и забыта. Если эти задания запускаются впритык к началу рабочего дня, они сами становятся причиной зависаний в 9 утра — и тогда решение не в настройках памяти, а в переносе расписания на более раннее время.
когда чинить самим, а когда звать сисадмина
Пять настроек из таблицы выше можно проверить и поменять за один визит специалиста с правами sysadmin на инстансе SQL Server. Это не капитальный ремонт: MAXDOP, cost threshold for parallelism и max server memory меняются без остановки службы и применяются сразу. Перенастройка tempdb на несколько файлов потребует короткого технологического окна — 5-10 минут ночью или в выходной.
Сложнее, если после настройки сервер всё равно упирается в железо: диски не тянут нагрузку по операциям в секунду, процессор старше пяти поколений, памяти физически меньше, чем нужно растущей базе 1С:ERP или 1С:Управление торговлей. В этом случае экономичнее не покупать сервер в собственность, а перенести базу на арендованный сервер, изначально настроенный под 1С — аренда сервера для 1С начинается от 3300 руб/мес, что дешевле разовой закупки железа и его последующего обслуживания.
Результат настройки не обязательно принимать на слово: тест Гилёва даёт условный балл производительности «до» и «после», и разница обычно заметна уже на первом прогоне — методика описана на сайте теста. Разовый аудит и настройку SQL Server под 1С делает сисадмин компании: сопровождение 1С и работы сисадмина стоят от 3800 руб/час, а диагностика по пунктам из этой статьи обычно занимает два-три часа, включая замер до и после.
Если внедряете 1С:ERP с нуля, правильные настройки SQL Server стоит закладывать сразу в проект внедрения, а не разбирать зависания через полгода эксплуатации на растущей базе.
❓ Частые вопросы
Как понять, что тормозит SQL Server, а не сама 1С?
Откройте Activity Monitor в SQL Server Management Studio: если сессии 1С массово стоят в статусе suspended, а процессор сервера баз данных загружен слабо, дело в блокировках или параллелизме, а не в коде 1С. Если очередь идёт на клиенте, а сервер СУБД простаивает, ищите проблему в сети или на рабочих местах.
Можно ли менять MAXDOP и cost threshold самостоятельно, без DBA?
Технически да — нужны только права sysadmin на инстансе SQL Server и Management Studio. Оба параметра меняются без остановки службы и применяются сразу. Но перед изменением стоит зафиксировать текущие показатели через Activity Monitor, чтобы потом сравнить результат, а не полагаться на ощущение «вроде стало быстрее».
Почему для 1С MAXDOP рекомендуют ставить 1, а не оставлять по умолчанию?
1С генерирует много коротких транзакций — проведение документов, запись регистров, а не длинные аналитические запросы. При MAXDOP = 0 один тяжёлый отчёт забирает несколько ядер на десятки секунд и создаёт очередь для остальных пользователей. MAXDOP = 1 отдаёт каждому запросу одно ядро и убирает эту конкуренцию.
Сколько стоит настроить SQL Server под 1С, если своего сисадмина нет?
Диагностика и настройка пяти ключевых параметров занимает обычно два-три часа работы специалиста. Сопровождение 1С и работы сисадмина стоят от 3800 руб/час, поэтому разовая настройка обходится в среднем в один рабочий день специалиста, включая замер производительности до и после изменений.
Как часто проверять настройки SQL Server после первой донастройки?
Возвращайтесь к проверке после каждого значимого события: обновления платформы 1С, обновления SQL Server, миграции базы на новый сервер или заметного роста числа пользователей. В спокойном режиме достаточно сверять параметры раз в полгода — они не «слетают» сами, но новые релизы иногда меняют рекомендации.
Или позвоните: +7 495 133-92-44 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

