Amazon Redshiftの性能改善について

2016.05.25

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

今朝のAWS公式ブログにて、Amazon Redshiftの性能改善に関する以下のエントリが公開されていました。タイトルを見る限りだとかなり大きく出た感のある内容となっておりますが、利用者にとっては非常に嬉しい内容になるかと思います。ざっくりではありますが、当エントリではその内容について読んでみたいと思います。

カラムナ(列)型ストア

大規模なDWH(データウェアハウス)は主としてI/0の問題を抱えています。そしてAmazon RedshiftはI/Oを最小化・並列化させる為に分散カラム型アーキテクチャを採用しています。カラム型ストアでは、それぞれのテーブル列が独自のデータブロックに格納されています。列の内容毎に最適化された圧縮アルゴリズムを選択する事が出来るため、データサイズ削減に繋がります。また、選択されたテーブルの列だけを取得すれば良くなるため、結果としてクエリ実行時のI/O時間も減らせます。

※カラムナ型については下記エントリでもイメージ付きで簡単な説明を載せていますので併せて御覧下さい。

しかしながら、カラムナ型ストアはデータの読み取り(reading data)に於いて非常に効率的な一方で、(RDBに代表される)行指向型のものよりも読み込みとデータのコミット(loading and commiting data)、特に小さなデータセットに対する効率は悪いです。

2015年12月17日に実行されたパッチ(patch 1.0.1012)では、I/O及びコミットロジックが大幅に改善されました。これは小さなデータロードや一時テーブルを利用する際のクエリに対する改善となります。この機能について、Cablevision社のソフトウェア開発ディレクターであるNaeem Aliは『I/O及びコミットロジック拡張のリリースでは、我々は様々なワークロードで2倍のパフォーマンス改善を確認する事が出来ました。複雑なクエリにおいても高いパフォーマンス改善が見られました』と語っています。

VACUUM処理の改善

Amazon Redshiftではマルチバージョン並行処理制御を行っています。これは読み込みと書き込みのテーブル間競合を抑える為のものです。PostgreSQL(で実施する処理)の様に、古いバージョンデータを削除、新しいバージョンのデータを追加としてマーキングし、トランザクションIDをマーカーとして使用する事でこの処理を行います。(参照エントリで表示されている解説画像を拝借してこちらにも貼らせて頂きます)

rs_vacuum_deletes_with_threshold_1

これにより、読み取り処理で許可されているデータのスナップショットを取得し、ロックをせずにテーブルデータを捜査する事が出来るようになります。このアプローチにおいて挙げられる1つの問題は、VACUUMコマンドが領域を必要とする為に、システムが時間を追う毎に遅くなって行ってしまう...という点です。このVACUUMコマンドは削除された行の領域を増やし、テーブルに対して追加された新しいデータを(テーブルで定義されている)正しいソート順序に並び替えます。

2016年5月17日より利用可能となっているバージョン1.0.1056のパッチでは大幅なパフォーマンス改善が発表されています。

この機能に関するカスタマープレビューでは、VACUUM処理に必要なリソースが少なく済むようになった事でVACUUMのパフォーマンス及びシステム全体のスループットに於いて劇的な改善が見られています。TripAdvisor社のソフトウェア開発マネージャーのAri Millerは『我々は15TBあるテーブルに対するVACUUM処理が10倍早くなった事を直近のパッチで確認しました。クエリパフォーマンス全体についても改善されています』と語っています。

パッチレベルの情報については、Amazon RedshiftのVERSION関数を使って確認する事が出来ます。

実際は1行で表示されますが、以下実行例では見易さを考慮して改行させて表示しています。情報の末尾にRedshiftのパッチレベル情報が表示されている事が確認出来ますね。

# 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.1056
(1 row)

まとめ

以上、Amazon Redshiftの性能改善に於けるお知らせエントリのご紹介でした。Amazon Redshiftでは大規模なデータを扱えるメリットがある一方、データが増えて行くに従い処理時間、特に今回言及されていたVACUUM処理等についてはデータ量に比例して時間の掛かる作業となっていたために懸念すべき事項でありました。この性能改善でより一層Amazon Redshiftが活用出来るようになる事を期待したいところですね。

また、当エントリの内容とは直接関係ありませんが、このエントリが『500本目のDevelopers.IOでの個人での投稿』となりました。ブログ全体でも6641本(2016年05月25日、当エントリ投稿時現在)、AWSに関する投稿については2584本(2016年05月25日、当エントリ投稿時現在)となっています。私個人としてはAmazon RedshiftやTableau等、ビッグデータ・BI系のエントリが比重多目な形となっていますが、クラスメソッド・Developers.IO全体ではAWS、iOS等の分野に於いて全方位的且つ迅速な情報発信をこれからも心掛けて行きたいと思いますので宜しくお願い致します。こちらからは以上です。