解決策
最小テーブルサイズを確認する
最小テーブルサイズは、Amazon Redshift クラスター上のテーブルの最小フットプリントです。最小テーブルサイズは、クラスターストレージの使用状況を分析するとき、または Amazon Redshift クラスターのサイズを変更するときに確認できます。
KEY、EVEN、または Auto (EVEN) 分散スタイルを使用して作成されたテーブルには、次の式を使用します。
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments
ALL または Auto (ALL) 分散スタイルを使用して作成されたテーブルには、次の式を使用します。
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_cluster_nodes * number_of_table_segments
テーブル式の場合、セグメント数はテーブルにソートキーが定義されているかどうかによって異なります。Amazon Redshift テーブルにソートキーが定義されている場合、テーブルには 2 つのセグメントがあります。1 つはソートされたセグメント、もう 1 つはソートされていないセグメントです。Amazon Redshift テーブルにソートキーがない場合、テーブルはソートされていないセグメントを 1 つだけ生成します。
入力されたスライスの数を計算するには、次のクエリを実行します。
select count(distinct a.slice) asnumber_of_populated_slices, b."table" from stv_blocklist a,
svv_table_info b where a.tbl = b.table_id group by b."table" ;
例: 6 つの dc2.large クラスター
たとえば、同じ構造と行数の 4 つの小さなテーブルを含む 6 つの dc2.large クラスターを作成できます。クラスターが 3 つの異なる分散スタイルとソートキーを使用する 1 つの分散スタイルを使用する場合、異なるクエリが使用されます。
次のクエリは、ALL 分散スタイルを使用してテーブルを作成し、6 つのスライスを出力します。
create table testsize_all (a varchar(100),b varchar(100), cvarchar(100)) diststyle all;
insert into testsize_all values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
次のクエリは、EVEN 分散スタイルのテーブルを作成し、6 つのスライスを入力して出力します。
create table testsize_even (a varchar(100),b varchar(100), cvarchar(100)) diststyle even;
insert into testsize_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
次のクエリは、分散キーと 1 つのデータが入力されたスライスの出力を含むテーブルを作成します。
create table testsize_key (a varchar(100),b varchar(100), cvarchar(100)) distkey (a);
insert into testsize_key values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
次のクエリは、分散キーとソートキーと 6 つのデータが入力されたスライスの出力を含むテーブルを作成します。
create table testsize_sort_even (a varchar(100),bvarchar(100), c varchar(100) ) diststyle even sortkey (a);
insert into testsize_sort_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
最小テーブルサイズを計算する
EVEN 分散スタイルの最小テーブルサイズを計算するには、次の式を使用します。
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36MB
ALL 分散スタイルの最小テーブルサイズを計算するには、次の式を使用します。
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_cluster_nodes *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36 MB
KEY 分散スタイルの最小テーブルサイズを計算するには、次の式を使用します。
Minimum table size = block_size (1 MB) * (number_of_user_columns+ 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 1 *1 = 6MB
ソートキーを使用して EVEN 分散の最小テーブルサイズを計算するには、次の式を使用します。
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *2 = 72MB
挿入する行数が少ないと、テーブルのサイズが予想よりも大きくなります。テーブルのサイズは、挿入される行の数と入力されるスライスの数が増えるにつれて大きくなり続けます。
従来のサイズ変更を実行すると、テーブルのデータ量が増えることなく、入力されるスライスの数が増えます。その結果、サイズ変更後の空き領域は直線的に増加しません。
関連情報
Amazon Redshift テーブル設計のベストプラクティス
自動テーブル最適化の使用
列指向ストレージ
最良のソートキーの選択
クエリプランと実行ワークフロー