症状
假设你使用的是 Microsoft SQL Server 2016 Analysis Services 实例。 当正在缓存更多和更多全局范围对象时,这些缓存永远不会清理。 这可能会导致内存持续增长,并且最终服务器可能会崩溃。全局范围基于每个用户的安全要求进行缓存。 因此,你通常仅在遇到以下情况之一时才会遇到此问题:
-
在模型中有动态表达式(例如, UserName ()、 CustomData ())。 这不是为了查看问题所必需的,但这是一个常见原因。 当存在动态表达式时,每个唯一用户都需要生成其自己的唯一全局范围。 这会导致需要创建和缓存的全局范围的数量大大增加。
-
你有一个复杂的模型,其中包含许多元数据和安全性。 这会影响每个 scope 对象的内存成本。 随着缓存的全局范围数的增加,内存占用率会根据每个 scope 对象的内存成本而增加。
-
您有大量与服务器连接的唯一用户。 例如,PowerBI.com 可能会频繁地针对每个用户在其仪表板中刷新磁贴。 发生这种情况时,Analysis Services 将为每个唯一用户收到大量连接和查询,并且全局范围的数量将会出现,并占用大量内存。
注意:应用此修补程序后,将 13.0.2170.0 SQL Server 版本。
解决方案
累积更新信息
针对此问题的修复包括在 SQL Server 的以下累积更新中:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
解决方法
若要解决此问题,请按照适当的计划,手动运行 <ClearCache> XMLA 命令发送到数据库。 这将允许清除所有全局范围缓存,并且内存将再次减少。 此选项将在你下次连接时导致某些性能开销,因为你将无法重复使用缓存的全局范围。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于描述软件更新的 术语 。