Как устранить высокую загрузку процессора SQL Server и ускорить работу 1С:Предприятие 8.3?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе эксплуатации систем на базе 1С:Предприятие 8.3 многие администраторы сталкиваются с проблемой критической загрузки ресурсов сервера баз данных. Чаще всего это проявляется в виде 100% потребления процессорного времени процессом sqlservr.exe, что приводит к значительным задержкам при проведении документов и формировании отчетов. В рамках данной статьи мы подробно разберем, как правильно настроить среду MS SQL Server для обеспечения максимального быстродействия 1С.

Анализ параметра Max Degree of Parallelism (MAXDOP)

Одной из наиболее распространенных причин деградации производительности является некорректная настройка параллелизма. По умолчанию MS SQL Server может пытаться выполнять один запрос, задействуя все доступные ядра процессора. Для специфики запросов 1С это часто оказывается контрпродуктивным. Проанализируем, почему это происходит: сложные запросы 1С при распараллеливании могут вызывать ожидания типа CXPACKET, что замедляет общее время выполнения операции.

Для оптимизации ситуации выполним следующие шаги:

  1. Откроем SQL Server Management Studio (SSMS).
  2. Перейдем в свойства сервера, в раздел Advanced.
  3. Установим значение параметра Max Degree of Parallelism равным 1 (для баз с большим количеством пользователей иногда рекомендуют значения 2 или 4, но 1 является наиболее безопасным стартовым вариантом для 1С).
  4. Установим Cost Threshold for Parallelism в значение 50, чтобы сервер не пытался распараллеливать мелкие запросы.

Рассмотрим пример команды для изменения этих настроек через скрипт:


EXEC sys.sp_configure N'show advanced options', N'1';
RECONFIGURE WITH OVERRIDE;
EXEC sys.sp_configure N'max degree of parallelism', N'1';
EXEC sys.sp_configure N'cost threshold for parallelism', N'50';
RECONFIGURE WITH OVERRIDE;

Настройка распределения оперативной памяти

Разберем ситуацию, когда SQL Server поглощает всю доступную оперативную память, не оставляя ресурсов для работы самой операционной системы и рабочего процесса 1С rphost. Это может привести к чрезмерному использованию файла подкачки (swapping) и катастрофическому падению скорости.

Выясним причину: по умолчанию лимит памяти в SQL Server установлен на очень высокое значение. Нам необходимо принудительно ограничить аппетит сервера баз данных. Рекомендуется оставлять операционной системе и серверу приложений 1С (если он установлен на том же физическом сервере) не менее 4-8 ГБ оперативной памяти свободными.

Посмотрим на пример расчета: если на сервере 64 ГБ ОЗУ, то для Max Server Memory целесообразно установить значение в районе 52-56 ГБ.

Регламентное обслуживание: обновление статистики

Одной из критических задач является поддержание актуальности статистик. Статистика — это данные, на основе которых оптимизатор SQL Server строит план выполнения запроса. Если статистика устарела, сервер может выбрать крайне неэффективный путь получения данных, что и вызывает зависания.

Проанализируем механизм: 1С постоянно создает и удаляет временные таблицы, активно меняет данные в регистрах. Стандартных механизмов автообновления статистики SQL часто недостаточно. Разберем по шагам создание регламентного задания:

  1. В SSMS создадим новый Maintenance Plan.
  2. Добавим задачу Update Statistics.
  3. Настроим расписание на ежедневное выполнение в часы минимальной нагрузки (ночью).

Для более тонкой настройки можно использовать скрипт обновления статистик только для тех таблиц, которые изменились более чем на 5-10%. Рассмотрим пример кода для принудительного обновления статистики во всей базе данных:


USE [Имя_Вашей_Базы];
GO
EXEC sp_updatestats;
GO

Борьба с фрагментацией индексов

При активной записи данных в 1С (проведении документов) индексы таблиц быстро фрагментируются. Это замедляет операции чтения. Разберем два метода обслуживания индексов:

  1. Reorganize Index: легкая операция, которую можно выполнять даже во время работы пользователей. Она "причесывает" страницы индекса.
  2. Rebuild Index: тяжелая операция, которая полностью пересоздает индекс. Требует много ресурсов и может блокировать таблицы (если не используется версия Enterprise с опцией Online).

Рекомендуем настроить еженедельное перестроение (rebuild) индексов для таблиц с фрагментацией более 30% и ежедневную реорганизацию для фрагментации от 5% до 30%.

Использование флагов трассировки для оптимизации TempDB

Система 1С очень активно использует системную базу данных tempdb. Чтобы ускорить работу с ней, проанализируем необходимость включения специальных флагов трассировки. Флаг T1118 помогает избежать конкуренции за распределение страниц в tempdb, заставляя сервер выделять сразу полные экстенты.

В современных версиях SQL Server (начиная с 2016) многие из этих параметров уже включены по умолчанию, но для более старых версий их нужно прописывать в параметрах запуска службы SQL Server:

  1. Откройте SQL Server Configuration Manager.
  2. В свойствах службы SQL Server перейдите на вкладку Startup Parameters.
  3. Добавьте параметры -T1118 и -T1222 (последний помогает записывать подробную информацию о взаимоблокировках в лог).

Итоги настройки

Подводя итоги, мы проанализировали основные узкие места при взаимодействии 1С и SQL Server. Правильная настройка MAXDOP, жесткое лимитирование оперативной памяти и регулярное выполнение планов обслуживания (статистика и индексы) позволяют в большинстве случаев снизить нагрузку на процессор в 2-3 раза и значительно повысить комфорт работы пользователей в программе.

Помните, что каждая база индивидуальна, и после внесения изменений необходимо проводить мониторинг производительности с помощью Performance Monitor или встроенных средств 1С (Центр управления производительностью).

← На главную