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;
最近私のマシンで奇妙な動作が見られました。このクエリは、システムが70%いっぱいになったときに正常に実行されました(〜1rr)。成長するデータクエリのパフォーマンスには何らかの関連性があります。現在、Netezzaシステムは、現在のライセンス(50%のライセンス)に対応して、ストレージ容量を賢明に超えています。 – NzGuy
ストレージ容量の50%しか使用できないGrowth-On-Demandシステムがある場合は、システムによって適用されるハード・リミットではありません。しかし、クエリーに答えるためにテーブル全体を再配布すると、システムに一時的ではない通常の書き込み/読み取りのプレッシャーが発生します。これはSPU間で数十億行の行を移動させるためです。したがって、データの増加は間違いなく問題になる可能性があります – ScottMcG
4つのディストリビューションカラムを持つテーブルがある場合、10のうち9回は間違いであり、再評価する必要があります。 – ScottMcG