Устранение неполадок отчетов: производительность отчета

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

На получение данных уходит слишком много времени

Затраты времени на обработку отчета слишком велики

Затрачивается слишком много времени на подготовку отчета к просмотру

Советы по проектированию для оптимизации обработки отчета

На получение данных уходит слишком много времени

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

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

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

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

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

  • Записывайте запросы с предложением ORDER BY для предварительной сортировки данных, извлекаемых для отчета. Сортируйте данные в том порядке, в котором они должны быть отсортированы в отчете. Предварительно отсортированные данные позволяют уменьшить время обработки, поскольку в этом состоит назначение применяемого способа хранения их в памяти. Для многих задач обработки данных не требуется сортировка данных перед их обработкой. Например, от порядка сортировки не зависит функция SUM. Данные в экземплярах групп не сортируются автоматически. Если не требуется, чтобы данные в отчете были отсортированы, не задавайте выражения сортировки на наборе данных или в области данных. Дополнительные сведения см. в разделах Предложение ORDER BY (Transact-SQL) и Сортировка данных в отчете.

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

  • Записывайте запросы с предложением GROUP BY для статистической обработки значений в источнике данных.

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

    После того как эти предварительные статистические значения будут помещены в отчет, можно будет продолжить статистическую обработку значений с помощью математически транзитивной статистической функции, например SUM. Допустим, что имеется 6 значений: 1, 2, 3, 4, 5, 6. Если сгруппировать значения в пары, то получится набор из 3 значений: 3, 7, 11. Можно вычислить сумму первого набора (21), затем второго (21), и эти суммы будут совпадать независимо от группирования. Если же вычислить среднее для этих значений в наборах с помощью функции AVG, то для каждого набора получится разный результат. Среднее для набора из 6 значений — 21/6, т. е. 3,5. Среднее для набора из 3 значений — 21/3, т. е. 7. AVG не является транзитивной функцией.

  • Рассмотрим количество данных, необходимых для диаграммы или датчика. Если для вывода сотен точек на мониторе применяется мало пикселов, то производительность снижается, а видимое отображение графических объектов не улучшается. Сомнительно, что при числе сегментов в круговой диаграмме больше 7 или 8 может быть получено отображение хорошего качества. Дополнительные сведения см. в разделе Подготовка данных для отображения в области данных диаграммы.

  • Для элементов отчета с условной видимостью в обработчике отчетов необходимо применять выражения группирования, сортировки и фильтрации, даже если вначале становятся видимыми только данные верхнего уровня. Применение обработки по требованию в службах SQL Server 2008 Reporting Services позволяет оптимизировать вычисление данных, поскольку обрабатываются только видимые данные, но в состав отчета входят все возможные данные. Если у пользователя заинтересованность в отображении подробных данных возникает только изредка, то лучшим вариантом становится детализированный отчет. Дополнительные сведения см. в разделе Типы отчетов.

  • Рассмотрим создание моментальных снимков состояния выполнения отчета. Моментальный снимок отчета включает все данные отчета, получаемые для создания наборов данных в определении отчета. Дополнительные сведения см. в разделе Создание, изменение и удаление моментальных снимков в журнале отчетов.

Время ожидания запроса

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

Сведения о настройке значения времени ожидания для запроса набора данных см. в разделе Как создать набор данных (службы Reporting Services).

Большие объемы сетевого трафика, которые вызывают появление времени ожидания для пользователя

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

Например, уменьшению времени ожидания для пользователя способствует применение следующих стратегий.

  • Содержание каталога сервера отчетов на том же компьютере, что и сервер отчетов.

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

  • Если источником данных является хранилище данных, то хранилище данных не должно находиться на том же серверном компьютере, что и сервер отчетов.

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

Затраты времени на обработку отчета слишком велики

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

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

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

Если в отчет включена ссылка на встроенное поле [&TotalPages], то обработчик отчетов должен разбить на страницы весь отчет, прежде чем подготовить первую страницу. Если же ссылка на поле [&TotalPages] не применяется, то первая страница может быть подготовлена и возвращена пользователю немедленно, без обработки остальной части отчета. Кроме того, обработчик отчетов действует на основе предположения, что любое сложное выражение в верхнем или нижнем колонтитуле может содержать прямую или косвенную ссылку на поле [&TotalPages].

Чтобы избежать разбиения обработчиком отчетов на страницы длинного отчета, не включайте ссылку на поле [&TotalPages] или сложные выражения в верхний и нижний колонтитул.

Отсутствие в отчете разрывов страниц

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

