为报表服务器应用程序配置可用内存

适用范围:SQL Server 2016 (13.x) Reporting Services 及更高版本 Power BI 报表服务器

有关与以前版本的 SQL Server Reporting Services (SSRS) 相关的内容,请参阅 SQL Server 2014 Reporting Services

重要

本文中的信息仅适用于 Power BI 报表服务器中与分页报表 (RDL) 相关的功能。 Power BI (PBIX) 报表及其在 Power BI 报表服务器中的计划刷新活动不受这些设置的影响。 有关计划刷新内存的帮助信息,请参阅 Power BI 报表服务器中计划的刷新疑难解答

尽管 Reporting Services 可以使用所有可用内存,但可以覆盖默认行为。 为分配给 Reporting Services 服务器应用程序的内存资源总量配置上限即可覆盖行为。 此外,您还可以设置阈值,以便报表服务器根据内存压力(低、中或高)来更改其排列请求优先级和处理请求的方式。 在内存压力较低时,报表服务器通过为交互式或按需报表处理提供一个略高的优先级进行响应。 在内存压力较高时,报表服务器使用多种方法在可用资源有限的情况下保持运行状态。

本文介绍了可指定的配置设置,以及当内存压力成为处理请求的一个考虑因素时服务器如何响应。

内存管理策略

Reporting Services 通过调整分配给特定的应用程序和特定类型的处理请求的内存量来响应系统资源约束。 在报表服务器服务中运行和受内存管理限制的应用程序包括:

  • Web 门户,即用于报表服务器的 Web 前端应用程序。

  • 报表服务器 Web 服务,用于交互式报表处理和按需请求。

  • 后台处理应用程序,用于计划的报表处理、订阅传递和数据库维护。

内存管理策略适用于整个报表服务器服务,而不适用于进程中运行的单个应用程序。

如果系统没有内存压力,则每个服务器应用程序在启动时(收到请求前)都会请求一些内存,以便在最终收到请求时提供最优性能。 当产生内存压力时,报表服务器就会调整其进程模型,如下表中所述。

内存压力 服务器响应
继续处理当前请求。 几乎总是接受新请求。 定向到后台处理应用程序的请求优先级低于定向到报表服务器 Web 服务的请求优先级。
中型 继续处理当前请求。 可能会接受新请求。 定向到后台处理应用程序的请求优先级低于定向到报表服务器 Web 服务的请求优先级。 所有三种服务器应用程序的内存分配都将减少,但后台处理应用程序的内存减少相对更多,以便为 Web 服务器请求提供更多可用内存。
进一步减少内存分配。 拒绝要请求更多内存的服务器应用程序。 当前请求的速度将会降低,完成所需的时间会更长。 不接受新请求。 报表服务器将内存中的数据文件交换到磁盘。

如果内存约束很严格,因此没有可用于处理新请求的内存,则报表服务器返回 HTTP 503 服务器不可用的错误。 当前请求完成时会出现这种结果。 在某些情况下,可以回收应用程序域以立即减少内存压力。

尽管无法对不同内存压力情况自定义报表服务器响应,但可以指定配置设置,以定义区分高、中和低内存压力响应的边界。

何时自定义内存管理设置

默认设置为低、中和高内存压力指定了不同的范围。 默认情况下,低内存压力区域大于中内存压力和高内存压力区域。 此配置最适于处理平均分发或增量增加或减少的负载。 在这种情况下,各区域之间的切换是渐进的,因此报表服务器有时间调整其响应。

如果负载模式包含峰值,修改默认设置将非常有用。 当处理负荷中突然出现峰值时,报表服务器可能会快速从无内存压力状态转为内存分配失败状态。 如果同时启动了某个占用大量内存的报表的多个并发实例,则可能会出现这种结果。 若要处理此类型的处理负荷,需要将报表服务器尽可能移动到中或高内存压力响应中,以便降低处理速度。 此配置可以完成更多请求。 为完成更多请求,应该降低 MemorySafetyMargin 的值,使低内存压力区域相对于其他区域更小。 此操作会导致对中内存压力和高内存压力的响应更早发生。

内存管理配置设置

控制报表服务器的内存分配的配置设置包括 WorkingSetMaximumWorkingSetMinimumMemorySafetyMarginMemoryThreshold

  • WorkingSetMaximumWorkingSetMinimum 用于定义可用内存的范围。 您可以配置这些设置,以便为报表服务器应用程序设置可用内存范围。 如果要在同一台计算机上托管多个应用程序,此内存可能很有用。 可以确定报表服务器相对于同一台计算机上的其他应用程序消耗的系统资源过多。

  • MemorySafetyMarginMemoryThreshold 用于设置低、中和高级别的内存压力的边界。 对于每种状态,Reporting Services 都会采取纠正操作,以确保相对于计算机上的可用内存量对报表处理和其他请求进行相应处理。 您可以指定配置设置以确定低、中和高压力级别之间的说明。

    尽管可以更改配置设置,但这样不会提高报表处理性能。 仅当请求在完成之前被删除时,更改配置设置才有用。 提高服务器性能的最佳方法是在专用计算机上部署报表服务器或单个报表服务器应用程序。

