Reporting Services 2008 R2 - slow response on first report and after a certain timeout period
We are using Reporting Services 2008 R2. We have a Windows Forms client with a main form using a webbrowser control to display the report Home page provided by Reporting Services. We are finding that the loading of this page is very inconsistent. The first time we load the Windows Forms client at the start of the day the page takes too long, more than 10 seconds. After the first access, the Home Page displays in less than a second. If we don't access the Reporting Services for 20 minutes (estimate), we are back to the 10 seconds for initial load. Can someone explain what is going on? We have tried to create a subscription to a simple report, this didn't help. We tried to create a console app to make a web request to the reporting services url every 10 minutes, this didn't help. We have looked at the rsreportserver.config and the RecycleTime entry put that doesn't really make sense why this would need to be increased considering it's at 12 hours by default. The issue that we seem to be having is happening on a shorter interval. Does anyone have any suggestions? Thank you!
April 14th, 2011 1:39pm

This is totally understandable and a side-effect of Reporting Services' architecture. Consider that RS is a managed code application that's persisted on disk as an executable but in IL (intermediate language) which must be compiled to machine-code before it can be run. This compile phase is only repeated when the service has not been used in awhile. If left idle, the system will mark the assembly as "discardable" and permit it to be overlaid by other operations. 20 minutes is about right. While this behavior is normal, it can be avoided by periodically nudging RS to "stay alive" during the workday but this does not seem to be helping. Question: how much RAM do you have on the server? Is it under stress? Is the RS server sharing resources with other operations like SQL Server? If so, we suggest moving the RS service to another dedicated server. Consider that the ReportViewer ASPx also needs to be compiled as a server-side assembly. Are you keeping that in memory and active as well? Personally, I have had a lot of luck with refreshing a browser page with the Report Manager loaded to keep it alive during my webinars. __________________________________________________________________ William Vaughn Mentor, Consultant, Trainer, MVP http://betav.com http://betav.com/blog/billva http://www.hitchhikerguides.net “Hitchhiker’s Guide to Visual Studio and SQL Server (7th Edition)” Please click the Mark as Answer button if a post solves your problem!
Free Windows Admin Tool Kit Click here and download it now
April 14th, 2011 2:27pm

Hi William, Thank you for your response. I don't think the RAM is an issue. The command line ping application that I created uses a WebRequest to request the report using the following url: http//server/Reports/Pages/Report.aspx?ItemPath=%2fRestartReport . I then added this to my task scheduler. I left this running for every 5 minutes over a weekend and came back in Monday morning and it took the 10 to 12 seconds to load. So I looked at your post and created a windows forms app that has a web browser and a timer control. I set the default url to the same url as above and have the timer set to an interval of every 4 minutes to refresh the web browser's request. I left this running over the weekend and came back in Monday morning and it took less than a second to load the Home Page. What gives? Here is the code from the command line app: private bool StartProcess(string urlPath) { bool success = true; Uri siteUri = null; WebRequest request = null; try { siteUri = new Uri(urlPath); request = WebRequest.Create(siteUri); request.Credentials = CredentialCache.DefaultCredentials; // Get the response. using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { // Display the status. Console.WriteLine(response.StatusDescription); // Get the stream containing content returned by the server. using (Stream dataStream = response.GetResponseStream()) { // Open the stream using a StreamReader for easy access. using (StreamReader reader = new StreamReader(dataStream)) { // Read the content. string responseFromServer = reader.ReadToEnd(); // Display the content. Console.WriteLine(responseFromServer); } } } else { throw new ApplicationException("status code is not Ok it was" + response.StatusCode.ToString()); } } } catch (Exception ex ) { Console.WriteLine(ex.Message); success = false; } return success; } Anyways at least we found a work around for now. Thanks again for your comments. Brad
April 27th, 2011 1:11pm

I still suspect that the fact you're pinging with a component that needs refreshing is keeping the interface and the reporting services engine "alive". If you need the report to be interactive (and responsive) at 07:00 - 19:00, I would keep the app running just during those times.__________________________________________________________________ William Vaughn Author, Mentor, Trainer, MVP Beta V Corporation William Vaughn's blog Hitchhikers Guide to Visual Studio and SQL Server (7th Edition) The Owl Wrangler a fantasy fiction novel Please click the Mark as Answer button if a post solves your problem!
Free Windows Admin Tool Kit Click here and download it now
April 27th, 2011 5:07pm

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics