はじめに

Verticaには、チューニングの推奨方法を示すWorkload Analyzerという機能があります。
この機能を使う事で、データベースのオブジェクトを最適にするためのヒントを得る事ができます。

Workload Analyzerとは

Workload Analyzerは、システムテーブルが持つ情報を解析します。
パフォーマンスの悪いクエリの原因を特定するために、クエリやワークロードの履歴、リソース、設定情報を監視します。

Workload Analyzerは、統計情報、データコレクターの情報、データベース/テーブル/プロジェクション・デザインといった組み合わせに基づいたチューニングの推奨方法を提示します。
この機能によって、高度なチューニングスキルをお持ちでない方でも簡単に素早くチューニングをする事ができます。

Workload Analyzerの実行

Workload Analyzerを実行するには、以下の2つの方法があります。
・ANALYZE_WORKLOAD()関数を使用する
・Management Consoleを使用する

ANALYZE_WORKLOAD()関数

ANALYZE_WORKLOAD()関数を使う事で、チューニングの推奨方法を得る事ができます。

ANALYZE_WORKLOAD()関数の構文は以下の通りです。
ANALYZE_WORKLOAD ( ‘scope‘ [, ‘since_time‘ | , save_data ] );
※since_timeとsave_dataはどちらか一方を指定します。両方を指定する事はできません。

第一引数(scope)

第一引数のscopeを指定する事で、解析するイベントを特定します。
scopeには、何を解析するかを指定します。
引数WLAが返す推奨内容
''(空)すべてのデータベースオブジェクト
テーブル名特定のテーブル
スキーマ名特定のスキーマ内にあるすべてのオブジェクト


第二引数(since_time)

第二引数のsince_timeを指定する事で、指定した時刻から開始して現在の状態に至るまでのすべてのイベントを解析します。
since_time引数を省略した場合は、ANALYZE_WORKLOAD()を最後に実行した時点からの推奨を提示します。
since_time引数の値はTIMESTAMP型またはTIMESTAMPTZ型のどちらかを明示的に指定しなければなりません。

(例)
以下に4通りのsince_time引数の例を異なるフォーマットで記載します。
いずれも同じ結果を取得するものです。
t1テーブルのおける2018年11月12日 12:00:00以降のワークロード結果を返します。


第二引数(save_data)

第二引数のもう1つの使い方として、save_dataを指定する方法があります。
save_dataは解析した結果を保存するかどうかを指定します。
結果を保存する場合はtrue、結果を保存しない場合はfalse(デフォルト)を指定します。

例えば、以下のSQL文はWorkload Analyzerを実行し、すべてのデータベース・オブジェクトに対する推奨を表示し、その解析結果を記録します。

カラムデータ型説明
observation_countINTEGERその推奨するチューニング方法のイベントの合計回数を示します。
例えば、1が表示された場合はWLAが'scope'で最初に作成した推奨するチューニング方法という意味です。
first_observation_timeTIMESTAMPTZイベントが最初に発生した時刻です。
もし何も表示されなかった場合は、その推奨するチューニング方法は現在のシステムから収集した結果である事を意味します。
last_observation_timeTIMESTAMPTZイベントが最後に発生した時刻です。
もし何も表示されなかった場合は、その推奨するチューニング方法は現在のシステムから収集した結果である事を意味します。
tuning_parameterVARCHARチューニングすべきオブジェクトを表示します。
例えば、データベースデザインを実行すべき「スキーマ名.テーブル名」やパスワードを設定すべき「ユーザ名」などが表示されます。
tuning_descriptionVARCHAR推奨するチューニング方法の説明が表示されます。
例えば、以下のようなものが表示されます。

・Run database designer on table schema.table
 (schema.tableテーブルに対してデータベースデザイナーを実行してください)

・Create replicated projection for table schema.table
 (schema.tableテーブルに対してプロジェクションのレプリケーションを作成してください)

・Consider incremental design on query
 (クエリのための追加のデザイン(クエリ・スペシフィック・プロジェクション)を検討してください)

・Reset configuration parameter with ALTER DATABASE dbName SET parameter = value;
 (「ALTER DATABASE dbName SET parameter = value;」を実行して、パラメータ設定をリセットしてください)

・Re-segment projection projection-name on high-cardinality column(s)
 (カーディナリティの高いカラムについて、projection-nameプロジェクションのリセグメントをしてください)

・Drop the projection projection-name
 (projection-nameプロジェクションをDROPしてください)

・Alter a table's partition expression
 (テーブルのパーティションを変更してください)

・Reorganize data in partitioned table
 (パーティション化されたテーブルのデータを再構成してください)

・Decrease the MoveOutInterval configuration parameter setting
 (MoveOutIntervalパラメータの設定を減らしてください)
tuning_commandVARCHARチューニング方法がSQLコマンドだった場合、コマンド文が表示されます。
例えば、以下のようなコマンド文が表示されます。

・Update statistics on a particular schema's table.column:
 (特定のスキーマの「テーブル名.カラム名」に対して統計情報を更新してください)
 SELECT ANALYZE_STATISTICS('public.table.column');

・Resolve mismatched configuration parameter 'LockTimeout':
 (LockTimeoutパラメータのミスマッチを解消してください)
 SELECT * FROM CONFIGURATION_PARAMETERSWHERE parameter_name = 'LockTimeout';

・Set the password for user bsmith:
 (bsmithユーザのパスワードを設定してください)
 ALTER USER (user) IDENTIFIED BY ('new_password');
tuning_costVARCHAR・LOW
チューニング用のコマンドを実行した場合のリソースへのインパクトが最小のコストである事を意味します。
・MEDIUM
チューニング用のコマンドを実行した場合のリソースへのインパクトが適度のコストである事を意味します。
・HIGH
チューニング用のコマンドを実行した場合のリソースへのインパクトが最大のコストである事を意味します。

※データベースやテーブルのサイズによって左右しますが、HIGHコストのオペレーションはピーク時間を過ぎた後に実施する事を検討してください。



Management Consoleでの使い方

Management Consoleを使用して、Workload Analyzerを使う事もできます。
Management Consoleのダッシュボードにある、Workload Analyzer(赤枠)をクリックします。



すると、以下のようなページが表示されます。
チューニング方法とコストが表示されます。

まとめ

このように、Verticaが標準機能として持っているWorkload Analyzerを使う事でパフォーマンス・チューニングを誰でも簡単に行う事ができます。
CUIとGUI(Management Console)の両方で使う事ができますので、是非一度お試しください。

検証バージョンについて

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