Fast query runs slow in SSRS
Asked Answered
S

17

86

I have an SSRS report that calls out to a stored procedure. If I run the stored procedure directly from a query window, it will return in under 2 seconds. However, the same query run from an 2005 SSRS report takes up to 5 minutes to complete. This is not just happening on the first run, it happens every time. Additionally, I don't see this same problem in other environments.

Any ideas on why the SSRS report would run so slow in this particular environment?

Subsidiary answered 17/2, 2010 at 19:55 Comment(2)
Does your sp have paramaters?Harmonia
Yes, it has about 9 parameters. The report parameter types match the stored procedure parameter types.Subsidiary
S
123

Thanks for the suggestions provided here. We have found a solution and it did turn out to be related to the parameters. SQL Server was producing a convoluted execution plan when executed from the SSRS report due to 'parameter sniffing'. The workaround was to declare variables inside of the stored procedure and assign the incoming parameters to the variables. Then the query used the variables rather than the parameters. This caused the query to perform consistently whether called from SQL Server Manager or through the SSRS report.

Subsidiary answered 17/2, 2010 at 21:47 Comment(4)
This is a known issue of SQL Server... not actually related to SSRS itself.Argyres
Grrr! Thanks for posting solution and issue. It was optimizing correctly Fri, come in and it's DOA, reassign params to new vars and it's back to normal.Conlon
Rather than reassign all the variables you can also mark the query OPTIMIZE FOR UNKNOWN. See #12979993Perplexity
This worked for me as well. I only had to reassign one of four variables to make it work.Boxer
A
17

I will add that I had the same problem with a non-stored procedure query - just a plain select statement. To fix it, I declared a variable within the dataset SQL statement and set it equal to the SSRS parameter.

What an annoying workaround! Still, thank you all for getting me close to the answer!

Armure answered 20/9, 2011 at 18:52 Comment(2)
Thank you for sharing this. I was also doing the non-stored procedure method and this just saved me a lot of time.Chavey
parameter sniffing; esp if front end has bunch of params. re-setting them to internal params did the trick for me in past hence i vote for this answer. Re-compiled option did not work in my case of having 8 report params ; 3 with multi-parameter value(s).Aufmann
L
16

Add this to the end of your proc: option(recompile)

This will make the report run almost as fast as the stored procedure

Lyophobic answered 23/3, 2011 at 18:51 Comment(3)
This will actually recompile the stored procedure every time you run it. I'm not sure if it's a good solution as it kind of defeats the purpose of stored procedures.Brolly
If there is an individual query that is running slow, adding an option(recompile) at the query level can make a big difference. Just remember: recompilation = optimization. If you need the query to run in a very short time (100 ms or under, for example), then recompilation time might be unacceptable, and bypassing parameter sniffing may work better for you. But on large reports that take minutes to complete, the cost of recompilation is negligible compared to the penalty of having a bad query plan.Debbidebbie
I had the same issue and added option(recompile) at the end of the SP. The report rendered in under a second. I then removed it and the report still renders equally fast.Augustinaaugustine
A
12

I had the same problem, here is my description of the problem

"I created a store procedure which would generate 2200 Rows and would get executed in almost 2 seconds however after calling the store procedure from SSRS 2008 and run the report it actually never ran and ultimately I have to kill the BIDS (Business Intelligence development Studio) from task manager".

What I Tried: I tried running the SP from reportuser Login but SP was running normal for that user as well, I checked Profiler but nothing worked out.

Solution:

Actually the problem is that even though SP is generating the result but SSRS engine is taking time to read these many rows and render it back. So I added WITH RECOMPILE option in SP and ran the report .. this is when miracle happened and my problem got resolve.

Arteaga answered 18/10, 2012 at 21:32 Comment(0)
S
6

I had the same scenario occuring..Very basic report, the SP (which only takes in 1 param) was taking 5 seconds to bring back 10K records, yet the report would take 6 minutes to run. According to profiler and the RS ExecutionLogStorage table, the report was spending all it's time on the query. Brian S.'s comment led me to the solution..I simply added WITH RECOMPILE before the AS statement in the SP, and now the report time pretty much matches the SP execution time.

Sherri answered 18/8, 2011 at 12:59 Comment(0)
S
5

I simply deselected 'Repeat header columns on each page' within the Tablix Properties.

Starveling answered 7/10, 2012 at 22:5 Comment(1)
Yes, before deselecting my report rendered in approximately 10 seconds now it renders in 2 seconds.Starveling
B
5

