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

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

SSAS服务启动时,performance正常。 但是,无论何时对该实例运行查询,SSAS服务将不断消耗服务器上的所有内存,以至于服务器需要重新启动。 目前,TotalMemoryLimit和LowMemoryLimit设置分别设置为80%和75%。 HardMemoryLimit默认设置为0。

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

我会检查perfmon计数器,以确认什么是确切地使用内存 – 目前还不清楚,如果你正在使用任务pipe理器来确定使用。 分析服务应该在内存总量限制下logging内存。 查询是否继续运行? – 为什么你必须重新启动? 是要杀死正在进行的查询? 我会检查清洁计数器,看看问题是否存在 – 最终,您可能只需要为正在运行的查询添加更多的内存,或者查看您的多维数据集devise

从technet SQL Server 2005分析服务(SSAS)服务器属性

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

如果使用的内存大于TotalMemoryLimit属性中设置的值,清理器将清除该值。

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

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

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

请注意,MaxTotalMemory不会定义Analysis Services使用的内存量的硬性限制。 相反,这是一个软限制,用于识别服务器正在经历内存压力的情况。 对于某些操作(如处理),如果Analysis Services需要超出Memory \ TotalMemoryLimit值的额外内存,Analysis Services服务器将尝试保留该内存,而不考虑该属性的值。

总之,TotalMemoryLimit可以在重载时传递。

从SSASPerfGuide :

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

另外大多数人在具有SQL的盒子上运行SSAS。 记住保留1.5-2GB的操作系统和灯光服务,设置,然后添加最less的SQL内存(1GB?2?)加上约0.5GB的SQL开销(内存设置缓冲区caching大小,不是所有的内存,SQL使用)。 现在基于此设置内存限制百分比。 100-(100×(OS + SQL)/总)。

如果您有4GB用于SQL和操作系统,那么将TotalMemoryLimit设置为50(100-(100 * 4/8))。 注意临时文件的问题…如果它抓住你的盒子上的所有内存,那么全立方体处理可能真的需要这么多的工作空间!