はじめに
本記事は、スーパープロジェクションの最適化をご紹介します。・スーパープロジェクションの最適化とは?
・気をつけないといけないこと
・気をつけないといけないこと
スーパープロジェクションの概要は、以下の記事をご参照ください。
プロジェクションの概要
https://vertica-tech.ashisuto.co.jp/projection-description
スーパープロジェクションの最適化とは?
スーパープロジェクションを最適化すると、プロジェクション内の列やデータ順序をより良い形に自動的に並び替えられます。それによって、さらに集計/分析処理が高速化します。Verticaでは、各テーブルにデータをロードしたあと、スーパープロジェクションに対して必ず1回は最適化を実行することが推奨されています。スーパープロジェクションの最適化は、Database Designer(以下、DBD)で行います。最適化によって、具体的には以下の処理がスーパープロジェクションに対して行われます。
・格納されたデータを解析
・格納されたデータ(列と行)の並び替え
・格納されたデータを最適なアルゴリズムで圧縮
・格納されたデータの分散(*1)
・クエリを読み込ませることも可能(*2)
・格納されたデータ(列と行)の並び替え
・格納されたデータを最適なアルゴリズムで圧縮
・格納されたデータの分散(*1)
・クエリを読み込ませることも可能(*2)
(*1)Verticaが複数ノードで構成されたクラスタ構成の場合のみが対象です。
(*2)システムで使われるクエリをDBDに読み込ませると、そのクエリの特性を考慮したうえで最適化が行われます。
列やデータの順序、データの圧縮形式などをデータベース管理者が意識せずにVerticaに自動判断させることができるため、複雑なスキルを必要としません。
スーパープロジェクション最適化の手順
スーパープロジェクションを最適化するには、Management Consoleを使う方法と、admintoolsを使う方法の2種類があります。具体的な手順については、以下の記事をご参照ください。Management Consoleを利用したプロジェクションの最適化~DBD編~
https://vertica-tech.ashisuto.co.jp/beginner_vertica_3/
admintoolsを利用したDatabase Designerの実行手順
https://vertica-tech.ashisuto.co.jp/execute-database-designer-using-admintools/
気をつけないといけないこと
スーパープロジェクションを最適化する場合について、注意点をご紹介します。実行タイミング
Verticaではテーブルを作成すると自動的に1つのスーパープロジェクションが作成されます。この時に作成されるスーパープロジェクションは最適化されていない状態です。その状態でも列指向型データベースの特性によって高いパフォーマンスは得られますが、さらに高速化するためには、新たにテーブルを作成した後に最適化作業を実施することを検討してください。
※データ件数が0件の時に最適化を実行すると不適切なプロジェクションが作成されるので、データの追加後に実施してください。
最適化の実施タイミングについては、以下の記事をご参照ください。
サンプルデータをロードした後にプロジェクションを最適化する
https://vertica-tech.ashisuto.co.jp/work-before-starting-operation/
実行頻度
スーパープロジェクションを最適化したタイミングより後に追加したデータは、最適化された形でスーパープロジェクションに自動的に格納されていきます。そのため、プロジェクションは1回実行するだけでその効果を恒久的に得ることができます。しかし、システム改変などによって格納されるデータの傾向が変わってしまったり(カーディナリティが変わったり)、頻繁に使われるSQLが変わってしまった場合には(既存のスーパープロジェクションを最適化した際に読み込ませたクエリが使われなくなった場合には)、新たに最適化することを推奨します。
最適化中の他操作
原則、プロジェクション最適化を実行中には他の操作や処理を実施しないでください。最適化実行中にデータの変更(INSERT、DELETE、TRUNCATE、COPY)やテーブルに対する変更(DROP、ALTER)を行うと処理同士が競合するためです。また、マシンリソースの観点から、メモリ不足やオープンファイルのハンドリング上限値に達する事でエラーになる事があるためです。これらの理由から、最適化実行中には他の操作や処理を実施しない事が推奨されています。
一時的なデータ量の増加
プロジェクションの最適化を実行する際は、十分なディスクの空き領域を確保して下さい。※一時領域用にディスクサイズの40%は常に空き領域として確保しておくことが推奨されています。
プロジェクションの最適化が行われた際には、既存の未最適化プロジェクションのデータ内容を直接変更するのではなく、別途新しいプロジェクションを作成します。そのため、一時的に最適化を行う分のプロジェクションの容量が別途必要となります。
なお、プロジェクションの最適化が完了すると、古いプロジェクションは自動で削除されます。

テーブルを再作成した場合
テーブルを再作成した場合は、最適化されたスーパープロジェクションも削除されてしまいます。データの追加後に再度最適化を実施してください。検証バージョン
この記事の内容はVertica 25.1で確認しています。更新履歴
2025/03/10 「気を付けないといけないこと」の内容を修正2023/05/22 一部内容を修正
2017/04/20 本記事を公開