Vertica 7.2から、任意のクエリの実行計画を保存する「Directed Query」という機能が追加されました。

Directed Queryの利用方法

Directed Queryには「DIRECTED QUERY CUSTOM」と「DIRECTED QUERY OPTIMIZER」の2種類があります。

DIRECTED QUERY CUSTOM

SQLヒントを利用すると、使用するプロジェクションや結合タイプを強制できますが、このときの実行計画を「DIRECTED QUERY CUSTOM」を使用してVertica内に保存できます。実行計画を保存すると、次回以降はSQLヒントを使用せずにクエリを実行しても、SQLヒント使用時と同じ実行計画で処理が行われます。
例えば「SQLヒントを利用したいが、アプリケーション側でクエリの書き換えは行いたくない」といった場合は本機能が便利です。

使用手順

1. SAVE QUERYコマンドを実行します。このとき、実行計画を保存したいクエリにはまだヒント句は付与しないようにします。


2. CREATE DIRECTED QUERY CUSTOMコマンドを実行します。このとき、実行計画を保存したいクエリにはヒント句を付与してください。


3. ACTIVATE DIRECTED QUERYコマンドで作成したDIRECTED QUERYを有効にします。


以降は手順1で指定したクエリを実行すると、手順2で保存した実行計画でクエリが処理されるようになります。

例)t1_DBD_BBBBプロジェクションを使用する実行計画を保存する場合

1. 以下のクエリを実行した場合、デフォルトではt1_DBD_AAAAプロジェクションが使用されます。


2. ヒント句なしの該当のクエリを指定してSAVE QUERYコマンドを実行します。


3. t1_DBD_AAAAプロジェクションではなく、t1_DBD_BBBBプロジェクションの使用を強制するヒント句を付与したクエリの実行計画をt1_optという名前で保存します。


4. 保存したt1_optを有効化します。


5. 該当クエリをヒント句なしで実行してもt1_DBD_BBBBプロジェクションが使用されるようになりました。


DIRECTED QUERY OPTIMIZER

DIRECTED QUERY OPTIMIZERを使用すると、オプティマイザが生成したした実行計画を保存しておくことができます。
例えば、Verticaをバージョンアップすると、同じクエリでも実行計画が変更になる可能性があります。このときにバージョンアップ後も旧バージョンの実行計画を使いたいといった場合は本機能が便利です。

使用手順

1. CREATE DIRECTED QUERY OPTIMEERコマンドを実行します。本機能はオプティマイザが決定した実行計画を保存しておく機能のため、クエリにはヒント句を付与しません。


2. ACTIVATE DIRECTED QUERYコマンドで作成したDIRECTED QUERYを有効にします。


例)「SELECT * from t1 where col1 = 2」の実行計画を保存する場合

1. 「SELECT * from t1 where col1 = 2」の実行計画をt1_optという名前で保存します。


2. ACTIVATE DIRECTED QUERYコマンドで作成したDIRECTED QUERYを有効にします。


3. 該当クエリを実行すると、手順1で保存した実行計画が使用されるようになりました。


参考情報

SQLヒントを利用する(7.2新機能)
http://vertica-tech.ashisuto.co.jp/sql_hint_7-2/

検証バージョンについて

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