Windows Server 2008 上的 SSAS 2008 面临严重内存压力

Windows Server 2008 上的 SSAS 2008 面临严重内存压力

我有一个 SQL Server 2008 Analysis Services 实例,运行在 Windows Server 2008 x64 上,服务器上有 8GB 的​​ RAM。所有内存设置均保留为默认值。

SSAS 服务启动时,其行为正常。但是,每当针对实例运行查询时,SSAS 服务都会持续消耗服务器上的所有内存,以至于需要重新启动服务器。目前,TotalMemoryLimit 和 LowMemoryLimit 设置分别设置为 80% 和 75%。HardMemoryLimit 默认设置为 0。

尽管设置了限制,为什么 SSAS 仍使用服务器上的所有内存?是否需要设置 HardMemoryLimit?

答案1

我会检查 perfmon 计数器以确认究竟是什么在使用内存 - 目前尚不清楚您是否使用任务管理器来识别使用情况。分析服务应该在总内存限制时达到内存峰值。查询是否继续运行?- 为什么必须重新启动?是为了终止正在进行的查询吗?我会检查清洁计数器以查看问题是否存在 - 最终您可能只需要为正在运行的查询添加更多内存或查看您的多维数据集设计

答案2

来自technetSQL Server 2005 分析服务 (SSAS) 服务器属性

SSAS 有一个特殊的内存“清理器”后台线程,它不断确定是否需要清理内存。清理器会查看使用的内存量。清理器使用以下基本进程来控制分析服务器使用的物理内存量:

如果使用的内存高于 TotalMemoryLimit 属性中设置的值,则清理器会清理到该值。

如果使用的内存低于 LowMemoryLimit 属性中设置的值,清理器将不执行任何操作。

如果使用的内存介于 LowMemoryLimit 和 TotalMemoryLimit 属性中设置的值之间,则清理器会根据需要清理内存。

如果任何这些属性中指定的值介于 0 和 100 之间,SSAS 会将该值视为总物理内存的百分比。如果指定的值大于 100,SSAS 会将该值视为绝对内存值(以字节为单位)。请注意,当分析服务器正在处理时,如果它需要的额外内存超过 TotalMemoryLimit 中指定的值,它将尝试保留该数量,而不管 TotalMemoryLimit 值是多少。

请注意,MaxTotalMemory 并未定义 Analysis Services 使用的内存量的硬性限制。相反,它是一个软性限制,用于识别服务器遇到内存压力的情况。对于某些操作(例如处理),如果 Analysis Services 需要的内存超出 Memory\TotalMemoryLimit 的值,则 Analysis Services 服务器会尝试保留该内存,而不管该属性的值是多少。

简而言之,在高负载时,TotalMemoryLimit 可以被传递下去。

性能指南

当并行处理多个分区或在单个事务中处理整个多维数据集时,必须确保所需的总内存不超过 Memory\TotalMemoryLimit 设置的值。如果 Analysis Services 在处理过程中达到 Memory\TotalMemoryLimit,则不允许聚合缓冲区增长,并且可能导致在聚合处理过程中使用临时文件。

此外,大多数人在装有 SQL 的机器上运行 SSAS。请记住为操作系统和轻量级服务保留 1.5-2GB,然后设置并添加 SQL 内存最小值(1GB?2?)加上大约 0.5GB 用于 SQL 开销(内存设置缓冲区缓存大小,而不是 sql 使用的所有内存)。现在根据此设置内存限制百分比。100-(100*(os+sql)/total)。

如果您有 4gb 用于 SQL 和操作系统,则将 TotalMemoryLimit 设置为 50 (100-(100*4/8))。请注意临时文件问题...如果它占用了您机器上的所有内存,那么全多维数据集处理可能确实需要那么多的工作空间!

相关内容