Как повысить производительность 1С на MS SQL Server и устранить зависания системы

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

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

Анализ настроек параллелизма SQL Server

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

Разберем параметр Max Degree of Parallelism (MAXDOP). Для баз данных 1С эксперты рекомендуют ограничивать этот параметр. Если на сервере до 8 ядер, установите значение 1. Если ядер больше, можно попробовать установить значение от 2 до 4, но во многих случаях значение 1 (отключение параллелизма для одного запроса) является наиболее стабильным решением для предотвращения ожидания на ресурсах CXPACKET.

Рассмотрим, как изменить этот параметр через T-SQL:


EXEC sys.sp_configure N'show advanced options', N'1';
RECONFIGURE;
EXEC sys.sp_configure N'max degree of parallelism', N'1';
RECONFIGURE;

Помимо MAXDOP, следует обратить внимание на Cost Threshold for Parallelism. По умолчанию он равен 5, что слишком мало для современных серверов. Рекомендуется увеличить это значение до 50, чтобы SQL Server не пытался распараллеливать даже самые простые запросы.

Настройка памяти и флагов трассировки

Проанализируем распределение оперативной памяти. Важно не оставлять параметр Maximum server memory в значении по умолчанию. SQL Server — «жадная» система, она заберет всю доступную память, что может вызвать свопинг (сброс данных на диск) операционной системы или процессов сервера 1С.

Рекомендация: Оставьте операционной системе и серверу 1С (если они на одном физическом сервере) минимум 4–8 ГБ оперативной памяти, а остальное отдайте под SQL Server. Это позволит избежать конкуренции за ресурсы.

Также для оптимизации работы 1С критически важно включить определенные флаги трассировки. Рассмотрим наиболее важные из них:

  1. Флаг 1117: Заставляет все файлы в одной файловой группе tempdb расти одновременно. Это предотвращает перекосы в нагрузке на разные файлы БД.
  2. Флаг 1118: Позволяет выделять полные экстенты (extents) вместо смешанных, что снижает конкуренцию за системные страницы в tempdb.
  3. Флаг 2371: Изменяет алгоритм автоматического обновления статистики. В новых версиях SQL Server (начиная с 2016) этот механизм работает по умолчанию, но для старых версий его включение обязательно для корректной работы оптимизатора запросов на больших таблицах.

Пример включения флагов трассировки:


DBCC TRACEON (1117, 1118, 2371, -1);
-- Параметр -1 означает глобальное включение для всех сессий

Оптимизация базы данных tempdb

Выясним причину, почему tempdb часто становится узким местом. 1С активно использует временные таблицы. Если tempdb состоит из одного файла, возникает очередь к заголовку этого файла. Проанализируем количество ядер процессора: рекомендуется создавать количество файлов данных tempdb, равное числу логических ядер (но не более 8, если это не дает дальнейшего прироста).

Посмотрим на правила настройки файлов tempdb:

Регламентные задания для обслуживания базы данных 1С

Для поддержания стабильной скорости работы необходимо настроить регулярное обслуживание индексов и статистики. Рассмотрим основные этапы:

1. Обновление статистики (Update Statistics)

Оптимизатор SQL Server строит план выполнения запроса на основе данных о распределении значений в таблицах. Если статистика устарела, SQL может выбрать крайне неэффективный план (например, Index Scan вместо Index Seek). Для 1С рекомендуется обновлять статистику ежедневно, а для самых нагруженных таблиц — несколько раз в день.

2. Дефрагментация индексов (Rebuild/Reorganize)

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

Ниже представлен пример скрипта для ручного запуска обновления статистики во всей базе данных:


EXEC sp_updatestats;

Однако для более тонкой настройки лучше использовать скрипты Ола Халленгрена или стандартные Maintenance Plans. Проанализируем ситуацию: если ваша база данных работает в режиме Simple (простая модель восстановления), не забывайте также очищать процедурный кэш после массового обновления статистики, чтобы планы запросов перестроились на основе новых данных:


DBCC FREEPROCCACHE;

Настройка кластера серверов 1С

Работа со стороны SQL Server — это лишь половина дела. Посмотрим на настройки самого сервера 1С. Для оптимизации потребления ресурсов в консоли администрирования кластера выполните следующие действия:

  1. Установите параметр Количество рабочих процессов в значение, обеспечивающее балансировку нагрузки (обычно 1 процесс на каждые 15-20 пользователей).
  2. Настройте Безопасный расход памяти для рабочих процессов. Это предотвратит «раздувание» процессов rphost и падение сервера из-за нехватки ОЗУ.
  3. Отрегулируйте интервал перезапуска рабочих процессов. Рекомендуется перезапускать процессы раз в сутки в период наименьшей активности (ночью), чтобы освободить накопленную утечку памяти.

Разберем параметр Параметры блокировок. Для конфигураций на управляемых формах обязательно должен быть установлен режим Управляемый. Это минимизирует количество блокировок на уровне SQL Server, перенося логику управления доступом на уровень приложения 1С.

Энергопотребление: важный нюанс

Выясним еще одну неочевидную причину медленной работы. В ОС Windows Server по умолчанию часто включена схема управления электропитанием «Сбалансированная». Это заставляет процессор снижать частоту в моменты простоя. Проблема в том, что 1С генерирует короткие, но интенсивные всплески нагрузки, и процессор просто не успевает «проснуться». Это добавляет значительные задержки.

Что нужно сделать: Переключите схему питания сервера в режим High Performance (Высокая производительность). Это даст мгновенный прирост производительности в 10–15% без каких-либо изменений в коде.

Заключение

Мы рассмотрели комплексный подход к оптимизации 1С. Стабильная работа системы складывается из правильной настройки оборудования, конфигурации SQL Server (параллелизм, флаги трассировки, память), регулярного обслуживания индексов и грамотной настройки кластера 1С. Проанализируйте текущее состояние вашей системы, примените описанные шаги, и вы заметите существенное снижение времени отклика программы и повышение комфорта работы пользователей.

← На главную