Wednesday, March 21, 2012

Reporting Services MemoryLimit

We're having trouble with memory configuration in Reporting Services 2k5 SP1, running on Win 2k3 SP1. We have a very large report, which we've been running to benchmark performance.

First, here are the results of our testing:

    Initially, the server had 512mb of RAM. When running the report, the w3wp.exe process used up to 400mb of RAM and Reporting Services usually timed out before delivering the report.

    We increased the RAM in the server to 1024mb, and found we could run the report. It took around 02'30" to complete, and the w3wp.exe process peaked at 520mb of RAM usage. When we tried to run two instances of the report concurrently, RAM usage peaked around 800mb, and Reporting Services timed out before delivering the reports.

    Increasing the server RAM to 1536mb, we found could run two reports at once. It took around 04'05" to deliver the reports, and the w3wp.exe process peaked at 920mb of RAM usage. When we tried running three reports concurrently, RAM usage peaked around 1,220mb of RAM and Reporting Services usually timed out before delivering the reports.

    Lastly, we put 2048mb of RAM in the server, and we could run three reports at once. It took around 06'58" to deliver the reports, and the w3wp.exe process peaked at 1,280mb of RAM usage. When we tried running four reports concurrently, RAM usage peaked around 1,290mb and Reporting Services died with a System.OutOfMemoryException exception.

The pattern we noticed with the first three steps, was that Reporting Services isn't using more than 80% of the physical RAM available on the server:

    400mb / 512mb = roughly 80%

    800mb / 1024mb = roughly 80%

    1,220mb / 1536mb = roughly 80%

    1,290mb / 2048mb = roughly 63%

Following the directions in "Configuring Available Memory for Reporting Services" (http://msdn2.microsoft.com/en-us/library/ms159206.aspx), we tried increasing the MemoryLimit of both the Web Service and the Windows Service.

We changed the memoryLimit in machine.config to:

<processModel autoConfig="true" memoryLimit="120" />

and the memoryLimit in rsreportserver.config to:

<MemoryLimit>120</MemoryLimit>
<MaximumMemoryLimit>140</MaximumMemoryLimit>

It looks like the ReportServer is reading this, as when it is restarting, the ReportServer_*.log file records:

w3wp!library!1!11/10/2006-10:20:56:: i INFO: Initializing MemoryLimit to '120' percent as specified in Configuration file.
w3wp!library!1!11/10/2006-10:20:56:: i INFO: Initializing MaximumMemoryLimit to '140' percent as specified in Configuration file.

However, it doesn't go above this 80% threshold.

More concerning is the System.OutOfMemoryException exception described above. Following the suggestions in KB 909678, we've tried tweaking the MemoryLimit and there is clearly still plenty of RAM left available on the server. This is happening repeatedly when we try to run four instances of the report concurrently.


Are there other parameters we should be adjusting to ensure Reporting Services uses the available RAM?


Thanks,
Andrew

Hi

We've made no progress on this issue.

Has anyone else found that setting the memoryLimit in the processModel element of machine.config seems to have no effect?

Thanks,
Andrew

|||

The memoryLimit setting in machine.config is deprecated if you are running IIS6. You should define worker process memory limits in IIS metabase, or use IIS manager UI.

I am curious about two things:

1. Is the other 20% of memory unused, or taken up by other processes?

2. Is there a timeout setting that can be tweaked?

|||

Sorry if that wouldn't be exactly on topic, but...

Having a report that is running for 2 1/2 hours is an issue by itself. Considering that report is based on a set of stored procedures, I would instead work on tweaking these stored procedures as well as settings on the SQL server that is providing you with such timing! Data volume returned by the SSRS is not an issue, report design is.

|||

We faced similar problems...

make sure that all the data area id's in the tables are connected to each other on an inner join (respective relationships maintained) ...

That will stop the memory leak ...and improve perfomance drastically

|||Are you suggesting that the queries that the report runs off of use inner joins? Or something else? Please give more detail.|||

Hi Glen

02'30" = two minutes and thirty seconds, not two hours and thirty minutes.

Thanks,
Andrew

No comments:

Post a Comment