Для чего нужен замер производительности?
В платформе есть множество удобных инструментов, повышающих эффективность работы разработчика прикладных решений 1С. Один из таких инструментов – «Замер производительности». Грамотный разработчик понимает, насколько важна производительность 1С, ценность быстрой работы разрабатываемых им решений. И конечно же, он должен уметь выявлять и быстро находить проблемные места в коде.
Основная функция инструмента понятна из названия – «замер производительности» исполняемого кода. С помощью отладчика запускается исполняемый код и формируется таблица результатов замера, с которой можно удобно оперировать полученными результатами - переходить в нужные места кода, сортировать по количеству и времени исполнения и находить самые проблемные строки.
Еще одна полезная «фишка». Замер производительности крайне прост в использовании и удобен как для своей основной функции, так и для поиска вызываемых мест кода. Например, иногда бывает сложно найти, в каком именно месте проходит проверка на ошибку, или нужно найти места вызова какой-то процедуры. Для этого можно запустить замер, собрать стек вызовов всего исполняемого кода и поиском найти нужную строку коду.
Например, появилось вот такое непонятное сообщение, но сходу не удалось найти место кода и понять причина отказа. Можно запустить замер и по таблице замера найти исполняемое место. Это намного быстрее, чем искать по всей конфигурации.
Как запускать замеры?
Шаг 1. Запустить базу 1С в режиме отладки. Запускаем базу в режиме конфигуратора, нажимаем «F5» (или кнопку «Начать отладку») и запускаем пользовательский режим для отладки.
Также можно подключать отладку уже запущенных сеансов. И даже подключаться к фоновым заданиям или сервисам.
Для клиент-серверных приложений важно, чтобы была включена отладка на сервере, чтобы можно было собирать и серверные вызовы тоже.
Шаг 2. Открыть нужное место в системе для запуска исполняемой команды. Не нужно включать отладку до момента запуска команды, иначе в стек замера попадут ненужные строки.
Шаг 3. Нажать кнопку замера производительности. Кнопка появляется при включении отладки.
Шаг 4. Выполнить команду и дождаться завершения. После отжать кнопку замера и получить таблицу результатов замера.
Шаг 5. 1С оценка производительности и устранение проблемных мест.
Хотелось бы рекомендовать разработчикам делать тест производительности 1С, своих (да и чужих) решений не откладывая до времени, когда это станет проблемой пользователей. Собрать замеры и просмотреть результат не так уж и долго, а вот эффект может оказаться крайне положительным.
Пример анализа производительности
Имеем обработку (условно), которая выводит простую таблицу с суммой движений по 60 счету по документам поступления товаров и услуг.
Когда ее разработали, документов у компании формировалось немного и особо не заморачивались с кодом. Программист на скорую руку набросал бухгалтеру такую обработку и забыл про нее. Но вот прошло несколько лет и документов стало по несколько тысяч в месяц и теперь бухгалтер жалуется, что скорость работы 1С оставляет желать лучшего. На компьютере бухгалтера «крутится» по несколько минут.
Запускаем замер производительности и сразу видно проблему – запрос в цикле.
Для выявления проблемных мест достаточно отсортировать результат по времени выполнения или проценту от общего времени выполнения.
Стоит отметить, что количество вызовов кода иногда тоже является проблемой, и нужно поработать в сторону уменьшения итераций цикла. Например, сделать нужный отбор в запросе до начала обработки результата. Это может усложнить запрос, зато ускорит работу команды.
Нижние итоги показывают сумму показателя по выделенной строке. Поэтому если нужно увидеть общее время работы команды, достаточно выделить все строки (Ctrl+A).
Проблему нашли и понятно, что с ней делать. Переносим запрос в цикле в один собирательный запрос и выводим его результат в таблицу.
Снова делаем замер и вот результат:
Проблема решена, обработка отработала практически моментально.
Конечно, этот пример условный, но он показывает, как легко и быстро с помощью этого инструмента можно находить ошибки в разработке.
Часто бывает, что кода в исполняемой команде много, и неясно, в каком именно месте можно оптимизировать решение. Именно для поиска таких мест и нужен «Замер производительности 1С».
Особенность замера производительности в управляемых формах
В клиент-серверном варианте работы информационной базы, замер производительности собирает клиентские и серверные вызовы в одну таблицу. Понять место вызова можно по колонкам «Клиент» и «Сервер».
Если отладка на сервере выключена, то будут собраны и показаны только клиентские вызовы. Также можно отфильтровать отображение вызовов через флажки «Клиент» и «Сервер».
А вот так будет выглядеть стек замера в обычном режиме (нет разделения на «Клиент» и «Сервер»):
Специалист компании «Кодерлайн»
Карцев Кирилл