1с замер производительности как использовать
Перейти к содержимому

1с замер производительности как использовать

  • автор:

Замер производительности

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

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

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

Замер производительности

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

Замер производительности

Результаты замера могут быть отобраны по месту исполнения (клиент, сервер, клиент и сервер), а также отсортированы по любой из колонок, например, по количеству вызовов строки:

Замер производительности

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

Замер производительности

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

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

Оценка производительности работы кода

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

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

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

Соглашаемся, запускаем отладку (клавиша F5) и работаем. Конфигуратор 1С в это время должен быть включен!

Подробно о работе с отладкой читайте в этой статье:

Отладка в конфигураторе 1С

После того как Вы все сделаете и закроете 1С: Предприятие в пользовательском режиме, то откроется окно замера производительности.

С этим окном мы разберемся позже.
Но самое интересное, что замер продолжает работать, мы убедимся в этом если опять зайдем в отладку

Что бы его снять, нужно опять нажать на этот пункт меню.
Узнаем, как делать замер производительности в конкретном месте кода. Для этого откроем модуль документа «Поступление Денег» и установим точки останова в начале процедуры проведения и в конце.

После этого запустим отладку и попытаемся провести документ Оплата, а когда первая точка останова сработает, перейдем в меню «Отладка», где нажимаем уже знакомую нам кнопку «Замер производительности»

После того как запустили замер производительности, нужно продолжить отладку с помощью соответствующей кнопки или клавиши F5. Как сработает вторая точка останова, вернемся в меню отладка и заново нажмем на кнопку «Замер производительности»

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


Разберемся с этим окном, для большей наглядности сделаем замер производительности для обработки замены товара в табличной части документа «Приход товара»

Смотрите на последний рисунок, как видно, строк в таблице замера больше, чем строк в самом обработчике, который мы замеряли. Это потому что в таблицу замеров входят не только строки выделенного фрагмента кода, но и строки процедур и функций, которые в этом коде вызываются. В нашем случае это две функции ПолучитьТекущуюСтрокуТовары и ПолучитьЦенуТовар.
Строки 16,17, 20, 22 относятся к функции ПолучитьЦенуТовара, а строки 33,34 – ПолучитьТекущуюСтрокуТовары. Если мы кликнем по нужной строке мышкой, то перейдем на эту строку в модуле.
Разберем некоторые колонки:
«Кол» — в этой колонке указано сколько раз выполнялась данная строка
«Время чистое» — время в секундах, которое было потрачено на выполнение данной строки, в данном случае берется суммарное время, т.е. все время, когда строка вызывалась.
«% времени» — отношение «Время чистое» к общему времени выполнения замера. Причем за 100% принимается выполнение кода на клиент. Т.е. корректно эта колонка работает когда мы начали на клиенте и закончили на клиенте, а если мы начали на сервере, а закончили на клиенте, то результат может быть не всегда корректен.
На отображение в колонках «Время чистое» и «% времени» влияет флаг «Для вызова процедур и функций включать время выполнения». Этот флаг нужно включать, когда мы хотим показать время на вызов процедуры или функции.


После того как мы установили этот флаг, поменялись значения в колонках «Время» и «% времени». Т.е. мы увидели, сколько относительного и абсолютного времени в целом тратиться на эту строку

Стр.Цена = ПолучитьЦенуТовара(Объект.Дата, Стр.Товар);

Разберемся, откуда взялась цифра 98,64% – время выполнения этой строки.

Если сложить проценты времени на выполнение кода в процедуре ПолучитьЦенуТовара, а это строки 16, 17, 20 и 22, будет — 86,41 %, но на рисунке мы видим, что исполнение процедуры занимает 98,64 % общего времени. Где еще 98,64 – 86,41 = 12,23 процента? Посмотрите на предыдущий рисунок, 12.23% — это именно время на вызов серверной процедуры.
Таким образом, если установлен флаг «Для вызова процедур и функций включать время выполнения» то показывает относительное и абсолютное время выполнения и вызова процедуры или функции. В тоже время если этот флаг снят, то показывается время только на вызов метода. Поскольку вызов любой серверной процедуры или функции (без разницы в контексте она формы, или внеконтекстная) требует определенных затрат, то информации о продолжительности вызова метода может быть очень полезной.
С остальными колонками все более менее понятно. Колонка «Клиент» при помощи специальной пиктограммы указывает, что строка выполняется на клиенте. А колонка «Сервер» указывает, что строка выполняется на сервере. Колонка «Обр. сервер» указывает, что в данной строке происходит передача управления на сервер.
Так же имейте ввиду, что часть информации из таблицы замеров дублируется в модуле. Цифры процентов в этом случае идентичны цифрам, когда флаг «Для вызова процедур и функций включать время выполнения» снят.

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

Пять эффективных инструмента отладки

Я стараюсь как можно чаще выпускать различные интересные бесплатные статьи и видеоуроки. Поэтому буду очень рад, если Вы поддержите мой проект перечислив любую сумму:

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

APDEX и замеры производительности 1С

