はじめに

今回の記事では、スーパープロジェクションの最適化についての概要を紹介します。
・スーパープロジェクションの最適化とは?
・気をつけないといけないこと
スーパープロジェクションとは何かについては、以下の記事をご参照ください。

プロジェクションの概要
http://vertica-tech.ashisuto.co.jp/projection-description

スーパープロジェクションの最適化とは?

スーパープロジェクションを最適化すると、プロジェクション内の列やデータ順序をより良い形に自動的に並び替えられます。それによって、さらに集計/分析処理が高速化します。Verticaでは、各テーブルにデータをロードしたあと、スーパープロジェクションに対して必ず1回は最適化を実行することが推奨されています。

スーパープロジェクションの最適化は、Database Designer(以下、DBD)で行います。
最適化によって、具体的には以下の処理がスーパープロジェクションに対して行われます。

・格納されたデータを解析
・格納されたデータ(列と行)の並び替え
・格納されたデータを最適なアルゴリズムで圧縮
・格納されたデータの分散
(Verticaが複数ノードで構成されたクラスタ構成の場合のみ)
・クエリを読み込ませることも可能(*1)

(*1)そのシステムで使われるクエリをDBDに読み込ませると、そのクエリの特性を考慮したうえで最適化が行われます。

列やデータの順序、データの圧縮形式などをデータベース管理者が意識せずにVerticaに自動判断させることができるため、複雑なスキルを必要としません。

スーパープロジェクション最適化の手順

スーパープロジェクションを最適化するには、Management Consoleを使う方法と、admintoolsを使う方法の2種類があります。
具体的な手順については、以下の記事をご参照ください。

Management Consoleを利用したプロジェクションの最適化~DBD編~
http://vertica-tech.ashisuto.co.jp/beginner_vertica_3/


admintoolsを利用したDatabase Designerの実行手順
http://vertica-tech.ashisuto.co.jp/execute-database-designer-using-admintools/

気をつけないといけないこと

より快適なVerticaシステムをお使い頂くために、いくつかの注意点を紹介します。

・スーパープロジェクションの最適化を実施するタイミングについて
Verticaではテーブルを作成すると自動的に1つのスーパープロジェクションが作成されます。
この時に作成されるスーパープロジェクションは最適化されていない状態です。
その状態でも列指向型データベースの特性によって高いパフォーマンスは得られますが、
さらに高速化するためには、新たにテーブルを作成した後に最適化作業を実施することを検討してください。

・スーパープロジェクション最適化の実行頻度について
スーパープロジェクションを最適化したタイミングより後に追加したデータは、最適化された形でスーパープロジェクションに自動的に格納されていきます。
そのため、プロジェクションは1回実行するだけでその効果を恒久的に得ることができます。
しかし、システム改変などによって格納されるデータの傾向が変わってしまったり(カーディナリティが変わったり)、頻繁に使われるSQLが変わってしまった場合には(既存のスーパープロジェクションを最適化した際に読み込ませたクエリが使われなくなった場合には)、新たに最適化することを推奨します。

・プロジェクション最適化中の他の操作について
原則、プロジェクション最適化を実行中には他の操作や処理を実施しないでください。
その理由は、最適化実行中にデータの変更(INSERT、DELETE、TRUNCATE、COPY)やテーブルに対する変更(DROP、ALTER)を行うと処理同士が競合するためです。
また、マシンリソースの観点から、メモリ不足やオープンファイルのハンドリング上限値に達する事でエラーになる事があるためです。
これらの理由から、最適化実行中には他の操作や処理を実施しない事が推奨されています。

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。