Устранение проблем с производительностью в конфигурациях электронной отчетности
В этой статье объясняется, как найти и разрешить проблемы с производительностью в конфигурацияхэлектронной отчетности (ER).
Как правило, исследование производительности состоит из нескольких этапов.
- Соберите данные.
- Проанализируйте собранные данные.
- На основе результатов анализа используйте конфигурации электронной отчетности для внесения изменений или для принятия решения о сборе дополнительных данных.
Устранение неполадок
Анализ времени выполнения
Время выполнения может зависеть от непредсказуемых факторов, таких как другие задачи, выполняемые в той же среде, и кэширование, в котором используются данные при их первом вызове. Поэтому следует повторить выполнение и измерение несколько раз.
Иногда проблемы с производительностью не вызваны конфигурацией формата электронной отчетности, который используется для отчетности. Вместо этого они вызваны кодом X++, который используется для открытия этой конфигурации формата электронной отчетности.
В центре действий или в журнале событий посмотрите на время выполнения отчета.
Сравните время выполнения отчета с общим временем выполнения в сценарии.
Если время выполнения отчета намного меньше общего времени выполнения, рассмотрим объем данных, которые обрабатывает отчет:
- Если отчет обрабатывает небольшой объем данных, проблема может быть связана со временем загрузки конфигурации.
- Если отчет обрабатывает большой объем данных, проблема может быть связана с предварительной обработкой X++. Для анализа этого случая используйте синтаксический анализатор трассировки.
В других случаях смотрите следующие разделы.
Запустите несколько тестов, которые включают различные объемы данных, чтобы определить, как время выполнения зависит от объема данных.
Анализ трассировок синтаксического анализатора трассировки
Подготовьте небольшой пример или соберите несколько трассировок во время случайных частей генерации отчета.
Затем в синтаксическом анализаторе трассировки сделайте стандартный анализ «снизу вверх» и ответьте на следующие вопросы:
- Какие методы потребляют больше всего времени?
- Какую часть общего времени используют эти методы?
Ответьте на те же вопросы для запросов.
Если вы видите, что методы имеют префикс "ER", перейти к следующему разделу.
Если вы видите, что методы или запросы возникли в наборе приложений, рассмотрите общие способы оптимизации (например, создайте индексы).
Проанализируйте количество вызовов. Если число значительно выше ожидаемого, рассмотрите кэширование соответствующих узлов конфигурации.
Анализ вызовов базы данных
Подготовь пример, который имеет небольшой объем данных, так что вы можете собрать трассировку электронной отчетности.
Затем откройте трассировку в конструкторе сопоставления модели электронной отчетности и посмотрите на нижней части страницы. Ответьте на следующие вопросы:
Есть ли дублирование запросов? Если есть, рассмотрите одно из следующих исправлений:
- Используйте кэширование, если вы считаете, что внутри одной родительской записи есть несколько вызовов.
- Используйте кэшированное, параметризированное вычисляемое поле, если вы считаете, что внутри разных записей есть вызовы к одной и той же записи.
- Используйте источник данных JOIN, если вам нужно считать значительное количество различных записей из базы данных.
Соответствует ли количество запросов и полученных записей общему объему данных? Например, если документ содержит 10 строк, показывает ли статистика, что в отчет извлекает ровно 10 строк или 1000 строк? Если у вас есть значительное количество извлеченных записей, рассмотрите одно из следующих исправлений:
- Используйте функцию FILTER вместо функции WHERE для обработки данных на стороне сервера Microsoft SQL Server.
- Используйте кэширование, чтобы избежать извлечения одних и тех же данных.
- Используйте функции собранных данных, чтобы избежать извлечения одних и тех же данных для суммирования.
Анализ трассировок PerfView
PerfView является инструментом для опытных разработчиков. Подробнее о следующих шагах см. в разделе Основы исследования общего времени.
Соберите трассировку с помощью времени потока.
Включите только стеки, которые используют runUnattended, чтобы фильтровать только поток, который имеет выполнение конфигурации. (Добавьте runUnattended в поле ввода IncPats.)
Сложите все время процессора, время сети и заблокированное время.
Загрузите предустановки электронной отчетности для PerfView.
Выберите Электронная отчетность>Другая предустановка.
Посмотрите на имена:
Вы, вероятно, увидите код платформы, который потребляет больше всего времени.
Вы можете дважды нажать (или дважды щелкнуть) и перейти вверх через вызывающих.
Если вы нашли классы с префиксом "ERExpression", и если они являются функциями, связанными с формулами, вы можете угадать имя функции на основе имени класса и посмотреть в репозитории электронной отчетности для просмотра атрибутов.
Исправления
Если вы видите, что большая часть времени процессора потребляется запросами, постарайтесь уменьшить количество запросов:
- Просмотрите трассировку электронной отчетности на предмет дублирования запросов.
- Посмотрите, сколько записей извлечено, и оцените, сколько данных теоретически должно быть извлечено.
Если вы видите, что большая часть времени процессора потребляется функциями, которые используются, попробуйте найти место в конфигурации, которое потребляет больше всего ресурсов.
Если вы видите, что большая часть времени процессора потребляется функциями сбора данных, подумайте о замене их на команды SQL группировать по на стороне сопоставления модели.
Сбор данных
В зависимости от среды существует несколько способов сбора доступных данных:
Получите общее время работы:
- Из центра уведомлений
- Из журнала событий
Профилирование исполнения:
- С помощью инструментов электронной отчетности
- С помощью синтаксического анализатора трассировки
- С помощью PerfView
Сбор данных в производственной среде
Иногда проблемы могут воспроизводиться только в производственной среде. Данные можно собирать следующими способами:
- С помощью трассировок синтаксического анализатора трассировки
- С помощью трассировок выполнения электронной отчетности
- С помощью общего времени выполнения
Сбор данных в среде разработки
В дополнение к инструментам, которые могут быть использованы в производственной среде, есть несколько инструментов, которые можно использовать в среде разработки:
- Журнал событий (Microsoft-Dynamics-ElectronicReporting). Этот журнал может дать вам общее время выполнения.
- Общие инструменты .NET, такие как PerfView.
Кроме того, среда разработки дает больше гибкости для экспериментов. Например, можно отключить части отчетов, чтобы увидеть, как это влияет на время выполнения.
Инструменты
Время выполнения в центре уведомлений
Электронная отчетность может показать время выполнения конфигурации в центре уведомлений. Этот параметр применяется только к конкретному пользователю и конкретной компании и только к интерактивным сеансам. Чтобы сделать эту функцию доступной, выполните следующие действия.
- Перейдите в раздел Администрирование организации>Электронная отчетность>Конфигурации.
- На странице Конфигурации в области действий на вкладке Конфигурации в группе Дополнительные параметры выберите Параметры пользователя.
- В диалоговом окне Параметры пользователя установите для параметра Показать время создания файла значение Да.
Время выполнения в журнале событий
- Откройте средство просмотра событий Windows.
- В пункте Журналы приложений и служб откройте Microsoft-Dynamics-ElectronicReporting/Operational.
- Найдите события FormatMapingRun, в которых EventID=2, поскольку эти события содержат информацию о прошедшем времени.
Трассировки синтаксического анализатора трассировки
Поскольку электронная отчетность реализована на X++, для анализа производительности можно использовать обычные инструменты X++. Дополнительные сведения см. в разделе Получение трассировок с помощью синтаксического анализатора трассировки.
При этом подходе есть несколько ограничений. Поскольку часть электронной отчетности реализована на C#, будут доступны не все данные. Однако можно просмотреть сведения об использовании данных. Кроме того, выполнения длинных отчетов могут превысить ограничения для хранения трассировки.
Трассировки электронной отчетности
Электронная отчетность может собирать свои собственные трассировки, и она содержит средства визуализации и анализа для этих трассировок. Дополнительные сведения см. в разделе Трассировка выполнения форматов электронной отчетности для устранения неполадок, связанных с производительностью.
PerfView
Поскольку X++ и электронная отчетность реализованы на платформе .NET, можно использовать общие инструменты .NET. Например, можно использовать бесплатное средство PerfView.
Кроме того, можно собирать данные из командной строки. Например, следующий сценарий Windows PowerShell собирает время выполнения до тех пор, пока любое выполнение формата на компьютере не будет остановлено.
c:\programs\PerfView collect "e:\traces\$(date -format "ddMMyyyy_hhmm").etl" `
-CircularMB:20000 -ThreadTime `
-NoNGenRundown `
-StopOnEtwEvent:Microsoft-Dynamics-ElectronicReporting/FormatMappingRun/Stop
При этом подходе есть несколько ограничений. Вы должны иметь административный доступ к компьютеру. Кроме того, вы должны быть опытным разработчиком, так как здесь требуется интенсивное обучение.
Внесение изменений
Использование кэширования
Хотя кэширование позволяет сократить время, необходимое для повторной выборки данных, кэш занимает память. Кэширование используется в случаях, когда объем загружаемых данных не слишком велик. Дополнительные сведения и пример, показывающий порядок использования кэширования, см. в разделе Улучшение сопоставления модели на основе сведений, содержащихся в трассировке выполнения.
Уменьшение объема получаемых данных
Можно уменьшить потребление памяти для кэширования, ограничив число полей в записях таблицы приложения, получаемых во время выполнения. В этом случае будут получены только те значения полей таблицы приложения, которые необходимы для сопоставления модели ER. Другие поля в этой таблице не будут получены. Таким образом уменьшается объем памяти, необходимый для кэширования выбранных записей. Для получения дополнительной информации см. раздел Повышение производительности решений электронной отчетности путем уменьшения количества полей таблицы, выбираемых во время выполнения.
Использование кэшированного параметризованного вычисляемого поля
Иногда значения следует искать многократно. Примерами являются наименования счетов и номера счетов. Чтобы помочь экономить время, можно создать вычисляемое поле, имеющее параметры на верхнем уровне, а затем добавить поле в кэш.
Этот подход рекомендуется использовать только в том случае, если размер кэшированных данных мал. Дополнительные сведения см. в разделе Повышение производительности решений электронной отчетности путем добавления параметризованных источников ВЫЧИСЛЯЕМОЕ ПОЛЕ.
Использование источника данных JOIN
Источник данных JOIN позволяет выбирать несколько подключенных записей в одном запросе. Отдельный запрос не требуется использовать для получения каждой связанной записи. Например, если имеется 1000 строк, и при этом извлекаются данные номенклатур для каждой строки по отношению, у вас будет 1001 запрос (= 1000 + 1). При использовании источника данных JOIN для получения тех же данных будет использоваться только один запрос. Дополнительные сведения см. в разделе Использование источников данных JOIN в сопоставлениях моделей электронной отчетности для извлечения данных из нескольких таблиц приложений.
Использование функции FILTER вместо функции WHERE
Функция FILTER выполняет условия на SQL Server, в то время как функция WHERE выбирает все данные из списка, по одной записи за раз, и применяет условие для каждой записи. Например, необходимо выделить одну запись из 1000 записей. При использовании WHERE будут извлечены все из 1000 записей. Однако если используется функция FILTER, будет извлечена только одна запись. Функция FILTER также может использовать индексы на стороне базы данных.
Использование функций собранных данных или источника данных накопленных данных
Если в конфигурации имеется компонент группировать по, который суммирует ранее извлеченные данные по отчетам, этот компонент будет снова извлекать все данные. Используя функции собранных данных, можно позволить электронной отчетности накапливать данные во время первой выборки. Дополнительные сведения см. в разделе Электронная отчетность — настройка формата для инвентаризации и суммирования.
Переопределение частей конфигурации в X++
Электронная отчетность поддерживает вызовы методов таблиц и классов, в том числе и расширений. Рекомендуется переписать части сопоставления модели в X++, чтобы повысить производительность.
Электронная отчетность может получать данные из следующих источников:
- Классы (источники данных объект и класс)
- Таблицы (источники данных таблица и записи таблицы)
API-интерфейс электронной отчетности также предоставляет способ отправки предварительно рассчитанных данных из вызывающего кода. В набор приложений входят многочисленные примеры такого подхода.