Рассмотрим распространенную и крайне неприятную ситуацию: процесс sqlservr.exe на сервере начинает потреблять 70-100% ресурсов центрального процессора. Такая пиковая нагрузка может длиться по 10-15 минут, в результате чего система зависает, а у пользователей 1С начинают вылетать сеансы с ошибками или по таймауту. Разберем по шагам, как локализовать проблему, найти «виновника» и какие настройки СУБД и 1С помогут вернуть систему к нормальной работе.
Для начала выясним причину — какой именно запрос или процесс съедает ресурсы ЦП. Проанализируем доступные инструменты на уровне СУБД и 1С:
sys.dm_exec_query_stats в соединении с sys.dm_exec_sql_text, мы сможем моментально получить ТОП тяжелых запросов, затративших наибольшее процессорное время.DBMSSQL, EXCP и CALL и ограничением по длительности (например, долгие запросы), мы получим точную строку кода и имя модуля в конфигурации 1С, откуда пришел тяжелый запрос. Текст сырого SQL-запроса зачастую слишком сложен для обратной расшифровки, а ТЖ дает прямой ответ.Если мы нашли проблемный запрос, проанализируем, почему именно он вызывает перегрузку. Рассмотрим самые частые причины в связке 1С и MS SQL Server:
Параллелизм выполнения запросов. По умолчанию SQL Server пытается распараллелить выполнение одного тяжелого запроса на все доступные ядра процессора (возникают ожидания типа CXPACKET). В результате один неоптимальный отчет или "кривой" запрос (например, анализ субконто за весь период без отборов) забирает 100% ЦП, полностью блокируя работу остальных пользователей.
Отсутствие необходимых индексов. Если 1С формирует запрос по полям, для которых в базе нет индексов, SQL Server вынужден выполнять полное сканирование таблиц (Table Scan или Clustered Index Scan). Перебор миллионов записей вызывает огромную нагрузку на процессор и дисковую подсистему.
Проблема Parameter Sniffing. СУБД кэширует план выполнения самого первого запроса под конкретные параметры. Когда запрос вызывается повторно с другими параметрами (для которых этот план неоптимален), сервер все равно использует старый алгоритм, что приводит к избыточным логическим чтениям и всплеску нагрузки.
Нехватка оперативной памяти (Buffer Pool Thrashing). Если SQL серверу не ограничить память, он может начать агрессивно забирать её у операционной системы. Когда памяти критически не хватает, начинается непрерывный сброс данных из кэша на диск и обратное их чтение. Процессор при этом загружается системными прерываниями и управлением памятью.
Рассмотрим практические шаги, которые необходимо предпринять для стабилизации работы сервера:
Cost Threshold for Parallelism (например, до 50).Max Server Memory. Обязательно оставьте операционной системе и другим службам минимум 4–8 ГБ оперативной памяти (в зависимости от общего объема ОЗУ на сервере).Применяя данные методы диагностики и базовые правила настройки связки MS SQL Server и 1С, вы сможете не только быстро найти причину 70-100% загрузки процессора, но и предотвратить подобные проблемы в будущем, обеспечив пользователям стабильную работу без «вылетов».