Amazon Redshift プロビジョニングクラスターのテーブルで消費されるディスクストレージ容量が予想よりも多かったり、少なかったりする理由を教えてください。

所要時間2分
0

テーブルが予想よりも多くのディスク容量を占有しているか、従来のサイズ変更後に空きディスク容量の割合が増加しませんでした。Amazon Redshift はディスクストレージとテーブルサイズをどのように計算しているのですか?

解決策

最小テーブルサイズを確認する

最小テーブルサイズは、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 テーブル設計のベストプラクティス

自動テーブル最適化の使用

列指向ストレージ

最良のソートキーの選択

クエリプランと実行ワークフロー

AWS公式
AWS公式更新しました 1年前
コメントはありません