К статье
Практический материал

Разработка и Конфигурация · 12 мин

Профайлер 1С: что это такое и как с его помощью найти узкие места в коде

Что такое профайлер в 1С, как включить замер производительности, читать отчёт, находить узкие места в коде и запросах и какие есть альтернативы.

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

Главная ценность профайлера в том, что он убирает гадание. Когда отчёт формируется 40 секунд, интуиция подсказывает «наверное, тяжёлый запрос», а замер показывает, что 90% времени ушло на обращение к данным внутри цикла или на повторный вызов функции, которую можно было вычислить один раз. Профайлер превращает оптимизацию из искусства в инженерную задачу: сначала измеряем, потом правим, потом измеряем снова.

Инструмент доступен в конфигураторе начиная с платформы 8.3 и работает как для файловых, так и для клиент-серверных баз. Для клиент-серверного режима замер выполняется на стороне сервера, что особенно важно: именно там исполняется основная часть прикладного кода и запросов к СУБД.

Что именно измеряет профайлер и как это работает

Профайлер работает по принципу инструментирования: при включённом замере платформа фиксирует моменты входа и выхода из каждой строки исполняемого кода. По этим меткам строится статистика — сколько раз выполнялась строка, сколько времени заняло её суммарное выполнение и какова её доля в общем времени сеанса. Отдельно учитываются вызовы запросов: для них видно время исполнения и текст запроса.

Отчёт профайлера содержит несколько ключевых колонок. «Время» показывает суммарную длительность выполнения строки с учётом всех вложенных вызовов, «Время (чистое)» — только собственное время строки без вложенных вызовов, «Количество вызовов» — сколько раз строка исполнялась. Именно сочетание этих трёх показателей позволяет отличить «один тяжёлый вызов» от «миллиона дешёвых вызовов, которые в сумме съели всё».

Важно понимать, что замер сам по себе добавляет накладные расходы: код под профайлером выполняется медленнее, чем в обычном режиме. Поэтому абсолютные цифры времени в отчёте не равны реальному времени работы — ценность представляют относительные доли. Если строка занимает 60% времени замера, она с высокой вероятностью является главным узким местом и в реальной эксплуатации.

Как включить замер производительности: пошаговый порядок

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

Порядок запуска замера
  1. 1
    Откройте конфигуратор и запустите отладку (F5) или подключитесь к уже работающему сеансу через меню «Отладка — Подключение».
  2. 2
    В меню «Отладка» выберите пункт «Замер производительности» или нажмите соответствующую кнопку на панели — индикатор замера активируется.
  3. 3
    Перейдите в пользовательский сеанс 1С:Предприятия и выполните операцию, которая работает медленно: откройте отчёт, проведите документ, выполните обработку.
  4. 4
    Вернитесь в конфигуратор и повторно нажмите «Замер производительности», чтобы остановить замер — платформа построит отчёт.
  5. 5
    Изучите отчёт: отсортируйте строки по колонке времени и найдите участки с максимальной долей.
  6. 6
    После анализа и правки кода повторите замер и сравните распределение времени — доля исправленного участка должна заметно снизиться.

Если нужно замерить код, исполняемый на сервере в клиент-серверном варианте, убедитесь, что отладка на сервере разрешена (параметр запуска сервера 1С с ключом отладки) и что конфигуратор подключён именно к серверному сеансу. Без этого в отчёт попадёт только клиентский код, а самая важная часть останется «за кадром».

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

Как читать отчёт профайлера и находить узкие места

Отчёт открывается в виде таблицы с иерархией по модулям, процедурам и строкам. Первый приём анализа — отсортировать строки по убыванию чистого времени. Строки с максимальным чистым временем — это места, где процессор реально «застревает»: ожидание ответа СУБД, тяжёлые вычисления, обращения к данным.

Второй приём — анализ количества вызовов. Классическая проблема прикладного кода 1С — обращение к базе внутри цикла: запрос или метод получения объекта вызывается для каждой строки таблицы. По отдельности вызов дешёвый, но при тысячах итераций суммарное время становится катастрофическим. В отчёте это видно как строка с огромным числом вызовов и большим суммарным временем.

Третий приём — просмотр текстов запросов. Профайлер показывает, какие запросы выполнялись и сколько времени занял каждый. Если один запрос доминирует, дальнейший анализ нужно вести уже на уровне плана запроса средствами СУБД: не хватает индекса, сканирование таблицы вместо поиска по индексу, неоптимальные соединения виртуальных таблиц.

Высокое чистое время одной строкиКонцентрированное узкое место

Что делает строка: запрос, обращение к данным, тяжёлое вычисление

Огромное число вызовов при малом времени каждогоОбращение к данным в цикле

Можно ли вынести запрос из цикла и получить данные одним пакетом

Доминирует один запросПроблема на уровне СУБД

План запроса, индексы, использование виртуальных таблиц

Время распределено равномерноПроблема не в коде, а в объёме данных или инфраструктуре

Нагрузку на сервер, размер выборки, сетевые задержки

Типичные узкие места, которые выявляет профайлер

Практика показывает, что в прикладном коде 1С повторяются одни и те же антипаттерны. Знание этого списка ускоряет анализ: увидев характерную картину в отчёте, можно сразу проверить соответствующий сценарий.

Наиболее частая причина медленной работы — запросы и обращения к объектам внутри циклов. Второе место занимают виртуальные таблицы регистров с неоптимальными условиями: отбор по неиндексированным полям, соединение нескольких виртуальных таблиц, отсутствие параметров периода. Третья группа проблем — избыточные вызовы сервера с клиента: каждый серверный вызов в тонком или веб-клиенте — это сетевое обращение, и сотни таких вызовов складываются в секунды ожидания.

