【问题标题】:Do Clustered Columnstore Indexes Affect SSAS Query End User Performance聚集列存储索引会影响 SSAS 查询最终用户性能吗
【发布时间】:2019-09-02 12:01:35
【问题描述】:

聚集列存储索引是否会影响最终用户的 SSAS 性能查询,如何解决这个问题? 在此处阅读下面的文章排序顺序如何影响 SSAS 查询客户用户性能。

有没有办法解决这个问题?

重建 SSAS 索引/聚合是否有效?已经知道将多维数据集从数据仓库处理到 SSAS 的时间可能会受到影响。真正关心的是最终客户-用户 SSAS 查询体验。

目前在 SSAS Cube 中实现多维模型。

【问题讨论】:

  • 你有足够的规模来担心这个吗?在这些问题成为重大问题之前,您需要拥有 100GB 以上的多维数据集。
  • 您确定一开始就有问题吗?这个问题是关于多维数据集处理,而不是最终用户查询。多维数据集在处理过程中必须从表中读取所有数据,这意味着它需要在列存储的字典中抓取压缩存储桶以从列中重构行。这显然比直接从另一个表中读取行要慢。
  • 最终用户对 SSAS 多维数据集的查询根本不会受到影响,除非该多维数据集必须从列存储中读取。如果必须这样做,它可能会更快,因为列存储对于聚合查询要快得多
  • 具有正确设计和调整的列存储表you could use both columnstores and SSAS in DirectQuery mode
  • 同时检查Overview of SSAS Tabular in DirectQuery Mode for SQL Server 2016。对于某些场景,在列存储索引上使用 SSAS 和 DirectQuery 实际上可能是一个的主意。

标签: sql-server ssas performance-testing sql-server-2016 ssas-2016


【解决方案1】:

嗯,这取决于。让我们从问题定义开始。

  • SSAS 多维在处理步骤中输入有序数据时表现更好。这个article 为您提供了数据排序的原因和见解。
  • SSAS 索引和聚合处理不会修复未排序的源数据;因此,它不会解决上述问题。这些处理任务基于接收到的数据构建工件,并且无法修复数据本身的问题。
  • MS SQL 列存储索引大致是一种新的存储技术——列存储压缩应用于堆表。与具有聚集索引的表相比,这提供了快速插入(无需索引,无需预排序)。缺点 - 对具有聚集索引的表的 SELECT 查询可能会返回基于聚集索引排序的行(除非您使用 ORDER BY 语句设置排序),而在聚集列存储表将产生未排序的数据。
    使用聚集列存储索引的未排序数据问题不仅会影响 SSAS,而且当 CCI 可以这样做时,它会降低查询性能,称为段消除。有一些技术可以解决这个问题 - 在将常规表转换为 CCI 之前对数据进行排序,或者在加载到 CCI 表时对数据进行排序。
  • discussion you mentioned 的主要问题是数据排序是通过 SQL 级别的附加视图完成的。然后作者在 SSAS 上定义分区,并报告 SSAS 生成的查询具有次优的执行计划。

关于无序数据的 SSAS 性能。它肯定会是次优的,但到什么程度呢?事实上,只有测试才会显示出来;它可能取决于多种因素——初始数据集、多维数据集设计、最终用户查询。立方体结构的增长会减慢操作,但会减慢多少?根据经验 - 如果多维数据集为 100+ GB 并且其最大的分区/度量组超过 SSAS 使用的 RAM 的 10%,我会费心并努力提供数据排序。在其他情况下,我不会理会这样的问题。

从 CCI 订购数据。首先,避免过时的语法

SELECT TOP 2147483647 ... FROM ... ORDER BY ...  

使用符合 ANSI 标准且限制较少

SELECT ... FROM ... ORDER BY ... OFFSET 0 ROWS  

关于在 SSAS 分区定义中使用时的次优执行计划。不幸的是,SSAS 查询生成引擎不允许神奇的option (recompile)。同样,如果这是一个严重的问题 - 定义一个表值函数(参数视图)以实现最佳执行计划,并在 SSAS 分区定义中使用此 TVF。

如果这是该项目的第一次实施 - 我会不采取此类措施并将其报告为 项目风险,这需要注意以取得成效,并且可能 - 之后需要额外的努力。

很遗憾,重建 SSAS 索引/聚合不会改善这种情况。输入 SSAS 时,您需要在 DB 查询级别对数据进行预排序。

【讨论】:

  • 这是一个很棒的答案,JoeSmith 的同事,我猜最后一个问题是“有什么办法可以解决这个问题吗?重建 SSAS 索引/聚合是否可行?”
  • @TomBook,不幸的是,不,重建 SSAS 索引/聚合不会改善这种情况。输入 SSAS 时,您需要在 DB 查询级别对数据进行预排序。
  • 谢谢,真的很麻烦,现在我们必须为所有 SSAS 导入编写视图?有时微软会让事情变得困难
  • @TomBook,不。没有 ORDER BY 部分的 SQL 查询仅定义数据集,具有任意顺序。对具有集群索引的表进行简单的 SELECT 可以返回 CI 顺序的数据,但这只是一个巧合。如果需要特定的数据排序 - 在 SSAS Cube DSV 或 DB 视图中使用 ORDER BY 定义选择语句。
猜你喜欢
  • 2010-11-30
  • 2011-04-09
  • 2012-11-16
  • 2014-12-05
  • 2013-06-21
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多