В продолжение статьи про наше использование 1С Fresh мы расскажем как учимся следить за производительностью и скоростью работы нашей инсталляции.
image

Введение

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

У нас в Кнопке пользователями продукта 1C Fresh в первую очередь являются наши бухгалтеры. Чем выше стабильность и скорость работы 1С, тем выше скорость работы бухгалтера. А это значит, что клиенты, которые обслуживаются в Кнопке будут быстрее получать расчеты по налогам, авансу, зарплате и т.д.

Существует много различных вариантов оценки производительности (или качества) IT — систем и софта. Для оценки производительности нашего 1С Fresh мы используем многим известную методику APDEX.

Apdex. Справка

Apdex (Application Performance Index) — индекс производительности приложений. Открытый международный стандарт, разработанный с целью формирования объективной оценки показателей производительности корпоративных информационных систем.

Apdex служит для измерения пользовательской удовлетворенности работой системы. Этот опыт может быть представлен по шкале от отлично до неудовлетворительно.

Методика состоит из следующих этапов:

— получение списка ключевых операций;
— определение приоритета каждой операции;
— определение целевого времени для каждой операции;
— сбор информации о времени выполнения каждой ключевой операции;
— получение оценки на основе собранной информации.

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

Реализация. Теория

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

Второй этап — определение приоритета каждой операции. Чем выше приоритет, тем важнее производительность операции. Правильно расставленные приоритеты позволят в дальнейшем оценить серьезность проблем с производительностью в системе, и правильно определить приоритеты работ по оптимизации.

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

Операция Приоритет Т
Проведение поступление товаров и услуг 3 1
Общее время запуска приложения 2 3
Формирование отчёта «карточка счёта» 6 4
Формирование ОСВ 4 3
Формирование ОСВ по счёту 5 3
Проведение реализация товаров и услуг 1 3

Следующий этап, это сбор информации о времени выполнения каждой операции. 1С позаботились об этом и учли такой функционал в своих продуктах. Замеры мы снимали с конфигурации Бухгалтерия Предприятия 3.0. Для того, чтобы 1с начала замерять время выполнения операций, необходимо установить константу «Выполнять замеры производительности». Проделать это нужно для каждой ИБ, работающей в модели сервиса.
После этого все замеры времени выполнения пользовательских операций будут записываться в регистр сведений «Замеры времени», откуда эту информацию можно получать различными способами.

image

И, наконец, пятый этап, получение оценки APDEX на основании собранных результатов.

Формула для вычисления APDEX: APDEX = (NS + NT/2)/N

N — общее количество выполнений данной операции;
NS — количество выполнений с временем отклика от 0 до Т;
NT — количество выполнений с временем отклика от T до 4T.

Результаты расчетов добавим в таблицу:

Операция Приоритет Т N NS NT APDEX
Проведение поступление товаров и услуг 3 3 387 320 34 0,67
Общее время запуска
приложения
2 5 357 185 164 0,68
Формирование отчёта
«карточка счёта»
6 4 99 94 5 0,84
Формирование ОСВ 4 4 224 190 31 0,95
Формирование ОСВ
по счёту
5 4 732 559 158 0,88
Проведение реализация товаров и услуг 1 4 387 353 34 0,67

Методика APDEX позволяет интерпретировать полученные числовые значения коэффициента в терминах качественных оценок. Для этого предусмотрена Шкала APDEX, которая содержит следующие диапазоны значений:

  • От 0.00 до 0.50 — неприемлемо
  • От 0.50 до 0.70 — неудовлетворительно
  • От 0.70 до 0.85 — удовлетворительно
  • От 0.85 до 0.94 — хорошо
  • От 0.94 до 1.00 — отлично

Реализация. Практика

Для мониторинга производительности и доступности сервисов, мы используем Zabbix и надстройку Grafana. Для всех наших сервисов, в том числе 1C Fresh, мониторятся следующие показатели: нагрузка на CPU каждого сервера, количество свободной оперативной памяти, глубина очереди дисковой подсистемы (нагрузка операциями дискового ввода/вывода), количество свободного места на дисках, количество операций INSERT, UPDATE, DELETE в секунду на сервере СУБД.

image

image

Для отслеживания оценки Apdex мы не стали придумывать ничего нового и добавили отображение оценки в Zabbix. Для того, чтобы Zabbix получал данные по времени выполнения операций из 1с, их нужно сначала куда-то выгрузить. Для этого мы используем промежуточную базу PostgreSQL. Выгружать данные из 1С в базу можно несколькими способами. Мы реализовали этот механизм через регламентные задания.

image

Каждое регламентное задание можно запускать по расписанию:

image

В процессе запуска регламентное задание порождает фоновое задание, которое и выполняет реальную обработку. Регламентное задание может выполняться от имени заданного пользователя и имеет возможность перезапуска (например, в случае непредвиденного завершения работы).

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

1. Наименование базы прикладной конфигурации. Поскольку в технологии 1C Fresh предполагается использование большого количества баз и прикладных решений, нам необходимо различать замеры для каждой из них
2. Наименование операции.
3. Время начала операции
4. Время выполнения операции
5. Область данных, в которой выполнялась операция
6. Пользователь, выполнивший операцию