Типичные ошибки при работе с профайлером
01
Оптимизация без замера: правится код, который кажется медленным, а реальное узкое место остаётся нетронутым — время операции почти не меняется.
02
Выводы по абсолютному времени замера: под профайлером код работает медленнее, сравнивать нужно относительные доли, а не секунды.
03
Замер на пустой тестовой базе: на двух документах всё летает, проблемы проявляются только на объёмах, близких к рабочим.
04
Одиночный замер: случайная нагрузка на сервер искажает картину, замер стоит повторить 2–3 раза и сравнить.
05
Игнорирование серверного контекста: замер только клиентского кода в клиент-серверной базе не показывает главную часть нагрузки.

Как проверить результат оптимизации

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

При этом важно зафиксировать условия: та же база, тот же объём данных, та же операция с теми же параметрами. Иначе сравнение некорректно — улучшение может быть следствием не правки, а меньшей выборки данных.

Контрольные точки

Как проверить, что оптимизация сработала

Доля исправленного участка в новом замере
Норма

Доля заметно снизилась, время перераспределилось

Тревожный признак

Доля та же — правка не затронула узкое место

Время операции в пользовательском режиме без профайлера
Норма

Операция выполняется ощутимо быстрее при тех же данных

Тревожный признак

Время не изменилось — улучшение только «на бумаге»

Поведение на рабочих объёмах данных
Норма

Ускорение сохраняется на полном объёме

Тревожный признак

На тестовой базе быстро, на рабочей — по-прежнему медленно

Результат операции
Норма

Данные и итоги операции идентичны до и после правки

Тревожный признак

Изменились итоги — оптимизация сломала логику

Ограничения профайлера и альтернативные инструменты

Профайлер показывает только прикладной код и запросы, исполненные в замеренном сеансе. Он не отвечает на вопросы о состоянии СУБД в целом: блокировки, ожидания, нагрузку от других сеансов, фрагментацию индексов. Если замер показывает, что запрос медленный, но код корректен, следующий шаг — инструменты СУБД: план запроса, мониторинг активных сессий, анализ ожиданий.

Для комплексной диагностики производительности в экосистеме 1С используется Центр управления производительностью (ЦУП) — он собирает статистику по всей системе, показывает длительные вызовы, взаимоблокировки и узкие места на уровне СУБД. Технологический журнал платформы полезен для поиска взаимоблокировок и длительных запросов в продуктивной среде, где запуск отладки невозможен. Профайлер же остаётся основным инструментом разработчика на этапе точечной оптимизации конкретной операции.

Чем замерять в разных ситуациях

Профайлер конфигуратора

Точечная оптимизация конкретной операции на этапе разработки. Ограничение: нужен запуск под отладкой, не для продуктивной среды.

Технологический журнал

Поиск длительных запросов и блокировок в работающей системе. Ограничение: требует настройки и анализа большого объёма логов.

ЦУП

Постоянный мониторинг производительности всей системы. Ограничение: требует развёртывания и сопровождения.

Средства СУБД (план запроса, мониторинг)

Диагностика медленных запросов, индексов и ожиданий. Ограничение: нужны компетенции по конкретной СУБД.

Когда профайлер не нужен и что делать вместо этого

Не каждая проблема производительности решается профайлером. Если система медленная в целом, а не в конкретной операции, начинать стоит с инфраструктуры: загрузка сервера СУБД, дисковая подсистема, сеть, актуальность статистики и индексов. Профайлер в такой ситуации покажет лишь, что «всё медленно равномерно», что само по себе является диагностическим признаком системной проблемы.

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

Маршрут решения

Как выбрать подход к диагностике

Медленно работает одна конкретная операция или отчётИспользуйте профайлер: замерьте операцию и найдите доминирующие строки кода или запрос
Медленно всё и у всех пользователейПроверяйте инфраструктуру и СУБД: нагрузку, диски, индексы, статистику
Операция «зависает», а не работает медленноИщите блокировки через технологический журнал и мониторинг СУБД
Проблема в продуктивной среде, где отладку запускать нельзяНастройте технологический журнал на сбор длительных событий и анализируйте его

Частые вопросы о профайлере 1С

Можно ли пользоваться профайлером без навыков программирования?

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

Почему время в отчёте профайлера не совпадает с реальным временем операции?

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

Работает ли профайлер в файловой базе?

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

Можно ли замерить работу фонового задания?

Да. Запустите фоновое задание, затем в конфигураторе откройте окно подключения отладки, найдите сеанс фонового задания в списке, подключитесь к нему и включите замер. Это стандартный способ диагностики медленных регламентных операций, обменов и обработок, выполняемых в фоне.

Что делать, если профайлер показывает, что всё время уходит на один запрос?

Скопируйте текст запроса из отчёта и анализируйте его на уровне СУБД: посмотрите план выполнения, проверьте наличие подходящих индексов, условия отбора виртуальных таблиц и соединения. Частые причины — сканирование таблицы вместо поиска по индексу и отборы по неиндексированным полям. Дальнейшая оптимизация ведётся переписыванием запроса или настройкой индексов.

Итог

Что важно запомнить

Профайлер 1С — встроенный инструмент замера производительности в конфигураторе, работающий через отладку. Он показывает время, число вызовов и долю каждой строки кода и запроса. Сравнивайте относительные доли, а не абсолютные секунды, замеряйте на реальных объёмах данных и всегда подтверждайте оптимизацию повторным замером. Для системных проблем и продуктивной среды используйте технологический журнал, ЦУП и средства СУБД.