はじめに
スーパープロジェクションを最適化した状態でパフォーマンスに満足のいかないクエリがある場合、クエリスペシフィックプロジェクション(以降、QSP)を作成することでチューニングできます。本記事では、以下のようなケースにおいて、QSPの利用状況を確認する方法を紹介します。
そのQSPが現在も利用されているか確認したい場合
プロジェクションの種類や最適化については、以下の記事をご参照ください。
クエリスペシフィックプロジェクションの利用状況を確認する方法
以下のSQLを実行することにより、条件句で指定した期間にクエリスペシフィックプロジェクションが利用された回数を確認できます。利用されていない場合は、検索結果が0件になります。
※システムテーブルに格納されている履歴情報は一定期間を過ぎると古いものから削除されるため、定期的に出力結果を保存しておく必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/***** クエリスペシフィックプロジェクションの利用状況を確認する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句 |