聚集列存储索引会影响SSAS查询的最终用户性能吗?

9
聚集列存储索引会影响SSAS性能,如何解决?请参考下文了解排序对SSAS查询终端用户性能的影响。
是否有办法解决这个问题?
重新构建SSAS索引/聚合是否有效?已知从数据仓库到SSAS处理立方体的时间可能会受到影响。真正的关注点是最终客户 - 用户SSAS查询体验。
目前正在实现SSAS立方体中的多维模型。
参考链接: 切换关系源到列存储索引后,立方体处理速度变慢并产生更大的度量组

你们的规模是否足够大需要担心这个问题?只有在100GB以上的数据立方体大小时,这些问题才会成为重要的关注点。 - Mike Honey
你确定这是一个问题吗?那个问题与“立方体处理”有关,而不是最终用户查询。在处理期间,立方体必须从表中读取所有数据,这意味着它需要破解列存储的字典中压缩桶以重新构建行。这显然比直接从另一张表中读取行要慢。 - Panagiotis Kanavos
除非立方体必须从列存储中读取数据,否则终端用户查询 SSAS 立方体不会受到任何影响。如果确实需要从列存储中读取数据,则查询可能会更快,因为列存储对于聚合查询来说速度要快得多。 - Panagiotis Kanavos
通过正确设计和调整列存储表,您可以在DirectQuery模式下同时使用列存储和SSAS。 (https://insightsquest.com/2017/04/28/should-i-use-ssas-given-columnstore/) - Panagiotis Kanavos
还要检查SQL Server 2016中SSAS Tabular在DirectQuery模式下的概述。对于某些情况来说,使用SSAS和DirectQuery可能是一个的想法,而不是使用列存储索引。 - Panagiotis Kanavos
@PanagiotisKanavos 这个问题是关于最终用户查询的,正如问题所述,并不涉及立方体处理。 - user11156893
1个回答

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

关于无序数据的SSAS性能。它肯定会不够优秀,但程度如何?实际上,只有测试才能显示出来;这可能取决于众多因素-初始数据集,立方体设计,最终用户查询。立方体结构的增长将减慢操作速度,但减慢多少?从经验来看-如果立方体大小超过100 GB,其最大分区/度量组占SSAS使用的RAM的10%以上,则我会费心提供数据排序。在其他情况下,我不会担心这个问题。

从CCI排序数据。首先,避免过时的语法。

"Original Answer"翻译成中文为"最初的回答"。
SELECT TOP 2147483647 ... FROM ... ORDER BY ...  

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

最初的回答

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

关于在SSAS分区定义中使用时出现的子优化执行计划问题。不幸的是,SSAS查询生成引擎不允许神奇的

这是一个很棒的答案,我是JoeSmith的同事,我猜最后一个问题是:“有没有办法解决这个问题?重建SSAS索引/聚合会起作用吗?” - user10126227
@TomBook,很遗憾,重建SSAS索引/聚合将无法改善情况。当向SSAS提供数据时,您需要在数据库查询级别上预先对数据进行排序。 - Ferdipux
谢谢,那真的很麻烦,现在我们必须为所有SSAS导入编写视图吗?有时候微软会让事情变得困难。 - user10126227
@TomBook,不是的。没有ORDER BY部分的SQL查询仅定义数据集,并具有任意排序。在具有Cluster索引的表上进行简单的SELECT可以按照CI顺序返回数据,但这只是一种巧合。如果需要特定的数据排序,请在SSAS Cube DSV或DB View中定义带有ORDER BY的选择语句。 - Ferdipux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接