OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

クエリスペシフィックプロジェクションの利用状況を確認する方法

公開日:
更新日:
基本操作
#プロジェクション

はじめに

スーパープロジェクションを最適化した状態でパフォーマンスに満足のいかないクエリがある場合、クエリスペシフィックプロジェクション(以降、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タイプ
・'input'はクエリによるアクセス
・outputはデータロードによるアクセス

WHERE句

projection_usage

query_start_timestamp

プロジェクションを利用したクエリの実行開始日時

WHERE句

projections

is_prejoin

プリジョインプロジェクションか否かを示すブール値
・'t'は真
・'f'は偽

WHERE句

projections

is_super_projection

スーパープロジェクションか否かを示すブール値
・'t'は真
・'f'は偽

WHERE句

projections

is_aggregate_projection

アグリゲートションか否かを示すブール値
・'t'は真
・'f'は偽

WHERE句

projections

is_key_constraint_projection

キー制約プロジェクションか否かを示すブール値
・'t'は真
・'f'は偽

WHERE句

検証バージョンについて

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