Как использовать подсистему «Оценка производительности» для измерения времени операций (статья + видео)

В предыдущей статье мы рассказали, почему важны замеры производительности 1С и как их выполнить с помощью APDEX.

Теперь разберем, как измерить фактическое время операций. Чтобы не разрабатывать механизм замеров с нуля, воспользуемся подсистемой Оценка производительности из Библиотеки стандартных подсистем (БСП).

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

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

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

Продемонстрируем это на примере конфигурации 1С:Бухгалтерия 8, редакции 3.

Для того чтобы включить замеры, заходим в раздел Администрирование — Обслуживание. Находим подраздел под названием Оценка производительности.

Включение оценки производительности в 1С:Бухгалтерия 8

Рисунок 1. Включение оценки производительности в 1С:Бухгалтерии 8

Устанавливаем флаг, и замеры производительности запускаются автоматически.

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

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

Настройки оценки производительности в 1С:Бухгалтерия

Рисунок 2. Настройки оценки производительности в 1С:Бухгалтерия

После установки флага Оценка производительности в разделе Администрирование становится доступен отчет Оценка производительности.

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

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

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

Рисунок 3. Настройки панели действий раздела Администрирование

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

  • время проведения документов,
  • время открытия форм,
  • время формирования отчетности
  • и много других.

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

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

Отчет Оценка производительности по ключевым операциям

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

Как видно из отчета, при целевом времени проведения реализации в 3 сек., среднее время проведения реализации составило 2,636 сек., что соответствует индексу APDEX, равному единице — оптимизация проведения этого документа не требуется.

Внедрение подсистемы оценки производительности в конфигурацию

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

Как объединить рабочую конфигурацию с БСП

Для упрощения процесса объединения рабочей конфигурации и БСП воспользуемся обработкой ПервоеВнедрениеБСП.epf, входящей в состав дистрибутива БСП.

Эту обработку нужно запустить в пользовательском режиме демонстрационной конфигурации и отметить в ней подсистему Оценка Производительности.

После — нажать на кнопку «Сохранить настройки для конфигуратора».

Настройки объединения подсистем

Рисунок 5. Настройки объединения подсистем

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

Важно отметить, что для российских и международных конфигураций поставляются разные файлы конфигурации БСП:

  • для российских конфигураций — 1Cv8.cf
  • для международных конфигураций — 1Cv8_international.cf

В окне сравнения и объединения следует нажать на кнопку «Загрузить настройки объединения из файла».

Загрузка настроек из файла

Рисунок 6. Загрузка настроек из файла

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

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

  • Основные роли
  • Модуль приложения
  • Модуль сеанса
  • Модуль внешнего соединения
  • Модуль обычного приложения
  • Режим использования модальности
  • Режим совместимости интерфейса
  • Режим совместимости

Все остальные свойства корневого объекта должны быть отключены.

Далее нужно выбрать режим объединения Объединить с приоритетом файла (Действия – Установить режим для всех…) и проконтролировать изменения в объектах, которые присутствуют как в имеющейся, так и в загружаемой конфигурации.

Также следует снять флаг объединения с устаревших объектов, которые начинаются со слова «Удалить». Например, к таким объектам относится регистр сведений УдалитьЗамерыВремени3.

Дважды измененные объекты

Рисунок 7. Дважды измененные объекты

Далее следует нажать кнопку «Выполнить». При появлении окна Неразрешимые ссылки нажать кнопку «Продолжить».

Дополнительные настройки конфигурации после объединения

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

  1. Заполнить свойство Версия корневого объекта конфигурации в соответствии с шаблоном <номер редакции>.<номер подредакции>.<номер версии>.<номер сборки>.

Если этого не сделать, при запуске конфигурации возникнет ошибка «Не указана версия».

Для примера в свойстве Версия мы указали 1.0.0.1, Вам нужно написать свою версию.

Свойство Версия корневого объекта

Рисунок 8. Свойство Версия корневого объекта

В этом же корневом элементе на закладке Совместимость рекомендуется переключить свойство Режим совместимости интерфейса в положение Такси.

  1. Для пользователя Администратор следует включить роли Полные права и Администратор системы (Администрирование — Пользователи — Администратор — закладка Прочие). Указанные роли могут отсутствовать, поэтому к этому пункту нужно вернуться после обновления конфигурации, но до первого ее запуска. Если этого не сделать, то при запуске система выдаст ошибку.
  2. В ветке Общие — Определяемые типы для определяемого типа Организация в свойстве Тип указать ссылку на организацию.
  3. Создаем новый общий модуль ОбновлениеИнформационнойБазыДемо со свойствами Сервер и Внешнее соединение. Во вновь созданный модуль вставляем следующие процедуры:
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
    Описание.Имя    = "Демо";
    Описание.Версия = "1.0.0.1";    
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
КонецПроцедуры 

Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт    
КонецПроцедуры