If your stored procedure uses linked servers or openquery, they may run quickly by themselves but take a long time to render in SSRS. Some general suggestions:

  • Retrieve the data directly from the server where the data is stored by using a different data source instead of using the linked server to retrieve the data.
  • Load the data from the remote server to a local table prior to executing the report, keeping the report query simple.
  • Use a table variable to first retrieve the data from the remote server and then join with your local tables instead of directly returning a join with a linked server.

I see that the question has been answered, I'm just adding this in case someone has this same issue.

Bradford answered 24/3, 2014 at 18:52 Comment(0)
T
5

I had the report html output trouble on report retrieving 32000 lines. The query ran fast but the output into web browser was very slow. In my case I had to activate “Interactive Paging” to allow user to see first page and be able to generate Excel file. The pros of this solution is that first page appears fast and user can generate export to Excel or PDF, the cons is that user can scroll only current page. If user wants to see more content he\she must use navigation buttons above the grid. In my case user accepted this behavior because the export to Excel was more important.

To activate “Interactive Paging” you must click on the free area in the report pane and change property “InteractiveSize”\ “Height” on the report level in Properties pane. Set this property to different from 0. I set to 8.5 inches in my case. Also ensure that you unchecked “Keep together on one page if possible” property on the Tablix level (right click on the Tablix, then “Tablix Properties”, then “General”\ “Page Break Options”).

enter image description here

Trinidadtrinitarian answered 1/6, 2016 at 14:13 Comment(1)
This fixed it for me!Atrocious
F
4

I came across a similar issue of my stored procedure executing quickly from Management Studio but executing very slow from SSRS. After a long struggle I solved this issue by deleting the stored procedure physically and recreating it. I am not sure of the logic behind it, but I assume it is because of the change in table structure used in the stored procedure.

Funk answered 19/1, 2011 at 17:10 Comment(0)
M
3

I Faced the same issue. For me it was just to unckeck the option :

Tablix Properties=> Page Break Option => Keep together on one page if possible

Of SSRS Report. It was trying to put all records on the same page instead of creating many pages.

Maronite answered 18/7, 2012 at 18:42 Comment(0)
T
3

Aside from the parameter-sniffing issue, I've found that SSRS is generally slower at client side processing than (in my case) Crystal reports. The SSRS engine just doesn't seem as capable when it has a lot of rows to locally filter or aggregate. Granted, these are result set design problems which can frequently be addressed (though not always if the details are required for drilldown) but the more um...mature...reporting engine is more forgiving.

Tylertylosis answered 24/9, 2013 at 19:48 Comment(0)
A
3

I was able to solve this by removing the [&TotalPages] builtin field from the bottom. The time when down from minutes to less than a second.

Something odd that I could not determined was having impact on the calculation of total pages.

I was using SSRS 2012.

Al answered 20/4, 2017 at 17:4 Comment(0)
S
3

In my case, I just had to disconnect and connect the SSMS. I profiled the query and the duration of execution was showing 1 minute even though the query itself runs under 2 seconds. Restarted the connection and ran again, this time the duration showed the correct execution time.

Swain answered 11/8, 2017 at 21:37 Comment(0)
Y
1

Couple of things you can do, without executing the actual report just run the sproc from within the data tab of reporting services. Does it still take time? Another option is to use SQL Profiler and determine what is coming in and out of the database system.

Another thing you can do to test it, so to recreate a simple report without any parameters. Run the report and see if it makes a difference. It could be that your RS report is corrupted or badly formed that may cause the rendering to be really slow.

Yesterday answered 17/2, 2010 at 20:7 Comment(0)
S
1

Had the same problem, and fixed it by giving the shared dataset a default parameter and updating that dataset in the reporting server.

Shelah answered 12/8, 2014 at 22:49 Comment(0)
P
1

DO you use "group by" in the SSRS table?

I had a report with 3 grouped by fields and I noticed that the report runed very slowly despite having a light query, to the point where I can't even dial values in the search field.

Than I removed the groupings and now the report goes up in seconds and everything works in an instant.

Preach answered 17/7, 2016 at 5:59 Comment(0)
T
-1

In our case, no code was required.

Note from our Help Desk: "Clearing out your Internet Setting will fix this problem."

Maybe that means "clear cache."

Threnody answered 29/3, 2017 at 19:44 Comment(1)
That isn't very clear.Darondarooge

© 2022 - 2024 — McMap. All rights reserved.