Amazon Redshift クラスターのテーブルが想定とは異なるディスクストレージを使用しています。Amazon Redshift で、ディスクストレージやテーブルのサイズはどのように計算されますか?

異なる Amazon Redshift クラスターにある 2 つのテーブルに割り当てられるディスクストレージの量は、テーブルを同等のデータ定義言語 (DDL) ステートメントを使用して作成し、同じ数の行を含めていたとしても、大きく変動します。以下のシナリオで、それぞれのテーブルが消費するディスクストレージの違いは、次のように決定されます。

  • それぞれの Amazon Redshift クラスターでの入力済みスライスの数
  • それぞれのテーブルが使用するテーブルセグメントの数

最小ディスク容量は、テーブルが Amazon Redshift クラスターに持つことができる最小のデータフットプリントです。クラスターのストレージ使用状況を分析するときや、Amazon Redshift クラスターのサイズを変更するときに、最小のテーブルサイズを確認することができます。以下の式を使用して、最小ディスク容量を計算できます。

  • KEY または EVEN 分布スタイルを使って作成されたテーブルの場合:
    最小テーブルサイズ = ブロックサイズ (1MB) * (ユーザー列の数 + 3 システム列) * 入力済みスライスの数 * テーブルセグメントの数
  • ALL 分布スタイルを使って作成されたテーブルの場合:
    最小テーブルサイズ = ブロックサイズ (1MB) * (ユーザー列の数 + 3 システム列) * クラスターノードの数 * テーブルセグメントの数

2 つの Amazon Redshift テーブルが以下の属性を共有する場合:

  • 同等の DDL ステートメントを使って作成されている
  • 同数の行を含む
  • 手作業で修正されていない

次に、テーブルのディスクストレージの割り当ては、以下によります:

  • EVEN および KEY 分布スタイルの場合、テーブルによって入力されたクラスタースライスの数
  • ALL 分布スライスの場合、クラスターにあるノードの数
  • テーブル内のセグメントの数

Amazon Redshift テーブルにソートキーがある場合、テーブルにはソートされたセグメントとソートされていないセグメントの 2 つのセグメントがあります。Amazon Redshift テーブルにソートキーがない場合、すべてのデータはソートされていないため、テーブルにはソートされていないセグメントが 1 つあります。

ソートキーを使用して既存のテーブルにデータを追加すると、新しいデータは、ソートされていないデータを含む別のセグメントに保持されます — つまり、VACUUM 操作が実行されるまで、データは元のソートされたキーセグメントに挿入されません。詳細情報は、マージされた行のボリュームの管理を参照してください。

注意: VACUUM 操作は、データをソートされたデータとマージします。ただし、テーブルには、以後のロードのためにソートされていないセグメントが残っています。

変数 number_of_table_segments は、Amazon Redshift テーブルに割り当てるためのテーブルセグメントの数を表わす、以下の 3 つの値のうち、いずれか 1 つを返します。

    0: テーブルはロードされたことはありません。ディスクスペースはゼロテーブルセグメントに割り当てます。

    1: ソートキーのないテーブルが 1 回以上ロードされました。

    2: ソートキーのあるテーブルが 1 回以上ロードされました。

最小テーブルサイズの計算例:

テーブルに 16 のスライスを持つクラスターにソートキーを持つ 125 のユーザー列がある場合、そのテーブルが 16 のスライスすべてに入力できる最小サイズは次のように計算されます。

1 MB * (125 + 3) * 16 * 2 = 4,096MB

DDL ステートメントを使用してテーブルを作成し、そのテーブルが両方のスライスに入力する 2 スライスクラスターに常駐する場合、最小テーブルサイズの計算では、テーブルが使用するディスク記憶域が大幅に少なくなります。

1 MB * (125 + 3) * 2 * 2 = 512 MB

同等の DDL ステートメントを使用してテーブルを作成し、そのテーブルが 64 の入力済みスライスを持つクラスターに常駐する場合、以下の最小テーブルサイズの計算では、テーブルが使用するディスク記憶域が大幅に多くなります。

1 MB * (125 + 3) * 64 * 2 = 16,384 MB

最小テーブルサイズの例に基づいて、テーブルのサイズは、クラスターで入力されたスライスの数に基づいて増減されます。 

1. 以下のクエリを使って、Amazon Redshift クラスター内のテーブルに割り当てられるディスクスペースの量を決定します。

SELECT ti.database,
      ti.schema||'.'||ti."table"AS tablename,
      ti.size
FROM svv_table_info ti;

2. 次のクエリを実行して、テーブルの最小テーブルサイズを計算します。

WITH 
tbl_ids AS
(SELECT DISTINCT oid
FROM pg_class c
WHERE relowner>1
AND relkind='r'),
stp AS
(SELECT id,sum(ROWS)sum_r,sum(sorted_rows)sum_sr,min(ROWS)min_r,
max(ROWS)max_r,nvl(count(DISTINCT slice),0)pop_slices
FROM stv_tbl_perm
WHERE id IN (SELECT oid FROM tbl_ids)
AND slice<6400
GROUP BY id),
colenc AS
(SELECT attrelid,sum(CASE WHEN a.attencodingtype=0 THEN 0 ELSE 1 END)
AS encoded_cols,count(*)AS cols
FROM pg_attribute a
WHERE a.attrelid IN (SELECT oid FROM tbl_ids)
AND a.attnum>0
GROUP BY a.attrelid),
cluster_info AS
(SELECT COUNT(DISTINCT node) node_count
FROM stv_slices)
SELECT ti.database,
ti.schema||'.'||ti."table"AS tablename,
ti.diststyle,
ti.sortkey1,
ti.size current_size,
nvl(CASE
WHEN stp.sum_r=stp.sum_sr
OR stp.sum_sr=0 THEN CASE
WHEN"diststyle"='EVEN' THEN
CASE
WHEN ti.sortkey1 != '' THEN (stp.pop_slices*(colenc.cols+3)*2)
ELSE (stp.pop_slices*(colenc.cols+3))
END
WHEN substring("diststyle",1,3)='KEY' THEN
CASE
WHEN ti.sortkey1 != '' THEN (stp.pop_slices*(colenc.cols+3)*2)
ELSE (stp.pop_slices*(colenc.cols+3))
END
WHEN"diststyle"='ALL' THEN
CASE
WHEN ti.sortkey1 != '' THEN cluster_info.node_count*(colenc.cols+3)*2
ELSE cluster_info.node_count*(colenc.cols+3)
END
END
ELSE CASE
WHEN"diststyle"='EVEN'THEN(stp.pop_slices*2*(colenc.cols+3))
WHEN substring("diststyle",1,3)='KEY'
THEN(stp.pop_slices*(colenc.cols+3)*2)
WHEN"diststyle"='ALL'
THEN(cluster_info.node_count*(colenc.cols+3)*2)
END
END,0) AS minimum_size
FROM svv_table_info ti
LEFT JOIN stp ON stp.id=ti.table_id
LEFT JOIN colenc ON colenc.attrelid=ti.table_id
CROSS JOIN cluster_info
WHERE ti.schema NOT IN('pg_internal')
ORDER BY ti.size DESC;

使用シナリオに最適なクラスター構成を決定するには、Amazon Redshift のクラスターとノードおよびデータウェアハウスシステムのアーキテクチャを参照してください。


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2016 年 4 月 15 日

更新: 2018 年 7 月 6 日