Процедура ПередОбновлениемИнформационнойБазы() Экспорт    
КонецПроцедуры

Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия,  Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт
КонецПроцедуры

Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт    
КонецПроцедуры

Процедура ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка) Экспорт    
КонецПроцедуры

Процедура ПриДобавленииОбработчиковПереходаСДругойПрограммы(Обработчики) Экспорт
КонецПроцедуры

Процедура ПриЗавершенииПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации, ПредыдущаяВерсияКонфигурации, Параметры) Экспорт    
КонецПроцедуры
  1. В общем модуле ПодсистемыКонфигурацииПереопределяемый имеется процедура ПриДобавленииПодсистем(). В ее тело необходимо вставить строку:
МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыДемо");
  1. В процедуру ПриДобавленииОбработчиковУстановкиПараметровСеанса общего модуля ОбщегоНазначенияПереопределяемый добавить следующую строку:
ОценкаПроизводительностиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики);
  1. У подсистемы ОценкаПроизводительности установить флаг «Включать в командный интерфейс» и перенести ее из подсистемы Стандартные подсистемы в корневой элемент. Вообще, не рекомендуется изменять положение подсистем в дереве конфигураций, и этот пункт мы делаем только для упрощения демонстрации работы подсистемы.

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

Рисунок 9. Подсистема Оценка производительности

  1. На момент подготовки статьи к публикации в БСП версии 3.1.5 в интерфейсе не было флага включения замеров производительности. Как это исправить:
    1. открыть обработку ОценкаПроизводительности,
    2. выбрать форму АвтоматическийЭкспортЗамеровПроизводительности,
    3. для элемента формы ВыполнятьЗамерыПроизводительностиВыполнятьЗамерыПроизводительности установить флаг «Видимость» в значение «Истина».

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

Рисунок 10. Установка видимости реквизита Выполнять замеры производительности

Возможно, в следующих версиях БСП эту особенность исправят и данный шаг выполнять не потребуется.

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

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

Теперь нужно включить замеры производительности. Для этого запустим конфигурацию в пользовательском режиме от имени пользователя Администратор, перейдем в раздел Оценка производительности – Сервис – Настройки оценки производительности и установим флаг «Выполнять замеры производительности».

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

Рисунок 11. Включение замеров производительности

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

Настройка Удалять через определяет, сколько времени будут храниться данные в регистре замеров. Значение по умолчанию — 100 дней.

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

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

На этом внедрение подсистемы Оценка производительности закончено. Можно переходить к замерам.

Разбор ошибки, которая возникает после внедрения подсистемы Оценка производительности из БСП версии 3.1.5.171 и выше

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

В видео разбираем, откуда взялась эта ошибка и как ее исправить.

Настройка замера времени выполнения операции

Перейдем к настройке замеров времени выполнения ключевых операций.

Настройка замера будет отличаться в зависимости от того, где начинается операция — на клиенте или на сервере.

Если операция, время которой нужно измерить, начинается на сервере, то начало и конец замера нужно прописывать на сервере.

Если операция, время которой нужно измерить, начинается на клиенте, то начало и конец замера нужно прописывать на клиенте.

Чаще всего и опытные, и начинающие разработчики совершают следующую ошибку. Они встраивают начало замера на сервере, хотя операция стартует на клиентском рабочем месте. Так делать нельзя — мы получим некорректные данные.

Пример

Возьмем документ Приход товара. Процесс его проведения стартует на клиенте, когда пользователь нажимает кнопку «Провести». Следовательно, правильно оценивать время этой операции со стороны пользователя — от нажатия «Провести» до завершения операции.

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

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

Возможные комбинации настроек для замера времени

Таблица 1. Возможные комбинации настроек для замера времени

Как завершить замер, если операция выполняется на клиенте

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

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

  • проведение документов,
  • запись каких-то объектов,
  • выполнение обработок, которые перезаписывают некие объекты.

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

В качестве примера настроим замер времени проведения документа Приход товара (в пользовательском режиме — Поступление товаров).

При проведении документа срабатывает следующая последовательность событий:

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

Рисунок 12. Последовательность событий при проведении документа
(нажмите, чтобы увеличить картинку)

