はじめに

以下の記事でVerticaの大きな特徴であるプロジェクションについて概要をご紹介しました。

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


Verticaは最適化スーパープロジェクションのみでも基本的には高速なパフォーマンスを得られます。しかし、SQLによっては性能差が顕著に見られ、期待したパフォーマンスを得られない場合もあります。このような場合に、特定処理のレスポンス向上を目的としたクエリスペシフィックプロジェクション(以降、QSPと表記)の作成を検討します。

本記事では、QSPの特徴や作成手順を解説します。また、全体最適化実施後に期待したパフォーマンスが出ておらず、どうにかしてチューニングを行いたい例として、QSP作成後のパフォーマンス改善例をご紹介します。


クエリスペシフィックプロジェクションとは

特定のクエリのパフォーマンス向上を目的とするプロジェクションです。
該当のクエリの実行に必要な列のみを保持しており、そのクエリに特化したソートや圧縮が行われています。

下記の図は、「日付」列をWHERE句の条件値としたクエリの実行例です。



左側のスーパープロジェクションを見てみると、「エリア」と「店舗」ではソート、圧縮が効いていますが、「日付」列はソートされていないため、SQLの例にある「日付」での条件指定には適していない状態であることがわかります。

このような場合に対象のクエリを読み込ませると、右側のQSPの例のように「日付」列でソート、圧縮されるような状態になります。条件として指定された「日付」列の読み込みに対して効果が発揮されます。


テストケース

今回は以下のようなテストケースを例にQSPの作成手順をご紹介します。

 <データ>
  テーブル数・・・5
  対象データ量・・・明細テーブル 約7億件

 <クエリの詳細>
  前提・・・スーパープロジェクションの最適化のみ実施済
  対象処理・・・Star Schema BenchMarkのクエリ7~9
  各クエリの応答時間
  
クエリ処理件数応答時間(秒)
クエリ715086.02
クエリ860065.8
クエリ92427.4


  [クエリ7のSQL文]


  [クエリ8のSQL文]


  [クエリ9のSQL文]




QSP作成手順

QSPはManagement Console(以降、MCと表記)もしくはAdministration Toolsを使って作成します。本記事ではMCを利用した作成手順をご紹介します。
※操作手順や選択項目の詳細は以下の記事も参考にしてください。

【参考】Management Consoleを利用したDatabase Designerの実行手順
http://vertica-tech.ashisuto.co.jp/execute-database-designer-using-management-console/


Management Consoleにログイン

ブラウザから以下URLにアクセスをし、ユーザ名・パスワードを入力してManagement Consoleにログインします。(URLはご利用中の環境に読み替えてください。)

 https://<導入先ホスト名orIPアドレス>:5450/webui



ログイン後、ターゲットデータベースを選択し、Overviewの画面に移動します。


データベースデザイナ実行ウィザードの起動

画面下段にあるメニューから「Design」を選択します。


デザイン名の入力

任意のデザイン名を入力して次に進みます。


デザインタイプの選択

デザインタイプには「Incremental」を選択します。


SQLファイルの指定

読み込ませるSQLファイルを指定します。
この例ではクエリ7~9を一つに纏めたスクリプトファイルを指定します。
(単一のSQL文を記載したスクリプトファイルを読み込ませることも可能です)


オプションの指定

オプションを指定します。デプロイまで実行する場合には全てのオプションを選択します。

Analyze Statistics : DBD実行後に統計を分析するか指定
Auto-build      : ウィザード完了後にすぐにDBDを実行するか指定
Auto-deploy     : 自動配置するか指定



サマリー画面

ここまでの設定内容がサマリー画面に表示されます。設定内容に問題がない場合には「Submit Design」をクリックして処理を実行します。


ステータス画面

QSPの作成処理を開始すると、以下のようなステータス画面が表示されます。


処理が完了すると、以下の画面のように「Deployment In progress: Deployment completed successfully」と表示されます。



レスポンス改善状況の確認

QSP作成後にクエリ7~9のレスポンスが改善されたか確認します。
以下はQSP作成前後でのそれぞれのクエリのレスポンス比較です。

  
クエリ処理件数QSP作成前(秒)QSP作成後(秒)短縮率(%)
クエリ715086.0235.0559.25
クエリ860065.86.390.47
クエリ92427.41.395.18

クエリ7は約60%の短縮率、クエリ8と9は約90%の大幅な短縮率となりました。
通常、汎用的なデータベースであればSQLのチューニングやデータベースのパラメータチューニングを施す必要があります。しかし、Verticaではプロジェクションを活用することで、非常に低コストでチューニングを実施することができます。


注意点

今回の例では大幅にレスポンスが改善されましたが、QSP作成後に逆にレスポンスが悪化する場合もあります。そのような場合には、実行計画の確認や、ソート順序を確認するなど、どこに問題があるのか確認してチューニングを行うようにしてください。


【参考情報】
SQLの実行計画を確認する方法
http://vertica-tech.ashisuto.co.jp/sql-plan/

vsql上でプロジェクションのソート順を確認する方法
http://vertica-tech.ashisuto.co.jp/projection_columns/

Management Consoleを利用したモニタリング~クエリ解析編~
http://vertica-tech.ashisuto.co.jp/beginner_vertica_6/


検証バージョンについて

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