Почему зависает запрос к базе данных после переезда на новый сервер?

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

Переезд на новый сервер часто сопровождается непредвиденными проблемами с производительностью. Если запрос к таблице, который раньше работал быстро, внезапно начинает «зависать» на этапе Выполнить().Выгрузить(), важно проанализировать не только сам SQL-код, но и архитектурные настройки взаимодействия компонентов системы.

Этап 1: Оптимизация текста запроса

Первое, на что стоит обратить внимание — это использование конструкции ВЫБРАТЬ *. В 1С это считается плохой практикой, так как сервер вынужден выгружать все поля, включая тяжелые типы данных, такие как ХранилищеЗначений или неограниченные строки.

Рассмотрим, как изменить подход к написанию кода:


// Вместо неоптимального запроса
Запрос.Текст = \"ВЫБРАТЬ * ИЗ Справочник.Контрагенты\";

// Используйте только необходимые поля
Запрос.Текст = \"ВЫБРАТЬ 
    Контрагенты.Ссылка, 
    Контрагенты.Наименование, 
    Контрагенты.Код 
ИЗ Справочник.Контрагенты КАК Контрагенты\";

Если выборка определенного подмножества полей дает существенный прирост, значит, проблема кроется в объемах данных, передаваемых из SQL Server в rphost.

Этап 2: Диагностика взаимодействия 1С и SQL

Если запрос в SQL Server Management Studio отрабатывает мгновенно, а в коде 1С «висит», значит, задержка происходит на этапе передачи данных или их обработки рабочим процессом rphost. Проанализируем возможные причины:

  1. Переполнение памяти rphost: Проверьте в мониторе ресурсов, не уходит ли процесс в своп (ошибки страниц). При большом количестве оперативной памяти (например, 512 ГБ) важно правильно настроить параметры кластера 1С, чтобы рабочие процессы имели доступ к необходимому объему ресурсов.
  2. Настройки протоколов: Убедитесь, что для связи между SQL Server и Сервером 1С используется Shared Memory, если они расположены на одной машине.
  3. Настройки параллелизма MAXDOP: Для 1С рекомендуется значение 1 или подбор оптимального значения для многоядерных систем. Проверьте параметр Cost Threshold for Parallelism — если он слишком низкий, SQL пытается распараллелить даже простые запросы, что ведет к деградации производительности.

Этап 3: Техническое обслуживание базы данных

После миграции базы данных необходимо выполнить комплекс регламентных процедур. Даже если данные перенесены корректно, план выполнения запросов может быть неоптимальным.

Разберем необходимые действия:

Этап 4: Мониторинг «узких мест» через Технологический журнал

Если вы видите ошибки вида Ping direction statistics, это может указывать на проблемы с тайм-аутами при обмене данными между клиентом и сервером. Настройте Технологический журнал для фиксации событий, длительность которых превышает установленный порог (например, 5-10 секунд).

Не используйте SQL Profiler для постоянного мониторинга, так как он сам по себе создает значительную нагрузку. Используйте Extended Events — они позволяют настроить событийный перехват с сохранением XML-планов выполнения запросов, что даст понимание того, на какой операции происходит задержка: чтение данных, сортировка или сериализация объектов.

Итоговый алгоритм действий

Для решения проблемы рекомендуем придерживаться следующего плана:

  1. Исключите ВЫБРАТЬ * — это позволит снизить нагрузку на сериализацию данных.
  2. Проверьте TempDB — убедитесь, что файлы данных распределены по ядрам процессора и размещены на быстрых SSD-дисках.
  3. Анализ rphost — мониторьте счетчики производительности процесса в момент выполнения зависающего кода.
  4. Реиндексация и статистика — примените методики обслуживания баз данных, рекомендуемые на ИТС.
  5. Изоляция проблемы — попробуйте выполнить аналогичный запрос без полей с неограниченной длиной или ХранилищемЗначений. Если проблема исчезла, значит, 1С тратит ресурсы на разбор этих типов данных.

Помните, что при смене оборудования часто требуется «тюнинг» самой СУБД под конкретную архитектуру процессоров и объемы оперативной памяти. Работайте в связке с системным администратором, фокусируясь на счетчиках производительности дисковой подсистемы и ошибках страниц памяти в момент выполнения запроса.

← На главную