Модуль подготовки с мягкими разрывами страниц, такой как средство просмотра HTML-страниц, осуществляет разбиение на страницы автоматически. Это автоматическое поведение можно переопределить и установить, что отчет состоит из одной страницы, задав значение свойства отчета InteractiveHeight равное 0. Для модулей подготовки жестких разрывов страниц необходимо добавлять разрывы страниц вручную. Дополнительные сведения о типах модулей подготовки отчета см. в разделе Основные сведения о подготовке отчета к просмотру.

Убедитесь в том, что свойство InteractiveHeight не установлено равным 0 и что в качестве него задан какой-то допустимый размер страницы, например 8,5 дюймов. Добавьте разрывы страниц в элементы отчета или в группы табликса, чтобы организовать разбиение отчета на страницы. Это способствует уменьшению объема данных, которые нужно обрабатывать для каждой страницы. Дополнительные сведения см. в разделе Как добавить разрыв страницы (службы Reporting Services).

Сложное группирование области данных табликса и статистические функции

При наличии большого количества уровней вложенных или смежных групп в области данных табликса производительность обработки отчета может снизиться. Рассмотрим уровень группирования, т. е. число экземпляров групп, и использование статистических функций, которые требуют вычисления после применения выражений группирования, фильтрации и сортировки. Например, Previous является «дорогостоящей» статистической функцией, поскольку ее значение зависит от наличия отсортированных элементов области данных. С другой стороны, функция Sum не зависит от порядка сортировки и для нее требуется меньше ресурсов. Другими статистическими функциями, которые должны выполняться после сортировки, являются функции First и Last. Дополнительные сведения см. в разделе Использование встроенных функций отчета и статистических функций в выражениях (службы Reporting Services).

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

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

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

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

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

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

    • Сбор данных в хранилище данных и использование хранилища в качестве источника данных для одного набора данных.

    • Использование связанных серверов SQL Server и запись запроса, который извлекает данные из нескольких баз данных.

    • Использование возможности OPEN ROWSET для задания различных баз данных.

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

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

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

Время ожидания выполнения отчета

Применительно к выполнению больших отчетов рассматриваются два вида времени ожидания, которые должны быть настроены: время ожидания выполнения отчета и время ожидания ASP.NET.

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

Политика времени ожидания ASP.NET контролируется при помощи файла конфигурации сервера отчетов. Расположение файла по умолчанию: <диск>:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\web.config. Чтобы установить максимальное количество секунд на выполнение запроса, добавьте в этот файл элемент httpRuntime следующим образом.

<configuration>
   . . .
   <system.web.
      . . .
      <httpRuntime executionTimeout="90"/>
      . . .
   </system.web.
   . . .
</configuration>

В зависимости от размера отчета, это значение может составлять несколько часов.

Затрачивается слишком много времени на подготовку отчета к просмотру

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

Материал этого раздела используется для повышения производительности подготовки отчета к просмотру.

Отчет не оптимизирован для выбранного формата подготовки

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

  • Добавьте разрывы страниц там, где это имеет смысл. Например, каждый разрыв страницы в Excel определяет новый лист. Каждый лист позволяет обработать максимум 65000 строк. При установке разрывов страницы в отчете следует учитывать эти ограничения.

  • Для экспорта в Excel не объединяйте ячейки в области данных табликса. В отчетах свободной формы выравнивайте элементы отчета по вертикали. При наличии объединенных ячеек и невыровненных элементов применение функциональных средств Excel в экспортированном отчете нарушается.

  • Средство синтаксического анализа HTML становятся неэффективными при подготовке очень больших HTML-страниц. При возникновении проблем с подготовкой отчета выберите формат, приводящий к созданию файла меньшего размера (например, CSV). Если из-за недоступности панели инструментов отчета другой формат выбрать нельзя, то можно определить подписку, чтобы задать формат подготовки и доставлять отчет как статический документ в общую папку. Дополнительные сведения см. в разделе Доставка отчетов в общие папки с помощью служб Reporting Services.

Советы по проектированию для оптимизации обработки отчета

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

  • Для отчетов, имеющих большое количество экземпляров текстовых полей, установите свойства CanGrow и CanShrink текстовых полей в значение FALSE. По умолчанию каждая ячейка в области данных табликса содержит текстовое поле, поэтому общее число текстовых полей, которые должны быть подготовлены к просмотру, может быстро возрасти.

  • Для отчетов, имеющих большое количество изображений, задайте другое значение свойства AutoSize изображений, такое как Fit.

  • Для текстовых полей не задавайте значение свойства TextAlign равное General. Это значение требует применения условной обработки с учетом содержимого текстового поля.

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

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