2016-10-02 8 views
0

Netezzaに100億行のFACTテーブルがあり、1つのクエリでROW_NUMBER()、MAX()、SUM()を実行したいとします。私がしているとき、同じクエリが3時間以上実行されます。クエリのパフォーマンスを向上させる方法はありますか.Tableは、パーティション句の一部である4つの列(COLA、COLB、COLC、COLD)に分散されています。サンプル例えばNetezzaでWindowed集約パーティションを最適化する方法

SUM(STR_QTY) OVER (
       PARTITION BY 
       COLA 
       ,COLB 
       ,COLC 
       ,COLD 
       ) AS SLS_RTRN_QTY 
, 
SUM(STR_QTY_1) OVER (
       PARTITION BY 
       COLA 
       ,COLB 
       ,COLC 
       ,COLD 
       ) AS VAL_QTY 
,MIN(ITM_FST_DT) OVER (
       PARTITION BY COLA 
       ,COLB 
       ) AS FIRST_DT 
,MAX(ITM_LST_DT) OVER (
       PARTITION BY PARTITION BY COLA 
       ,COLB 
       ) AS LAST_DT 

編集1:このクエリは、テーブル全体がCOLAとCOLBに再配布されるようになります

SELECT a.* 
FROM (
    SELECT F.DT_KEY AS DT_KEY 
     ,F.COL_KEY AS COL_KEY 
     ,F.PCK_ITM_KEY AS PCK_ITM_KEY 
     ,F.COLC AS COLC 
     ,F.COLD AS COLD 
     ,F.COLA AS COLA 
     ,F.COLB AS COLB 
     ,F.COLC AS COLC 
     ,F.SH_QTY AS SH_QTY 
     ,SUM(F.SLS_QTY) OVER (
      PARTITION BY F.COLD 
      ,F.COLA 
      ,F.COLB 
      ,F.COLC 
      ) AS SLS_QTY 
     ,SUM(F.SLS_RTRN_QTY) OVER (
      PARTITION BY F.COLD 
      ,F.COLA 
      ,F.COLB 
      ,F.COLC 
      ) AS SLS_RTRN_QTY 
     ,SUM(F.PCHSE_QTY) OVER (
      PARTITION BY F.COLD 
      ,F.COLA 
      ,F.COLB 
      ,F.COLC 
      ) AS PCHSE_QTY 

     ,MAX(F.LST_ML_DT) OVER (
      PARTITION BY F.COLA 
      ,F.COLC 
      ) AS LST_ML_DT 
     ,F.LST_MODFD_DTTM AS LST_MODFD_DTTM 
     ,ROW_NUMBER() OVER (
      PARTITION BY F.COLD 
      ,F.COLA 
      ,F.COLB 
      ,F.COLC 
      ,F.COLE ORDER BY F.DT_KEY DESC 
      ) AS RNK 
    FROM FCT_ITEM F 
    ) a 
WHERE a.RNK = 1; 

答えて

0

オリジナルのクエリ。ディストリビューションカラムのセットがパーティションカラムのサブセットである場合、高価な再配布は必要ありません。

一般的に、分布句で可能な限り少ない列を使用し、均等な分布を維持します。 COLAまたはCOLBだけで配布された場合は、それらのいずれかを使用してください。

+0

最近私のマシンで奇妙な動作が見られました。このクエリは、システムが70%いっぱいになったときに正常に実行されました(〜1rr)。成長するデータクエリのパフォーマンスには何らかの関連性があります。現在、Netezzaシステムは、現在のライセンス(50%のライセンス)に対応して、ストレージ容量を賢明に超えています。 – NzGuy

+0

ストレージ容量の50%しか使用できないGrowth-On-Demandシステムがある場合は、システムによって適用されるハード・リミットではありません。しかし、クエリーに答えるためにテーブル全体を再配布すると、システムに一時的ではない通常の書き込み/読み取りのプレッシャーが発生します。これはSPU間で数十億行の行を移動させるためです。したがって、データの増加は間違いなく問題になる可能性があります – ScottMcG

+0

4つのディストリビューションカラムを持つテーブルがある場合、10のうち9回は間違いであり、再評価する必要があります。 – ScottMcG

関連する問題