Нам нужно замерить операцию с начала, поэтому код начала замера в модуле формы мы вставляем в событие ПередЗаписью (событие ПередЗаписью возникает первым при нажатии пользователем кнопки «Провести»). Этот код будет закончен автоматически:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  Если (ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
      ОценкаПроизводительностиКлиент.ЗамерВремени("Кл. операция");
  КонецЕсли;
КонецПроцедуры

Ошибки при выполнении замеров

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

В этом случае есть выбор из двух сценариев работы:

  • не сохранять замер с ошибкой;
  • сохранить замер с пометкой, что была ошибка.

Сценарий 1. Не сохранять замер с ошибкой

Чтобы реализовать такой сценарий, в процедуре ПослеЗаписи необходимо вставить следующий код:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  Если (ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
      УИД = ОценкаПроизводительностиКлиент.ЗамерВремени("Кл. операция", Ложь, Истина);
  КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
  Если (ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда 
ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИД);
  КонецЕсли; 
КонецПроцедуры

В данном сценарии в начале замера третий параметр в коде имеет значение «Ложь». Это говорит о том, что замер надо завершить явно. При возникновении ошибки записи не произойдет, процедура ПослеЗаписи не будет выполнена, следовательно, замер не будет сохранен в регистре.

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

Сценарий 2. Сохранить замер с признаком, что была ошибка

Этот сценарий позволяет посмотреть, сколько было ошибок при выполнении операции.

В регистре замеров предусмотрено специальное поле ВыполненСОшибкой, имя которого говорит само за себя. Поле заполняется либо как параметр функций НачатьЗамер и ЗавершитьЗамерВремени, либо процедурой УстановитьПризнакОшибкиЗамера.

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

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

В этом случае код замера примет следующий вид:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  Если (ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
      УИД = ОценкаПроизводительностиКлиент.ЗамерВремени("Кл. операция", Истина);
  КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
 Если (ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
     ОценкаПроизводительностиКлиент.УстановитьПризнакОшибкиЗамера(УИД, Ложь); 
 КонецЕсли;
КонецПроцедуры

У функции ЗамерВремени второй параметр равен «Истина». Это значит, что замер сразу помечается как выполненный с ошибкой. Если же исполнение добралось до процедуры ПослеЗаписи, это значит, что проведение было успешным и признак ошибки у замера можно снять.

Если измеряются отдельные блоки кода, то возможны любые комбинации с «Попытка Исключение» и т. д. Главное — понимать сам принцип и учитывать возможные ошибки исполнения при встраивании замеров.

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    КлючеваяОперация = "ПроведениеПриходТовара";
    ОценкаПроизводительностиКлиент.ЗамерВремени(КлючеваяОперация,, Истина);
КонецПроцедуры

Примеры замеров времени выполнения операции

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

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

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

Проведем документ Приход товара. Обратите внимание, что проводить документ нужно из формы документа по кнопке «Провести и закрыть», так как замер настроен на проведение из формы.

В регистре сведений Замеры времени (Оценка производительности — Замеры времени) появился первый замер. Замеры могут появиться не сразу, так как в настройках стоит «Период записи 60 сек».

Регистр сведений Замеры времени

Рисунок 13. Регистр сведений Замеры времени

Настроим созданную ключевую операцию. Для этого зайдем в нее (Оценка производительности – Ключевые операции) и установим следующие значения:

  • приоритет – 1
  • целевое время – 3 сек.
  • минимально допустимый уровень выбираем «Хорошо (apdex >= 0.85)».

Настройки ключевой операции Проведение приход товара

Рисунок 14. Настройки ключевой операции Проведение приход товара

Аналогично настроим замер времени проведения для документа Продажа товара.

Открываем форму документа Продажа товара и создаем обработчик события формы ПередЗаписью.

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    КлючеваяОперация = "ПроведениеПродажаТовара";
    ОценкаПроизводительностиКлиент.ЗамерВремени(КлючеваяОперация,, Истина);
КонецПроцедуры

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

Настройки ключевой операции Проведение продажа товара

Рисунок 15. Настройки ключевой операции Проведение продажа товара

Проведем несколько документов Приход товара и Продажа товара. В результате в регистре сведений Замеры времени появится несколько записей с замерами времени проведения этих документов:

Замеры времени проведения документов

Рисунок 16. Замеры времени проведения документов

Теперь перейдем к настройке замеров на сервере.

Пример замера времени выполнения операции на сервере

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

Продемонстрируем замер времени на сервере с помощью внешней обработки.

Создадим в конфигураторе внешнюю обработку с названием ЗамерНаСервере.epf, добавим в нее форму.

В форме создадим команду ЗамерНаСервере.

Перетащим команду на форму обработки и назначим команде обработчики, выполняемые на клиенте и на сервере без контекста.

Форма внешней обработки Замер на сервере

Рисунок 17. Форма внешней обработки Замер на сервере

Модуль формы внешней обработки Замер на сервере

Рисунок 18. Модуль формы внешней обработки Замер на сервере

Перейдем к настройке замеров.

В процедуру ЗамерНаСервереНаСервере добавим следующий код:

&НаСервереБезКонтекста
Процедура ЗамерНаСервереНаСервере() 
//получаем время начала замера
    ВремяНачала = ОценкаПроизводительности.НачатьЗамерВремени();
//вызываем паузу 1 сек. для тестирования замера
    ОбщийМодульКлиентСервер.Пауза(1000);
//записываем результат замера и ключевую операцию в регистр сведений Замеры времени
    ОценкаПроизводительности.ЗакончитьЗамерВремени("ЗамерВремениСервер1", ВремяНачала);
КонецПроцедуры

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

Результат замера времени на сервере

Рисунок 19. Результат замера времени на сервере

Чтобы проиллюстрировать замер времени выполнения вложенной операции, модифицируем код процедуры ЗамерНаСервереНаСервере:

&НаСервереБезКонтекста
Процедура ЗамерНаСервереНаСервере()
    ВремяНачала = ОценкаПроизводительности.НачатьЗамерВремени();     
    ОбщийМодульКлиентСервер.Пауза(1000);    
    
        ВремяНачала2 = ОценкаПроизводительности.НачатьЗамерВремени();     
        ОбщийМодульКлиентСервер.Пауза(2000);    
        ОценкаПроизводительности.ЗакончитьЗамерВремени("ЗамерВремениСервер1.1", ВремяНачала2);
    
    ОценкаПроизводительности.ЗакончитьЗамерВремени("ЗамерВремениСервер1", ВремяНачала);
КонецПроцедуры

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

Результат замера вложенной процедуры на сервере

Рисунок 20. Результат замера вложенной процедуры на сервере

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

Просмотр APDEX с помощью отчета Оценка производительности

Мы настроили и провели все необходимые замеры. Теперь давайте увидим их результат с точки зрения методики APDEX (подробнее о ней мы рассказывали в этой статье).

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

Итак, перейдем в раздел Оценка производительности и откроем этот отчет.

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

Рисунок 21. Настройки отчета Оценка производительности

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

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

Настройки профиля Проведение прихода и расхода

Рисунок 22. Настройки профиля Проведение прихода и расхода

Настройки профиля Замер времени сервер

Рисунок 23. Настройки профиля Замер времени сервер

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

Результаты замеров времени проведения документов

Рисунок 24. Результаты замеров времени проведения документов
(нажмите, чтобы увеличить картинку)

В табличное поле будет выведена диаграмма и таблица замеров с рассчитанным индексом APDEX. В таблице отображаются

  • целевое время ключевой операции,
  • ее приоритет,
  • рассчитанный индекс APDEX,
  • количество замеров и прочая необходимая информация.

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

Теперь сформируем этот же отчет по профилю Замер времени сервер с другими ключевыми операциями. Для замеров времени на сервере использовались паузы в 1 и 2 сек., то есть индекс APDEX должен быть меньше единицы.

Результаты замеров времени на сервере

Рисунок 25. Результаты замеров времени на сервере (нажмите, чтобы увеличить картинку)

Действительно, при таком времени выполнения операций на сервере индекс APDEX равен 0,5. Значит, для этих операций требуется оптимизация.

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

Подведем резюме

В заключение темы внедрения и использования подсистемы Оценка производительности из Библиотеки стандартных подсистем хочется обратить Ваше внимание на следующие моменты:

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

Что осталось за рамками этой статьи

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

И те, и другие ошибаются :)

Как провести замер при открытии формы, мы подробно разбираем на курсе Ускорение и Оптимизация 1С. Базовый курс.

И в нем еще много других интересных вещей, которые можно применить в работе :)

Программа, стоимость и условия:
Ускорение и оптимизация работы 1С, Базовый курс
  • 16 учебных часов видео
  • 50 практических заданий
  • 3 месяца поддержки и доступа к ответам на вопросы
  • Пожизненный доступ к видео-урокам и учебным материалам

Комментарии / обсуждение (4):

  1. Nazgul

    Добрый день! Спасибо за статью, очень понятно )

    В пример кода в разделе
    “Сценарий 1. Не сохранять замер с ошибкой”
    похоже, вкралась ошибочка (и в Chrome, и в лисе отображается без параметров в конце вызова, т.е. так):

    Если (ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
    УИД = ОценкаПроизводительностиКлиент.ЗамерВремени(“Кл. операцнекорректные
    КонецЕсли;

    • Андрей Бурмистров

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

  2. metal4ik

    А что насчёт замеров проведения документов? Из формы, но из обычной (НЕ упр.)
    Как лучше встроить замер? Правильно ли понимаю, что вместо ПараметрыЗаписи следует использовать ДополнительныеСвойства?

    • Андрей Бурмистров

      Насколько я знаю БСП заточена под управляемые формы, но если немного доработать напильником, можно замерять и через обычные.
      Что использовать ПараметрыЗаписи или ДополнительныеСвойства сказать не могу, т.к. уже очень давно не работал с обычными формами, не помню всех нюансов.

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

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

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

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

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.