下图显示了如何综合使用这些设置来区分低、中和高级别的内存压力:

Screenshot of the configuration settings for memory state.

下表介绍了 WorkingSetMaximumWorkingSetMinimumMemorySafetyMarginMemoryThreshold 设置。 配置设置是在 RSReportServer.config 文件中指定的。

元素 说明
WorkingSetMaximum 指定内存阈值,在超出此值后将不会向报表服务器应用程序授予任何新的内存分配请求。

默认情况下,报表服务器将 WorkingSetMaximum 设置为计算机上的可用内存量。 启动服务时,将会检测此值。

除非手动添加,否则此设置不会显示在 RSReportServer.config 文件中。 如果希望报表服务器使用较少的内存,则可修改 RSReportServer.config 文件并添加该元素和值。 有效值的范围为 0 到最大整数之间。 此值以 KB 为单位表示。

达到 WorkingSetMaximum 的值后,报表服务器将不接受新请求。 允许完成当前正在执行的请求。 只有当所用内存低于通过 WorkingSetMaximum 指定的值时,才会接受新的请求。

如果现有请求在达到 WorkingSetMaximum 值后继续占用额外内存,则将回收所有报表服务器应用程序域。 有关详细信息,请参阅 Application Domains for Report Server Applications
WorkingSetMinimum 指定资源消耗的下限;如果内存使用总量低于此限制值,报表服务器不会释放内存。

默认情况下,将在服务启动时计算该值。 计算结果为初始内存分配请求占 WorkingSetMaximum 的 60%。

除非手动添加,否则此设置不会显示在 RSReportServer.config 文件中。 如果要自定义此值,必须将 WorkingSetMinimum 元素添加到 RSReportServer.config 文件中。 有效值的范围为 0 到最大整数之间。 此值以 KB 为单位表示。
MemoryThreshold 指定 WorkingSetMaximum 的百分比,该百分比用于定义高压情况和中压情况之间的边界。 如果报表服务器内存使用情况达到此值,报表服务器将降低请求处理速度,并更改分配给其他服务器应用程序的内存量。 默认值为 90。 此值应大于为 MemorySafetyMargin 设置的值。
MemorySafetyMargin 指定 WorkingSetMaximum 的百分比,该百分比用于定义中压情况和低压情况之间的边界。 此值是为系统保留的可用内存百分比,无法用于报表服务器操作。 默认值为 80。

注意

MemoryLimitMaximumMemoryLimit 设置在 SQL Server 2008 (10.0.x) 和更高版本中已过时。 如果升级现有安装或使用包含这些设置的 RSReportServer.config 文件,报表服务器将不再读取这些值。

内存配置设置示例

下面的示例显示了使用自定义内存配置值的报表服务器计算机的配置设置。 如果要添加 WorkingSetMaximumWorkingSetMinimum,必须在 RSReportServer.config 文件中键入这些元素和值。 两个值都是整数,表示要分配给服务器应用程序的 RAM(以 KB 为单位)。 下面的示例指定报表服务器应用程序的总内存分配不能超过 4 GB。 如果 WorkingSetMinimum 的默认值(WorkingSetMaximum 的 60%)是可以接受的,则可忽略该值并在 RSReportServer.config 文件中仅指定 WorkingSetMaximum。 此示例包括 WorkingSetMinimum 以说明在要添加该元素时的显示方式:

      Config files 
      <MemorySafetyMargin>80</MemorySafetyMargin>  
      <MemoryThreshold>90</MemoryThreshold>  
      <WorkingSetMaximum>4000000</WorkingSetMaximum>  
      <WorkingSetMinimum>2400000</WorkingSetMinimum>  

关于 ASP.NET 内存配置设置

尽管 2016 及更高版本的报表服务器 Web 服务和 Web 门户是 HTML5 应用程序,早期版本是 ASP.NET 应用程序,但这些应用程序都不会响应在 IIS 5.0 及更高兼容性模式下运行的 ASP.NET 应用程序的 machine.config 的 processModel 部分中指定的内存配置设置。 Reporting Services 仅从 RSReportServer.config 文件中读取内存配置设置。

RsReportServer.config 配置文件
修改 Reporting Services 配置文件 (RSreportserver.config)
报表服务器应用程序的应用程序域