Производительность SSRS - PullRequest
4 голосов
/ 04 декабря 2008

Я создал отчет SSRS для извлечения 55000 записей с использованием хранимой процедуры. когда выполнение из хранимого процесса занимает всего 3 секунды, но при выполнении из отчета SSRS - более одной минуты. Как я могу решить эту проблему?

Ответы [ 14 ]

12 голосов
/ 22 декабря 2008

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

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

5 голосов
/ 28 ноября 2012

У меня была такая проблема из-за перехвата параметров в моем SP. В SQL Management Studio при запуске SP я воссоздал его с новым планом выполнения (и вызов был очень быстрым), но в моих отчетах использовался старый неверный план (для другой последовательности параметров), и время загрузки было намного больше, чем в SQL MS.

2 голосов
/ 23 декабря 2008

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

1 голос
/ 18 апреля 2017

Вопрос архаичный, но из-за того, что подобные вещи периодически повторяются, мое «быстрое и грязное» решение по улучшению SSRS, которое отлично работает в крупных корпоративных средах (я предоставляю отчеты, которые могут содержать до 100 000+ строк в день), заключается в установите InteractiveSize страницы (например, установите для него размер A4 -21 см). Если для InteractiveSize задано значение 0, все результаты будут отображаться на одной странице, что буквально убивает производительность SSRS. В подобных случаях запросы, которые могут занимать несколько секунд в вашей БД, могут обрабатываться вечно (или вызывать исключение нехватки памяти, если на вашем сервере SSRS не имеется тонны избыточного H / W). Таким образом, в случае запросов / SP, которые выполняются достаточно быстро при прямом вызове и получают большое количество строк, установите InteractiveSize, и вам не придется беспокоиться о других, более сложных решениях.

1 голос
/ 24 ноября 2011

Используйте отчеты SSRS Performance Dashboard для устранения проблем.

0 голосов
/ 05 декабря 2017

У меня была похожая проблема: запрос, который возвращает 4000 строк и сам по себе выполняется за 1 секунду, занимал в SSRS так много времени, что время его ожидания истекло.

Оказалось, что проблема была вызвана тем, как SSRS обрабатывал многозначный параметр. Интересно, что если пользователь выбрал несколько значений, отчет формировался быстро (~ 1 секунда), но если было выбрано только одно значение, отчету потребовалось несколько минут.

Вот исходный запрос, который рендерится более чем в 100 раз дольше, чем следует:

SELECT ...
FROM   ...
WHERE  filename IN (@file);
-- @file is an SSRS multi-value parameter passed directly to the query

Я подозреваю, что проблема заключалась в том, что SSRS вводил всю исходную таблицу (более 1 миллиона строк) и затем выполнял фильтр на стороне клиента.

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

=JOIN(Parameters!file.Value,",")

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

SELECT ...
FROM   ...
WHERE  ',' + @filelist + ',' LIKE '%,' + FILENAME + ',%';
-- @filelist is passed to the query as the following expression:
-- =JOIN(Parameters!file.Value,",")

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

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

0 голосов
/ 02 июля 2017

В дополнение к ответу @ RomanBadiornyi попробуйте добавить

OPTION (RECOMPILE)

до конца вашего основного запроса в хранимой процедуре.

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

0 голосов
/ 25 апреля 2016

У меня была та же проблема ... это было действительно время рендеринга, но, более конкретно, это было из-за того, что SORT был в SSRS. Попробуйте перенести сортировку в хранимую процедуру и удалить все SORT из отчета SSRS. На строках 55К это значительно улучшится.

0 голосов
/ 07 марта 2016

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

0 голосов
/ 10 мая 2015

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

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

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

...