はじめに
スーパープロジェクションを最適化した状態でパフォーマンスに満足のいかないクエリがある場合、クエリスペシフィックプロジェクション(以降、QSP)を作成することでチューニングできます。
本記事では、以下のようなケースにおいて、QSPの利用状況を確認する方法を紹介します。
QSPによってチューニングの効果が得られた後、例えば1年後などに
そのQSPが現在も利用されているか確認したい場合
効果的に利用されているQSPを特定し、それを参考に他のQSP作成を検討する場合
プロジェクションの種類や最適化については、以下の記事をご参照ください。
プロジェクションの概要
https://www.ashisuto.co.jp/cm/analytics-database/projection-description.html
プロジェクション最適化に関するまとめ記事
https://www.ashisuto.co.jp/cm/analytics-database/optimize-projection.html
クエリスペシフィックプロジェクションの利用状況を確認する方法
以下のSQLを実行することにより、条件句で指定した期間にクエリスペシフィックプロジェクションが利用された回数を確認できます。
利用されていない場合は、検索結果が0件になります。
※システムテーブルに格納されている履歴情報は一定期間を過ぎると古いものから削除されるため、定期的に出力結果を保存しておく必要があります。
/***** クエリスペシフィックプロジェクションの利用状況を確認するSQL *****/
SELECT
pu.anchor_table_schema AS スキーマ名,
pu.anchor_table_name AS テーブル名,
pu.projection_name AS プロジェクション名,
count(*) AS プロジェクション利用回数
FROM
projection_usage pu
INNER JOIN projections p
ON (pu.anchor_table_id = p.anchor_table_id
AND pu.projection_id = p.projection_id)
WHERE
p.is_prejoin = 'f'
AND p.is_super_projection = 'f'
AND p.is_aggregate_projection = 'f'
AND p.is_key_constraint_projection = 'f'
AND pu.io_type = 'input'
AND pu.query_start_timestamp BETWEEN '2017-07-18 00:00:00' AND '2017-07-18 23:59:59' /* 期間を指定 */
GROUP BY
pu.anchor_table_schema,
pu.anchor_table_name,
pu.projection_name;
/***** 上記SQLの実行結果例 *****/
スキーマ名 | テーブル名 | プロジェクション名 | プロジェクション利用回数
------------+------------+----------------------+--------------------------
public | table1 | table1_DBD_1_rep_qsp | 3
(1 row)<システムテーブルの内容>
システムテーブル名 | 列名 | 列の内容 | 上述SQLでの記述箇所 |
|---|---|---|---|
projection_usage | anchor_table_schema | スキーマ名 | SELECTリスト |
projection_usage | anchor_table_name | テーブル名 | SELECTリスト |
projection_usage | projection_name | プロジェクション名 | SELECTリスト |
projection_usage | io_type | I/Oタイプ | WHERE句 |
projection_usage | query_start_timestamp | プロジェクションを利用したクエリの実行開始日時 | WHERE句 |
projections | is_prejoin | プリジョインプロジェクションか否かを示すブール値 | WHERE句 |
projections | is_super_projection | スーパープロジェクションか否かを示すブール値 | WHERE句 |
projections | is_aggregate_projection | アグリゲートションか否かを示すブール値 | WHERE句 |
projections | is_key_constraint_projection | キー制約プロジェクションか否かを示すブール値 | WHERE句 |
検証バージョンについて
この記事の内容はVertica 8.1で確認しています。