При настройке сервера СУБД Microsoft SQL Server под нужды платформы 1С:Предприятие администраторы часто сталкиваются с вопросом правильной установки степени параллелизма запросов. Неверная конфигурация этих параметров может приводить к снижению общей производительности системы, появлению взаимоблокировок и нерациональному расходу ресурсов процессора. Разберем по шагам, как устроен параллелизм в SQL Server, почему при попытке задать значение 1 интерфейс может сбрасывать его на 128, и какие настройки считаются оптимальными для учетных систем 1С.
Проанализируем распространенную ошибку, возникающую при настройке через графическую консоль SQL Server Management Studio (SSMS). Если при попытке ввести значение 1 параметр автоматически меняется на 128, значит, изменение вносится не в ту опцию сервера:
0 (автоматический расчет).0 до числа доступных ядер.Для гарантированного применения настроек и исключения ошибок интерфейса воспользуемся системной хранимой процедурой sp_configure. Выполним следующий скрипт в среде Management Studio с правами администратора:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'max degree of parallelism', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'max degree of parallelism';
GO
Посмотрим на результат выполнения: процедура применит глобальное ограничение, запрещающее параллельное исполнение пользовательских запросов, и выведет текущее состояние конфигурации.
В официальных рекомендациях фирмы 1С и материалах ИТС содержится совет устанавливать MAXDOP = 1 для типовых сценариев работы. Выясним причину такого подхода:
CXPACKET.Полный запрет параллелизма (MAXDOP = 1) может замедлить выполнение регламентных ночных процедур, таких как перестроение индексов, сбор статистики или расчет тяжелых аналитических отчетов в базах данных крупного масштаба. В таких случаях рассмотрим сбалансированный вариант тонкой настройки:
MAXDOP = 4 или 8, исключая учет виртуальных потоков Hyper-Threading).5, что заставляет SQL Server распараллеливать даже легкие запросы. Для систем на платформе 1С этот параметр рекомендуется повысить до диапазона 25–50. В таком случае простые транзакции будут выполняться строго на одном ядре, а параллелизм включится только для действительно тяжелых выборок.Применим комплексную настройку с помощью T-SQL:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'cost threshold for parallelism', 25;
GO
sp_configure 'max degree of parallelism', 4;
GO
RECONFIGURE WITH OVERRIDE;
GO
Начиная с версии SQL Server 2016 появилась возможность настраивать параллелизм индивидуально для каждой базы, не затрагивая настройки всего экземпляра сервера. Разберем выполнение команды переопределения конфигурации уровня базы данных:
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1;
Если для основной учетной базы выставлено значение MAXDOP = 1, регламентные ночные скрипты обслуживания (дефрагментацию и переиндексацию таблиц) можно ускорить, принудительно задавая хинт параллелизма внутри скрипта обслуживания индекса:
ALTER INDEX ALL ON dbo._Document123 REBUILD WITH (MAXDOP = 8);
Таким образом, базовым и наиболее безопасным решением для большинства баз 1С:Предприятие является установка MAXDOP = 1, а для высоконагруженных систем с тяжелой аналитикой — расчет значения по NUMA-узлам с обязательным увеличением порога cost threshold for parallelism.