Amazon Redshift 3つの新機能:テーブル作成時のBACKUPオプション/VACUUMの閾値設定/ロック状態を確認出来るビューテーブル

2016.04.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Developers Forumにて公開されていたAmazon Redshiftに関するお知らせに、当エントリでご紹介する新機能が3つ含まれていました。

この機能は今後1〜2週間のうちにメンテナンスウインドウのタイミングを経てパッチ当てがされることで実装され、Redshiftのバージョンが1.0.1044となります。現時点(2016/04/11 AM09:30)でのバージョンは以下の様に1.0.1043ですので、次のメンテナンスウインドウでパッチ当てがされる事で機能が使えるようになる訳ですね。

We will be patching your Amazon Redshift clusters during your system maintenance window in the coming 1-2 weeks. The timing of the patch will depend on your region and maintenance window settings. You can view or change your maintenance window settings from the AWS Management Console. After your cluster has been patched, the new cluster version will be Build 1.0.1044. Please contact us at redshift-feedback@amazon.com if you have any questions.
$ aws redshift describe-clusters --cluster-identifier xxxxxxxxxxxx \
>   | jq '.Clusters[] | .ClusterVersion, .ClusterRevisionNumber'
"1.0"
"1043"

当エントリでは、上記お知らせで言及されていた3つの新機能について、機能リリース前の段階ではありますが内容をご紹介して行きたいと思います。

目次

CREATE TABLE:『BACKUP』オプションでテーブル単位でのバックアップをスナップショットに含めるか否かの制御が可能に

このオプションを使うことで、スナップショット(自動・手動双方)の中に対象テーブルを含めるか否かを制御する事が出来るようになります。ステージングテーブルのような実利用は行わなないテーブル等については、BACKUP NOオプションを指定することでスナップショット作成及びスナップショットからのリストアに処理時間を短くする事が出来ます。

BACKUP NOオプションはクラスタ内の他ノードへのデータの自動複製(レプリケーション)には影響を与えません。ノード障害の際はこの指定のテーブルも復元されます。ちなみに未指定の場合、デフォルト値はBACKUP YESとなります。

CREATE TABLE
IF NOT EXISTS
BACKUP NO
staging_orders ( ... );

VACUUM処理実行の際に『閾値』を設定する事が可能に

VACUUM処理実施の際に、TO threshold PERCENTパラメータを設定出来るようになりました。このパラメータを含んだシンタックスは以下の通りです。

VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX ] 
[ [ table_name ] [ TO threshold PERCENT ] ]

今回新設されたパラメータで指定出来るのは『ソートフェーズをスキップするVACUUMの閾値』と『削除フェーズで空き領域を増やす対象の閾値』です。ソートの閾値は、VACUUM処理前に、対象テーブルが指定されているソート順序で並べ替えされている状態が全体の何%になっているか、という値となります。削除の閾値は、VACUUM処理後に『削除』のマークがされていない合計行の最小の割合です。

テーブルにおけるソート済の行がソートの閾値を下回る場合にのみVACUUMは行をソートするので、(その条件に合致しなければ)Amazon RedshiftはしばしばVACUUMに掛かる時間や回数を大幅に減らす事が出来ます。同様に、削除としてマークされた行の割合が一定の閾値に満たない場合、幾つかの削除された行だけを含むようなブロックの書き換えは、しばしばスキップされる事があります。

例えば、閾値を75に指定した場合、テーブルの75%以上が既にソート済となっているテーブルについてはVACUUM処理においてソートフェーズがスキップされます。削除フェーズでは、少なくともテーブル行の75%が削除としてマークされていないディスクスペースを再利用対象として設定を行います。

閾値の値は0から100の間の値である必要があります。デフォルト値は95です。もし100が指定された場合、VACUUMは対象テーブルがソート済か否かに関わらず常にソートを行い、削除としてマークされている全ての行に対してディスクスペースの解放を行います。0が指定された場合、VACUUMは決してソートを行いませんし、ディスクスペースの解放も行いません。

TO threshold PERCENTパラメータを含めた場合、併せてテーブル名を指定する必要があります。テーブル名を省略した場合、VACUUM処理は失敗します。また、このパラメータはREINDEXとの併用は出来ません。

トランザクションのロック情報を確認出来る『SVV_TRANSACTIONS』ビュー

実行中のトランザクションによるデータベースのロック状態を確認する事が出来る新しいビュー。以下のSVV_TRANSACTIONSというビューでは現在のデータベース内のテーブルロックを保持するトランザクションに関する情報を記録しています。

ロックに関する詳細は以下のドキュメントを参照ください。

まとめ

以上、Amazon Redshiftの新機能紹介3本立てでした。いずれも日々のAmazon Redshift処理・作業を進めるにあたって便利そうなものばかりですね。クラスタのパッチ当てがなされたタイミングで改めて色々触ってみたいと思います。