清除 Analysis Services 缓存

Analysis Services 缓存数据以提高查询性能。 本主题提供有关使用 XMLA ClearCache 命令清除为响应 MDX 查询而创建的缓存的建议。 运行 ClearCache 的效果因使用的是表格模型还是多维模型而异。

何时清除多维模型的缓存

对于多维数据库,Analysis Services 在评估计算时在公式引擎中生成缓存,并在存储引擎中生成维度查询结果和度量组查询结果的缓存。 当公式引擎需要单元格坐标或子立方体的度量数据时,就会发生度量值组查询。 查询非自然层次结构或应用自动存在功能时,会发生维度查询。

执行性能测试时,建议清除缓存。 通过清除测试运行之间的缓存,可确保缓存不会扭曲任何测量查询设计更改影响的测试结果。

何时清除表格模型的缓存

表格模型通常存储在内存中,在执行查询时执行聚合和其他计算。 因此,ClearCache 命令对表格模型的影响有限。 对于表格模型,如果 MDX 查询针对它运行,数据可能会添加到 Analysis Services 缓存中。 具体而言,由 MDX 和 Autoexists 操作引用的 DAX 度量值可以分别在公式缓存和维度缓存中缓存结果。 但是,请注意,非自然层次结构和度量值组查询不会在存储引擎中缓存结果。 此外,请务必认识到 DAX 查询不会在公式和存储引擎中缓存结果。 由于 MDX 查询导致缓存存在,针对表格模型运行 ClearCache 将使系统中的任何缓存数据失效。

运行 ClearCache 还会清除 xVelocity 内存中分析引擎 (VertiPaq) 中的内存中缓存。 xVelocity 引擎维护一小部分缓存结果集。 运行 ClearCache 会在 xVelocity 引擎中使这些缓存失效。

最后,运行 ClearCache 还会删除在为 DirectQuery 模式重新配置表格模型时内存中留下的残差数据。 如果模型包含受严格控制约束的敏感数据,这一点尤其重要。 在这种情况下,运行 ClearCache 是一项预防措施,可以采取一项预防措施,以确保敏感数据仅存在于预期所在的位置。 如果使用 Management Studio 部署模型并更改查询模式,则需要手动清除缓存。 相比之下,使用 SQL Server Data Tools 指定 DirectQuery 模型和分区会在将模型切换为使用该查询模式时自动清除缓存。

与在性能测试期间清除多维模型缓存的建议相比,没有关于清除表格模型缓存的广泛建议。 如果不管理包含敏感数据的表格模型的部署,则没有用于清除缓存的特定管理任务。

清除 Analysis Services 模型的缓存

若要清除缓存,请使用 XMLA 和 SQL Server Management Studio。 可以在数据库、多维数据集、维度、表或度量组级别清除缓存。 在数据库级别清除缓存的步骤适用于多维模型和表格模型。

注释

严格的性能测试可能需要更全面的方法来清除缓存。 有关如何刷新 Analysis Services 和文件系统缓存的说明,请参阅 SQL Server 2008 R2 Analysis Services 操作指南中的清除缓存部分。

对于多维模型和表格模型,清除其中一些缓存可能是一个两步过程,包括在执行 ClearCache 时使缓存失效,然后在收到下一个查询时清空缓存。 仅当缓存实际清空后,内存消耗就会明显减少。

清除缓存需要向 XMLA 查询中的语句提供对象标识符 ClearCache 。 本主题中的第一步介绍如何获取对象标识符。

步骤 1:获取对象标识符

  1. 在 Management Studio 中,右键单击某个对象,选择“ 属性”,然后从 “属性” 窗格中的 ID 属性复制值。 此方法适用于数据库、多维数据集、维度或表。

  2. 若要获取度量值组 ID,请右键单击度量值组,然后选择“ 脚本度量值组为”。 选择 “创建 ”或 “更改”,并将查询发送到窗口。 度量值组的 ID 将在对象定义中可见。 复制对象定义的 ID。

步骤 2:运行查询

  1. 在 Management Studio 中,右键单击数据库,指向 “新建查询”,然后选择 “XMLA”。

  2. 将以下代码示例复制到 XMLA 查询窗口中。 将 DatabaseID 更改为当前连接上数据库的 ID。

    <ClearCache xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">  
      <Object>  
        <DatabaseID> Adventure Works DW Multidimensional</DatabaseID>  
      </Object>  
    </ClearCache>  
    
    

    或者,可以指定子对象(如度量值组)的路径,以便仅清除该对象的缓存。

    <ClearCache xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">  
      <Object>  
        <DatabaseID>Adventure Works DW Multidimensional</DatabaseID>  
            <CubeID>Adventure Works</CubeID>  
            <MeasureGroupID>Fact Currency Rate</MeasureGroupID>  
      </Object>  
    </ClearCache>  
    
  3. 按 F5 执行查询。 应该会看到以下结果:

    <return xmlns="urn:schemas-microsoft-com:xml-analysis">  
      <root xmlns="urn:schemas-microsoft-com:xml-analysis:empty" />  
    </return>  
    

另请参阅

为 Analysis Services 中的管理任务编写脚本
监控分析服务实例