ablog

不器用で落着きのない技術者のメモ

Redshift で分散スタイル変更時の VACUUM 要否

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)