0

多数の巨大なテーブルで構成される Microsoft APS / PDW アプライアンスに取り組んでいます。これらのテーブルのほとんどは、クラスター化された列ストア インデックスを備えています。メンテナンスの理由から、CCI のパーティション内の圧縮された行と圧縮されていない行の数を評価するプロセスを実装しました。圧縮されていない行がある場合のみ、対応するパーティションが再構築されます ( ALTER INDEX... REBUILD PARTITION = ...)。再構築する必要があるパーティションの評価は、いくつかのテーブルを介して実行されます。そのうちの 1 つは 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 を使用したパーティション化されていないテーブルの場合、このクエリは 1 つの行を返すのに 4 分かかりました。

どの CCI パーティションを再構築する必要があるかを評価する他の方法はありますか? または、上記のクエリのパフォーマンスを向上させるためにできることはありますか?

4

0 に答える 0