Redshift で分散スタイル変更時の VACUUM 要否を確認してみた。
EVEN分散->KEY分散に変更した場合
- テーブル作成
dev=# drop table public.customer cascade; dev=# create table public.customer ( c_custkey integer not null, c_name varchar(25) not null, c_address varchar(25) not null, c_city varchar(10) not null, c_nation varchar(15) not null, c_region varchar(12) not null, c_phone varchar(15) not null, c_mktsegment varchar(10) not null ) diststyle even compound sortkey(c_nation,c_region);
- データロード
dev=# copy customer from 's3://awssampledb-yoheia/ssbgz/customer' iam_role 'arn:aws:iam::123456789012:role/redshift-spectrum-s3-fullaccess' gzip compupdate off region 'ap-northeast-1';
- VACUUM
dev=# vacuum full public.customer;
- ANALYZE する
dev=# set analyze_threshold_percent to 0; dev=# analyze public.customer;
- svv_table_info 取得
dev=# select diststyle, sortkey1, tbl_rows, unsorted from svv_table_info where schema = 'public' and "table" = 'customer'; diststyle | sortkey1 | tbl_rows | unsorted -----------+----------+----------+---------- EVEN | c_nation | 3000000 | 0.00 (1 row)
- KEY分散に変更
dev=# alter table public.customer alter diststyle key distkey c_custkey;
- ANALYZE する
dev=# set analyze_threshold_percent to 0; dev=# analyze public.customer;
- svv_table_info 取得
dev=# select diststyle, sortkey1, tbl_rows, unsorted from svv_table_info where schema = 'public' and "table" = 'customer'; diststyle | sortkey1 | tbl_rows | unsorted ----------------+----------+----------+---------- KEY(c_custkey) | c_nation | 3000000 | 0.00 (1 row)
KEY分散->EVEN分散に変更した場合
- EVEN分散に変更
dev=# alter table public.customer alter diststyle even;
- ANALYZE する。
dev=# set analyze_threshold_percent to 0; dev=# analyze public.customer;
- ソートキーでソートされているか確認する
dev=# select diststyle, sortkey1, tbl_rows, unsorted from svv_table_info where schema = 'public' and "table" = 'customer'; diststyle | sortkey1 | tbl_rows | unsorted -----------+----------+----------+---------- EVEN | c_nation | 3000000 | 0.00 (1 row)
KEY分散->ALL分散に変更した場合
- KEY分散に変更
dev=# alter table public.customer alter diststyle key distkey c_custkey;
- ALL分散に変更
dev=# alter table public.customer alter diststyle all;
- ANALYZE する
dev=# set analyze_threshold_percent to 0; dev=# analyze public.customer;
- ソートキーでソートされているか確認する
dev=# select diststyle, sortkey1, tbl_rows, unsorted from svv_table_info where schema = 'public' and "table" = 'customer'; diststyle | sortkey1 | tbl_rows | unsorted -----------+----------+----------+---------- ALL | c_nation | 3000000 | 0.00 (1 row)
EVEN分散->ALL分散に変更した場合
- EVEN分散に変更
dev=# alter table public.customer alter diststyle even;
- ALL分散に変更
dev=# alter table public.customer alter diststyle all;
- ANALYZE する
dev=# set analyze_threshold_percent to 0; dev=# analyze public.customer;
- ソートキーでソートされているか確認する
dev=# select diststyle, sortkey1, tbl_rows, unsorted from svv_table_info where schema = 'public' and "table" = 'customer'; diststyle | sortkey1 | tbl_rows | unsorted -----------+----------+----------+---------- ALL | c_nation | 3000000 | 0.00 (1 row)
環境
- ra3.4xlarge 2 ノード
- バージョン
dev=# select version(); version --------------------------------------------------------------------------------------------------------------------------- PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.38698 (1 row)