问题
I've installed a SQL Reporting server (2008 R2), with some reports. But I've some performances issues.
The first call of the day to the server(going on the report interface by example), is VERY slow(something like 30-45seconds at best).
The report generation is then "fast"(1-2 seconds).
The next calls to the server are always fasts until the next day. I've the impression that it loads a lot of thing in the memory. But what can takes 30-45 seconds to be loaded in memory??? And how to load it only once?
The server is good enough(quad core, 8GB of ram, never near its capacity for now).
What is the problem? How can I resolve this ?
Thoses reports will be launched only 4-5 times in a week, so they will always be slow if I can't change this. And since it's available for customer, I just can't make them understand this(and the report is called through a website, so I risk to have timeout).
Thank you very much
回答1:
It seems to be an SSRS issue. There is nothing wrong with your report.
It's "normal" that SSRS takes more time to load the first time you access it after a long time of inactivity. The issue is caused by the way how SSRS works and SSRS regularly restarts application domain after a specific time period. After the application domain is restarted, then upon first request to the SSRS it needs to load all the settings and it takes quite a long time.
This blog show's a workaround for the situation
回答2:
Here is the powershell script that I wrote to fix the problem. It is setup as a task to run every 1:00am:
Stop-Service "SQL Server Reporting Services (MSSQLSERVER)"
Start-Service "SQL Server Reporting Services (MSSQLSERVER)"
$wc = New-Object system.net.webClient
$cred = [System.Net.CredentialCache]::DefaultNetworkCredentials
$wc.Credentials = $cred
$src = $wc.DownloadString("http://localhost/Reports/Pages/Report.aspx?ItemPath=***NAME OF HOME PAGE***")
回答3:
The best solution I could come up with was to issue a 'curl' command to the http page of the report using via windows batch command in a windows service. This ran up the page(s) every morning before the users came in.
Don't have access to the code anymore (job was a while ago) but this question shows how to use curl:
http://blogs.plexibus.com/2009/01/15/rest-esting-with-curl/
回答4:
As Diego said, SSRS has some issues. The first call it is slow, regarding your server configuration. I recommend you the following config to add in rsreportserver.config (located if you don't know in C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\ )
If you want to increase the max memory used by SSRS: (which means 7 GB)
<WorkingSetMaximum>7000000</WorkingSetMaximum>
If you want to improve the first call, you can set (in minutes)
<RecycleTime>4320</RecycleTime>
Actually SSRS has a reset (recycle) time in which cleans its buffer. By default its setted at 720 min (12h) so thats why if you open a report every morning it actually load very slow. As you need you can set the recycle time higher (2-3 days). I don't recommend a higher time because the buffer will fill up and you will get only blank pages, so you will have to manually restart Reporting Services.
回答5:
It may be completely unrelated to SQL Server. Try to see if is not the code sign revocation list check issue, see Fix slow application startup due to code sign validation
回答6:
I converted the main query and the dropdown controls on the page to load from stored procedures, it made a difference of say 5 sec in the loading process.Avoid using any inline queries.
来源:https://stackoverflow.com/questions/11207049/sql-reporting-services-first-call-is-very-slow