Почему медленно открываются формы в 1С после перевода базы на MS SQL Server и как это исправить?

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

Перевод информационной базы 1С:Предприятие из файлового режима в клиент-серверный вариант работы (MS SQL Server) в ряде случаев сопровождается неожиданным падением скорости открытия форм документов, справочников и списков. Особенно ярко эта проблема проявляется на обычных формах (толстый клиент). Разберем причины такого поведения и рассмотрим комплекс практических шагов для локализации и устранения задержек.

1. Оптимизация программного кода: обработчики списков и серверные вызовы

В файловом режиме все данные обрабатываются локально в оперативной памяти клиентского компьютера. В клиент-серверной архитектуре каждый запрос к базе данных преобразуется в сетевой вызов (round-trip) между сервером 1С и СУБД. Если в форме списка или документа заложены неоптимальные алгоритмы, открытие и отрисовка замедляются в разы.

Проанализируем ключевые моменты в коде форм:

  1. Замена событий табличных полей: использование событий ПриВыводеСтроки и ПриАктивизацииСтроки для выполнения запросов к СУБД приводит к выполнению отдельного SQL-запроса на каждую выводимую строку списка. Перенесем получение дополнительных данных в пакетное событие ПриПолученииДанных. В этом обработчике данные запрашиваются одним запросом сразу для всего массива видимых строк.
  2. Проверка подписок и модулей объектов: при создании или открытии формы платформа инициализирует объект и выполняет код общих модулей и подписок на события. Проверим события ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления на наличие тяжелых неявных обращений через точку к реквизитам связанных объектов.
  3. Локализация задержки отключением кода: для проверки влияния алгоритмов откроем копию базы и последовательно закомментируем тело процедур ПриОткрытии, ПередОткрытием и модуля формы, чтобы изолировать платформенные задержки от прикладного кода.

2. Назначение принтера по умолчанию и расчет экранных метрик

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

Если принтером по умолчанию выбран недоступный сетевой принтер, перенаправленный принтер в RDP-сессии (Easy Print) или некорректно работающий драйвер, открытие каждой формы задерживается на 1–3 секунды из-за ожидания ответа подсистемы печати (таймаут Spooler).

Для решения проблемы назначим на сервере терминалов или на локальном компьютере пользователя виртуальный принтер (например, стандартный программный принтер Microsoft Print to PDF или Microsoft XPS Document Writer) устройством по умолчанию.

3. Настройка плана электропитания процессоров (CPU Power Management)

Базовая частота современных серверных процессоров (например, 2.0–2.2 ГГц) рассчитана на автоматический динамический разгон ядер. Если на сервере 1С или сервере СУБД активен режим энергосбережения «Сбалансированный» (Balanced), процессорные ядра не успевают мгновенно повысить частоту при выполнении коротких однопоточных операций отрисовки интерфейса и сериализации данных.

Выполним следующие системные настройки:

  1. Переведем схему управления питанием в операционной системе Windows Server в режим «Высокая производительность» (High Performance).
  2. В настройках BIOS/UEFI сервера переключим профиль энергопотребления в режим максимальной производительности, отключив агрессивные состояния энергосбережения ядер (C-States, C1E).
  3. В случае использования гипервизоров (VMware ESXi, Hyper-V) установим профиль питания хоста в режим High Performance и исключим переподписку (overcommit) процессорных ресурсов для виртуальных машин 1С и SQL.

4. Тонкая настройка MS SQL Server и параметров базы данных

При миграции информационной базы через файл выгрузки .dt в СУБД создаются пустые таблицы метаданных без накопленной статистики распределения данных. Проверим и скорректируем параметры сервера баз данных:

  1. Свойства базы данных: убедимся, что для рабочей базы 1С отключены опции AUTO_CLOSE и AUTO_SHRINK. Включение AUTO_CLOSE заставляет SQL Server выгружать базу из памяти после закрытия последнего подключения, что порождает паузы при открытии объектов.
  2. Конфигурация `tempdb`: перенесем файлы временной базы tempdb на быстрый SSD/NVMe-накопитель и разделим файл данных tempdb.mdf на несколько файлов одинакового размера (по числу физических ядер процессора, обычно от 4 до 8 файлов) для предотвращения блокировок страниц распределения памяти PFS и SGAM.
  3. Параллелизм: для клиент-серверных баз 1С установим параметр Cost Threshold for Parallelism (порог стоимости параллелизма) на уровень 30–50, чтобы оптимизатор СУБД не тратил ресурсы на построение параллельных планов выполнения для простых запросов инициализации форм.
  4. Обслуживание: настроим регулярное выполнение регламентных заданий: обновление статистик (UPDATE STATISTICS) со 100% сканированием и дефрагментацию/реиндексацию таблиц.

5. Очистка пользовательских настроек и кэша форм

Накопленные пользовательские настройки, автосохранение положения колонок и история открытых форм могут создавать задержки при сопоставлении сохраненного состояния с метаданными клиент-серверной базы.

Выполним очистку:

  1. В пользовательском режиме перейдем в меню администрирования настроек пользователей и очистим сохраненные персональные настройки для проблемных пользователей.
  2. Очистим локальный кэш конфигурации и кэш данных пользователя на клиентских машинах (каталоги %LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8).
  3. Убедимся, что запуск базы выполняется из списка стартера 1С, а не прямым вызовом толстого клиента с нестандартными параметрами командной строки, препятствующими кэшированию метаданных.

6. Проверка ограничений прав на уровне записей (RLS) и целостности структуры

Если в конфигурации включен механизм RLS, при построении элементов управления на форме платформа проверяет права доступа на все типы ссылок, связанные с полями ввода и таблицами. В клиент-серверном режиме сложные условия RLS генерируют тяжелые подзапросы к таблицам прав.

Проверим скорость работы под учетной записью с полными административными правами без ограничений RLS. Если задержки пропадают, требуется оптимизация шаблонов ограничений доступа в ролях конфигурации.

Также после загрузки базы из файла .dt выполним полное Тестирование и исправление информационной базы в конфигураторе с обязательным включением опций «Реструктуризация таблиц информационной базы» и «Пересчет итогов».

← На главную