自動 WLM の実装 - Amazon Redshift

自動 WLM の実装

自動ワークロード管理 (WLM) では、Amazon Redshift がクエリの同時実行数とメモリの割り当てを管理します。サービスクラスの識別子 100〜107 を使用して、最大 8 つのキューを作成できます。各キューには優先度があります。詳細については、「クエリ優先度」を参照してください。

自動 WLM は、クエリに必要なリソース量を決定し、ワークロードに基づいて同時実行数を調整します。大量のリソースを必要とするクエリがシステムにある場合 (大きなテーブル間のハッシュ結合など)、同時実行数は減ります。軽いクエリ (挿入、削除、スキャン、単純な集計など) を送信すると、同時実行数は増えます。

自動 WLM は、ショートクエリアクセラレーション (SQA) とは別のものであり、クエリの評価方法が異なります。自動 WLM と SQA は連携して動作し、長時間実行されるリソース集約型のクエリがアクティブな場合でも、短時間実行されるクエリや軽量のクエリを完了させることができます。SQA の詳細については、「ショートクエリアクセラレーションを使用する」を参照してください。

Amazon Redshift では、パラメータグループを使用して、自動 WLM を有効にします。

  • クラスターでデフォルトのパラメータグループを使用している場合は、Amazon Redshift のクラスターで自動 WLM が有効になります。

  • クラスターでカスタムパラメータグループを使用している場合は、自動 WLM を有効にするようにクラスターを設定することができます。自動 WLM の設定用に個別のパラメータグループを作成することをお勧めします。

WLM を設定するには、1 つ以上のクラスターと関連付けることのできるパラメータグループの wlm_json_configuration パラメータを編集します。詳細については、「WLM 設定の変更」を参照してください。

クエリキューは、WLM 設定内で定義することができます。デフォルトの WLM 設定にクエリキューを追加することができます (最大合計 8 つのユーザーキュー)。クエリキューごとに以下を設定できます。

  • 優先度

  • 同時実行スケーリングモード

  • ユーザーグループ

  • クエリグループ

  • クエリのモニタリングルール

優先度

ワークロードでのクエリの相対的な重要度を定義するには、優先度の値を設定します。優先度はキューに指定され、キューに関連付けられたすべてのクエリに継承されます。詳細については、「クエリ優先度」を参照してください。

同時実行スケーリングモード

同時実行スケーリングが有効化された状態で、読み取りと書き込みクエリの同時実行の増加に対応する必要がある場合、Amazon Redshift は新たなクラスター容量を自動的に追加します。クエリをメインクラスターと同時実行スケーリングクラスターのどちらで実行しても、ユーザーには最新のデータが表示されます。

WLM キューを設定することで、どのクエリを同時実行スケーリングクラスターに送信するかを管理します。キューに対して同時実行スケーリングを有効にすると、対象クエリは待機することなく同時実行クラスターに送信されます。詳細については、「同時実行スケーリングを使用する」を参照してください。

ユーザーグループ

各ユーザーグループ名を指定するか、ワイルドカードを使用して、一連のユーザーグループをキューに割り当てることができます。リストされたユーザーグループのメンバーがクエリを実行すると、そのクエリは対応するキューで実行されます。キューに割り当てることができるユーザーグループの数に設定された制限はありません。詳細については、「ユーザーグループに基づくクエリのキューへの割り当て」を参照してください。

クエリグループ

各クエリグループ名を指定するか、ワイルドカードを使用して、一連のクエリグループをキューに割り当てることができます。クエリグループはラベルにすぎません。実行時に、一連のクエリにクエリグループラベルを割り当てることができます。一覧表示されたクエリグループに割り当てられたクエリは、対応するキューで実行されます。キューに割り当てることができるクエリグループの数に設定された制限はありません。詳細については、「クエリグループへのクエリの割り当て」を参照してください。

ワイルドカード

WLM キュー設定でワイルドカードを有効にした場合は、ユーザーグループやクエリグループをキューに個別に割り当てるか、Unix シェル形式のワイルドカードを使用して割り当てることができます。パターンマッチングでは大文字と小文字が区別されません。

例えば、ワイルドカード文字「*」は任意の文字数に一致します。たとえば、キューのユーザーグループのリストに dba_* を追加すると、dba_ で始まる名前を持つグループに属する、ユーザーが実行するすべてのクエリは、そのキューに割り当てられます。たとえば、dba_adminDBA_primary などがあります。ワイルドカード文字「?」は、任意の 1 文字に一致します。したがって、キューにユーザーグループ dba?1 が含まれている場合、dba11dba21 は一致しますが、dba12 は一致しません。

デフォルトでは、ワイルドカードは有効になっていません。

クエリのモニタリングルール

クエリモニタリングルールは、WLM キューのメトリクスベースのパフォーマンスの境界を定義し、クエリがこれらの境界を超えた場合のアクションを指定します。例えば、実行時間の短いクエリ専用のキューには、60 秒以上実行されるクエリをキャンセルするルールを作成できます。デザインの不十分なクエリを追跡する目的で、ネステッドループを含むクエリを記録する別のルールを設定することができます。詳細については、「WLM クエリモニタリングルール」を参照してください。

自動 WLM の設定を確認する

自動 WLM が有効になっているかどうかを確認するには、次のクエリを実行します。クエリより 1 行以上が返る場合、自動 WLM は有効になっています。

select * from stv_wlm_service_class_config where service_class >= 100;

次のクエリは、各クエリキュー (サービスクラス) を通過したクエリの数を示しています。また、平均実行時間、待機時間が発生しているクエリの数 (90 パーセンタイル値)、平均待機時間を示しています。自動 WLM クエリでは、サービスクラス 100~107 を使用します。

select final_state, service_class, count(*), avg(total_exec_time), percentile_cont(0.9) within group (order by total_queue_time), avg(total_queue_time) from stl_wlm_query where userid >= 100 group by 1,2 order by 2,1;

自動 WLM で実行されて正常に完了したクエリを確認するには、次のクエリを実行します。

select a.queue_start_time, a.total_exec_time, label, trim(querytxt) from stl_wlm_query a, stl_query b where a.query = b.query and a.service_class >= 100 and a.final_state = 'Completed' order by b.query desc limit 5;