В процессе эксплуатации систем на базе 1С:Предприятие 8.3 многие администраторы сталкиваются с проблемой критической загрузки ресурсов сервера баз данных. Чаще всего это проявляется в виде 100% потребления процессорного времени процессом sqlservr.exe, что приводит к значительным задержкам при проведении документов и формировании отчетов. В рамках данной статьи мы подробно разберем, как правильно настроить среду MS SQL Server для обеспечения максимального быстродействия 1С.
Одной из наиболее распространенных причин деградации производительности является некорректная настройка параллелизма. По умолчанию MS SQL Server может пытаться выполнять один запрос, задействуя все доступные ядра процессора. Для специфики запросов 1С это часто оказывается контрпродуктивным. Проанализируем, почему это происходит: сложные запросы 1С при распараллеливании могут вызывать ожидания типа CXPACKET, что замедляет общее время выполнения операции.
Для оптимизации ситуации выполним следующие шаги:
Max Degree of Parallelism равным 1 (для баз с большим количеством пользователей иногда рекомендуют значения 2 или 4, но 1 является наиболее безопасным стартовым вариантом для 1С).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 часто недостаточно. Разберем по шагам создание регламентного задания:
Для более тонкой настройки можно использовать скрипт обновления статистик только для тех таблиц, которые изменились более чем на 5-10%. Рассмотрим пример кода для принудительного обновления статистики во всей базе данных:
USE [Имя_Вашей_Базы];
GO
EXEC sp_updatestats;
GO
При активной записи данных в 1С (проведении документов) индексы таблиц быстро фрагментируются. Это замедляет операции чтения. Разберем два метода обслуживания индексов:
Рекомендуем настроить еженедельное перестроение (rebuild) индексов для таблиц с фрагментацией более 30% и ежедневную реорганизацию для фрагментации от 5% до 30%.
Система 1С очень активно использует системную базу данных tempdb. Чтобы ускорить работу с ней, проанализируем необходимость включения специальных флагов трассировки. Флаг T1118 помогает избежать конкуренции за распределение страниц в tempdb, заставляя сервер выделять сразу полные экстенты.
В современных версиях SQL Server (начиная с 2016) многие из этих параметров уже включены по умолчанию, но для более старых версий их нужно прописывать в параметрах запуска службы SQL Server:
-T1118 и -T1222 (последний помогает записывать подробную информацию о взаимоблокировках в лог).Подводя итоги, мы проанализировали основные узкие места при взаимодействии 1С и SQL Server. Правильная настройка MAXDOP, жесткое лимитирование оперативной памяти и регулярное выполнение планов обслуживания (статистика и индексы) позволяют в большинстве случаев снизить нагрузку на процессор в 2-3 раза и значительно повысить комфорт работы пользователей в программе.
Помните, что каждая база индивидуальна, и после внесения изменений необходимо проводить мониторинг производительности с помощью Performance Monitor или встроенных средств 1С (Центр управления производительностью).