Фоновое задание представляет собой процедуру:

Выгружая таким образом данные из 1С, нам теперь не составит труда обрабатывать это в Zabbix’e. На примере операции “Общее время запуска приложения” в ИБ ea_01 сформируем sql-запрос к базе:

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

Использование параметров даст нам возможность использовать этот конфигурационный файл для различных информационных баз и замеряемых операций.

На втором шаге мы создадим шаблон в Zabbix, где будем описывать необходимые нам макросы:

image

Затем привязываем этот шаблон к нужному узлу сети и переопределяем индивидуальные параметры для макросов.

image

Повторяя эти действия для каждого измеряемого параметра, мы получим постоянный мониторинг производительности по методике APDEX.

image

Теперь, почти в режиме реального времени, мы видим оценку Apdex по нашим базам 1cFresh. Но мы пошли дальше.

Настройка реакции на падение производительности

Кроме автоматического мониторинга показателей мы настроили также автоматическую реакцию на падение производительности по какому-либо параметру. Zabbix предоставляет большой простор для реализации различных реакций через скриптовые инструменты.

Мы будем реагировать на падение производительности включением технологического журнала «1С: Предприятие».

Сценарий достаточно прост:

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

После разбора проблемы, либо восстановления производительности, проводятся обратные действия.

Производительность выходит на нормальный уровень → срабатывает триггер → удаляется блок настроек технического журнала.

Создадим триггер, в котором прописываем условия срабатывания. В нашем случае это падение оценки Apdex ниже 0.6

image

Затем создаем действие, на срабатывание триггера

image

В этом действии задаем команду

image

По собранному ТЖ можно анализировать, что послужило падению производительности, какие были ошибки, что делал пользователь в данный момент, какой пользователь и т.д. Сопоставляя данные ТЖ и мониторинга Zabbix можно делать выводы и разрабатывать планы по устранению проблем, оптимизации железа, оптимизации работы пользователя.

Благодаря мониторингу и оценке производительности, мы смогли выйти на показатель 99% доступности нашей инсталляции 1C Fresh. Наши показатели оценки Apdex пока еще не достигли 1.0, но мы уже над этим работаем 🙂

Использование замера производительности для оптимизации клиент-серверных приложений в 1С:Предприятии 8

1С:Предприятие 8 позволяет отлаживать и измерять производительность для кода на встроенном языке, исполняемом как на клиенте, так и на сервере.

Объединение результатов замера производительности для клиента и сервера

Особенностью работы замера производительности для клиент-серверной информационной базы в 1С:Предприятии 8 является то, что результаты замера производительности объединяются в один файл. Они включают в себя данные о ходе исполнения кода на встроенном языке как на клиенте, так и на сервере. Для получения такого замера достаточно запустить сервер 1С:Предприятия 8 в отладочном режиме (с помощью ключа командной строки /debug ) и в Конфигураторе в нужный момент просто включить режим замера производительности.

Отображение серверных вызовов.

Режим замера производительности 1С:Предприятия 8 показывает серверные вызовы:
1) вызовы сервера методами объектов встроенного языка, вызовы процедур и функций, исполнение которых происходит на сервере, отображаются в замере производительности в колонке «Обр. сервером» («Обработка сервером») с помощью значка ;
2) вызовы клиентских процедур и функций, в которых тем или иным способом происходил вызов сервера, отображаются в замере производительности в колонке «Обр. сервером» («Обработка сервером») с помощью значка .

На приведенном ниже рисунке можно видеть строки кода, которые приводили к серверным вызовам: для этих строк в колонке «Обр. сервером» («Обработка сервером») указан соответствующий тип серверного вызова:

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

Отображение места исполнения кода: на клиенте или на сервере.

Режим замера производительности 1С:Предприятия 8 отображает, где исполнялся код на встроенном языке в клиент-серверной информационной базе: на клиенте или на сервере:
1) строки кода на встроенном языке, исполнение которых происходило на клиенте, отображаются в замере производительности с помощью значка в колонке «Клиент»;
2) строки кода на встроенном языке, исполнение которых происходило на сервере, отображаются в замере производительности с помощью значка в колонке «Сервер».

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

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

Фильтрация результатов замера

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

Оптимизация приложения

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

Выполнить замер производительности

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

Проанализировать результаты замера производительности

Второй шаг — проанализировать результаты замера производительности.

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

Проанализировать серверные вызовы: вызовы процедур и функций общих модулей на сервере, вызовы сервера при обращении к методам и свойствам объектов языка (обращение к базе данных, оперативная отметка времени и т.п.).

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

  • обращения к серверу в цикле, запросы в цикле;
  • обращения к свойствам объекта по ссылке;
  • и другие.

Оптимизировать прикладной код

Последний шаг — оптимизация прикладного кода. На основе анализа результатов замера производительности и выявленных узких мест произвести оптимизацию прикладного кода.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *