Data Hub reports are cached on the server-side for optimal performance, with RAM being used as a storage for cached data. The cache is valid for a short period of time, after which it should be released.
However, in certain circumstances the memory consumption can be high and not be properly reclaimed, if many medium-to-big reports are generated in a short period of time, where the summary size of the cached data exceeds the available RAM. The exact conditions may vary from machine to machine, but on a typical setup this can be produced by generating a large report, consisting of around 40 000 pages.
If this happen, the following symptoms may be observed:
- IIS process i3wp.exe may constantly indicate high memory usage (several gigabytes) which is not reclaimed.
- The instance may reply with HTTP error 500 to endpoint requests.
- The hosting server may become slow.
As of time of the writing, the solution is to ensure the reports size is kept to minimum required. Reports with many thousands or hundreds of thousands of pages are not recommended, and may cause performance issues. Use filters (either dynamic or on the data source level) to ensure, that the number of reported pages is reasonable.
In order to make the instance responsible, even if a large report hits the memory limits, the solution is to ensure that an automatic recycling is performed by the IIS server, once the memory consumption hits a certain limit (for example when private memory exceeds 75% of total available RAM).
Note: Applying this configuration tweak will ensure the instance remain responsive, with its memory reclaimed. Generating of huge reports will still fail - it is recommended to use a set of filters or conditions to ensure only the relevant data is being reported.
1. Open Internet Information services (IIS) Manager from "Administrative Tools"
2. Go to Application Pools:
3. Select "DataHubPool" from list of Application Pools
4. Select "Advanced Settings"
5. Select "Recycling" and set "Private Memory Limit (KB) to 75% of total available RAM (e.g. 12000000 on total RAM 16 GB)