0

我们正在开发一个 Microsoft APS / PDW 设备,它由许多巨大的表组成。这些表中的大多数都具有聚集列存储索引。出于维护的原因,我们实施了一个流程,该流程评估 CCI 分区中压缩和未压缩的行数。只有当存在未压缩的行时,才会重建相应的分区(ALTER INDEX... REBUILD PARTITION = ...)。必须重建的分区的评估是通过几个表执行的,其中一个是 pdw_nodes_column_store_row_groups。但是,出于某种原因或其他原因,查询此表(同时)非常慢:

SELECT *
  FROM sys.pdw_nodes_column_store_row_groups
  WHERE object_id = 123456
    AND pdw_node_id = 789 
    AND index_id = 1

进一步的计算如下所示(摘录):

ISNULL(SUM(CASE 
             WHEN State_description = 'Compressed'
               THEN CAST(total_rows AS DECIMAL(12, 2))
           END)
       , 0) / (SUM(CAST(ISNULL(total_rows, 1) AS DECIMAL(12, 2)))) AS CompRelation

只有 CompRelation < 1 的行被视为“要重建”。

但是考虑到没有计算的查询已经花了那么长时间,我怀疑它与计算本身有关。

对于具有 CCI 的未分区表,此查询需要 4 分钟才能返回单行。

是否有任何其他方法来评估需要重建哪些 CCI 分区?或者我们可以做些什么来提高上述查询的性能?

4

0 回答 0