STATUPDATE がオフのときに Amazon Redshift が COPY ANALYZE プロセスを実行するのはなぜですか?

最終更新日: 2020 年 3 月 25 日

COPY コマンドを使用して Amazon Redshift の新しいテーブルにデータをロードしようとしました。COMPUPDATE OFF パラメータも追加しました。COPY ANALYZE がまだ実行されているのはなぜですか?

簡単な説明

Amazon Redshift でテーブルを作成する前に、テーブルのディストリビューションスタイルを選択します。テーブルがディストリビューションスタイルを指定しない場合、デフォルトで AUTO ディストリビューションになります。次に、Amazon Redshift の AUTO ディストリビューション機能は COPY ANALYZE プロセスを使用して、テーブルで EVEN または ALL ディストリビューションを使用するかどうかを判断します。

注意: COMPUPDATE OFF パラメータは、引き続き AUTO ディストリビューションスタイルを使用するテーブルで COPY ANALYZE を実行します。STATUPDATE OFF パラメータは COPY ANALYZE コマンドを無効にしたり、抑制したりしません。

解決方法

1.    PG_CLASS_INFO ビューでクエリを実行して、テーブルの現在のディストリビューションスタイルを確認します。

select relname, releffectivediststyle from PG_CLASS_INFo where relname = 'rs_example_test'

2.    ディストリビューションスタイルが AUTO ディストリビューションに設定されているかどうかを確認します。

select relname, releffectivediststyle from PG_CLASS_INFo where relname = 'rs_test2'
relname | releffectivediststyle
rs_test2 | 10

注意: releffectivediststyle 値が 10 または 11 の場合、テーブルはディストリビューションスタイルを指定せずに作成されています。その後、Amazon Redshift はディストリビューションスタイルを AUTO ディストリビューションに割り当てます。デフォルトでは、CREATE TABLE ステートメントでディストリビューションスタイルが指定されていない場合、Amazon Redshift は AUTO ディストリビューションを適用します。

3.    AUTO ディストリビューションが有効になっている場合は、定義されたディストリビューションスタイルを使用してテーブルを作成します。ディストリビューションスタイルを指定すると、COPY ANALYZE が実行されなくなります。

次の例では、EVEN ディストリビューションスタイルを指定します。

create table rs_example_test (id int)diststyle even;

ディストリビューションスタイルの詳細については、データディストリビューションスタイルの選択を参照してください。

4.    COPY コマンドを使用してデータをテーブルにロードし、STATUPDATE OFF パラメータを追加します。

注意: 個別の INSERT ステートメントを使用する代わりにCOPY コマンドを使用して大量のデータをロードすることをお勧めします。これにより、パフォーマンスの問題が発生するリスクを最小限に抑えることができます。

5.    SVL_STATEMENTTEXT システムテーブルに対してクエリを実行し、セッションに関連するプロセス ID (PID) でフィルタリングします。

select userid, xid, pid, trim(label) as label, starttime, endtime, sequence, trim(type) as type, left(text,60) text from svl_statementtext where pid = 26815 order by xid, starttime, sequence;

上記の構文は、COPY ANALYZECOPY トランザクションの一部として実行されたかどうかを確認します。

出力は次のようになります。

userid  xid	    pid	    label	  starttime	            endtime	           sequence	 type	  text
100	   78915	26815   default	  2019-03-19  14:06:19	2019-03-19 14:06:21	  0	     QUERY	  copy rs_test3 from 's3://xxxxx-rs-log/AWSLogs/rs_test2.csv'\
100	   78915	26815   default	  2019-03-19  14:06:21	2019-03-19 14:06:21	  0	     UTILITY  COMMIT

これにより、COPY ANALYZECOPY トランザクションの一部として実行されなくなったことが確認されます。