メニュー
Amazon Redshift
管理ガイド (API Version 2012-12-01)

ワークロード管理の設定

Amazon Redshift では、ワークロード管理 (WLM) を使用して、使用可能なクエリキューの数と、処理するためにクエリをそれらのキューにルーティングする方法を定義します。WLM は、パラメーターグループ設定の一部です。クラスターは、関連付けられているパラメーターグループで指定された WLM 設定を使用します。

パラメーターグループを作成すると、デフォルトの WLM 設定には、最大 5 つのクエリを同時に実行できる 1 つのキューが含まれます。クエリの処理をさらに細かく制御する場合、キューを追加して、各キューの WLM プロパティを設定できます。追加した各キューのデフォルトの WLM 設定は、そのプロパティを設定するまで同じです。

付加的なキューを追加する場合、設定内の最後のキューがデフォルトキューになります。クエリが WLM 設定の条件に基づいて別のキューにルーティングされる場合を除いて、デフォルトキューにより処理されます。デフォルトキューのユーザーグループまたはクエリグループを指定することはできません。

他のパラメーターと同様、デフォルトパラメーターグループで WLM 設定を変更することはできません。デフォルトパラメーターグループに関連付けられたクラスターは、常にデフォルトの WLM 設定を使用します。WLM 設定を変更する場合、パラメーターグループを作成した後、カスタム WLM 設定を必要とするクラスとそのパラメーターグループを関連付けます。

WLM の動的プロパティと静的プロパティ

WLM 設定プロパティは動的または静的とすることができます。動的なプロパティは、クラスターを再起動することなくデータベースに適用できますが、静的プロパティで変更を有効にするには、クラスターの再起動が必要です。ただし、動的プロパティと静的プロパティを同時に変更する場合は、動的か静的かにかかわらず、すべてのプロパティの変更を有効にするには、クラスターを再起動する必要があります。

次の WLM プロパティは静的です。

  • ユーザーグループ

  • User Group Wildcard

  • クエリグループ

  • Query Group Wildcard

クエリキューの追加、削除、または順序変更は静的な変更であり、有効にするにはクラスターの再起動が必要です。

次の WLM プロパティは動的です。

  • Concurrency

  • Percent of memory to use

  • タイムアウト

タイムアウトの値が変更された場合、その新しい値は、値が変更された後に実行を開始する任意のクエリに適用されます。使用する同時実行またはメモリの割合が変更された場合、Amazon Redshift は新しい設定に動的に移行するため、現在実行されているクエリは変更によって影響を受けません。詳細については、「WLM の動的なメモリの割り当て」を参照してください。

wlm_json_configuration パラメーター内のプロパティ

WLM は、Amazon Redshift console、AWS CLI、Amazon Redshift API、またはいずれかの AWS SDK を使用して設定できます。WLM 設定は、キュー間でのメモリ割り当て、キューで同時に実行できるクエリの数などのキューの動作を定義するいくつかのプロパティで構成されます。次の一覧では、各キューに設定できる WLM プロパティについて説明します。

注記

以下のプロパティは Amazon Redshift console 名を使用して示されており、対応する JSON プロパティは説明で示されています。

Concurrency

キューで同時に実行できるクエリの数。キューが同時実行レベルに達すると、後続のクエリを処理するリソースが利用可能になるまでそれらのクエリはキューで待機します。範囲は 1~50 です。

JSON プロパティ: query_concurrency

ユーザーグループ

ユーザーグループ名のカンマ区切りリスト。ユーザーグループのメンバーがデータベースでクエリを実行すると、そのメンバーのクエリはユーザーグループに関連付けられたキューにルーティングされます。

JSON プロパティ: user_group

User Group Wildcard

ユーザーグループでワイルドカードを有効にするかどうかを示すブール値。この値が 0 の場合、ワイルドカードは無効です。この値が 1 の場合、ワイルドカードは有効です。ワイルドカードが有効な場合、「+」または「?」を使用し、クエリを実行するときに複数のユーザーグループを指定できます。

JSON プロパティ: user_group_wild_card

Query Groups

クエリグループのカンマ区切りリスト。クエリグループのメンバーがデータベースでクエリを実行すると、そのメンバーのクエリはクエリグループに関連付けられたキューにルーティングされます。

JSON プロパティ: query_group

Query Group Wildcard

クエリグループでワイルドカードを有効にするかどうかを示すブール値。この値が 0 の場合、ワイルドカードは無効です。この値が 1 の場合、ワイルドカードは有効です。ワイルドカードが有効な場合、「+」または「?」を使用し、クエリを実行するときに複数のクエリグループを指定できます。

JSON プロパティ: query_group_wild_card

Timeout (ms)

クエリが実行されて始めてからキャンセルされるまでの最大時間 (ミリ秒単位)。

JSON プロパティ: max_execution_time

メモリ (%)

キューに割り当てるメモリの割合。1 つ以上のキュー用のメモリ割合を指定する場合、合計が 100 パーセントになるように他のすべてのキュー用の割合を指定する必要があります。すべてのキューに割り当てられたメモリの合計が 100 パーセントを下回る場合、未割り当てのメモリはサービスによって管理され、処理用に追加メモリをリクエストするキューに一時的に付与できます。

JSON プロパティ: memory_percent_to_use

各プロパティの詳細とクエリキューの設定戦略については、Amazon Redshift Database Developer Guideの「クエリキューの定義」と「ワークロード管理の実装」を参照してください。

AWS CLI による wlm_json_configuration パラメーターの設定

WLM を設定するには、wlm_json_configuration パラメーターを変更します。この値は JavaScript Object Notation (JSON) でフォーマットされています。AWS CLI、Amazon Redshift API、またはいずれかの AWS SDK を使用して WLM を設定する場合、このセクションの残りの部分で wlm_json_configuration パラメーターの JSON 構造を構築する方法を参照してください。

注記

Amazon Redshift console を使用して WLM を設定する場合、コンソールでは簡単にキューを追加してそのプロパティを設定できるため、JSON 形式について理解する必要はありません。Amazon Redshift console を使用することで WLM を設定する方法の詳細については、「パラメーターグループを変更する」を参照してください。

次の例は、同時実行レベルが 5 である 1 つのキューを定義するデフォルトの WLM 設定です。

Copy
{ "query_concurrency":5 }

構文

デフォルトの WLM 設定は非常にシンプルで、キューが 1 つとプロパティが 1 つしかありません。JSON 構造でキューを追加し、キューごとに複数のプロパティを設定することができます。次の構文は、複数のプロパティを持つ複数のキューを設定する場合に使用する JSON 構造を表しています。

Copy
[ { "ParameterName":"wlm_json_configuration", "ParameterValue": "[ { "q1_first_property_name":"q1_first_property_value", "q1_second_property_name":"q1_second_property_value", ... }, { "q2_first_property_name":"q2_first_property_value", "q2_second_property_name":"q2_second_property_value", ... } ... ]" } ]

前の例では、q1 で始まる代表的なプロパティは、最初のキューの配列にあるオブジェクトです。これらの各オブジェクトは名前と値のペアです。namevalue を組み合わせて最初のキューに WLM プロパティを設定します。q2 で始まる代表的なプロパティは、2 番目のキューの配列にあるオブジェクトです。より多くのキューが必要な場合、追加の各キューに別のアレイを追加し、各オブジェクトのプロパティを設定します。

WLM の設定を変更する際は、キュー内の 1 つのプロパティだけを変更する場合であっても、キューの構造全体を含める必要があります。これは、wlm_json_configuration パラメーターの値として、JSON 構造全体が文字列として渡されるためです。

AWS CLI コマンドのフォーマット

AWS CLI を使用する場合、wlm_json_configuration パラメーターには特定の形式が必要です。使用する形式は、クライアントのオペレーティングシステムによって異なります。コマンドラインから正しく渡されるように JSON 構造を囲む方法は、オペレーティングシステムによってさまざまです。Linux、Mac OS X、Windows の各オペレーティングシステムで適切なコマンドを作成する方法の詳細については、以下のセクションを参照してください。AWS CLI で JSON データ構造を囲む一般的な方法の違いの詳細については、AWS Command Line Interface ユーザーガイド の「文字列の引用」を参照してください。

次に示すのは、example-parameter-group という名前のパラメーターグループの WLM を設定するためのサンプルコマンドです。ApplyType 設定が dynamic であるため、このパラメーター内の動的プロパティに対して行われたすべての変更は、設定に対して他の静的な変更が行われていない限り、速やかに適用されます。この設定では、次の 3 つのキューを定義しています。

  • 最初のキューにより、ユーザーは自身のキューで report をラベルとして (query_groups プロパティで) 指定し、そのキューへのクエリのルーティングをスムーズにすることができます。report ではワイルドカード検索が有効にされているため、クエリをキューにルーティングするためにラベルを正しい順序にする必要はありません。たとえば、reportsreporting もこのクエリグループに一致します。このキューにはすべてのキューの合計メモリのうち 25 パーセントが割り当てられ、最大 4 つのクエリを同時に実行できます。クエリの時間は、最大 20,000 ミリ秒 (ms) に制限されています。

  • 2 番目のキューにより、データベース内の admin または dba グループのメンバーであるユーザーは、自身のクエリを処理用にそのキューにルーティングすることができます。ユーザーグループではワイルドカード検索が無効になっているため、ユーザーは自身のクエリがそのキューにルーティングされるようにデータベース内のグループと正確に一致する必要があります。このキューにはすべてのキューの合計メモリのうち 40 パーセントが割り当てられ、最大 5 つのクエリを同時に実行できます。

  • 設定内の最後のキューはデフォルトキューです。このキューにはすべてのキューの合計メモリのうち 35 パーセントが割り当てられ、最大 5 つのクエリを同時に処理できます。

注記

デモンストレーションの目的で、例は複数行で示されています。実際のコマンドに改行を入れることはできません。

Copy
aws redshift modify-cluster-parameter-group --parameter-group-name example-parameter-group --parameters '[ { "ParameterName":"wlm_json_configuration", "ParameterValue":"[ { "query_group":["report"], "query_group_wild_card":1, "query_concurrency":4, "max_execution_time":20000, "memory_percent_to_use":25 }, { "user_group":["admin","dba"], "user_group_wild_card":0, "query_concurrency":5, "memory_percent_to_use":40 }, { "query_concurrency":5, "memory_percent_to_use":35 } ]", "ApplyType":"dynamic" } ]'

Linux および Mac OS X オペレーティングシステムのコマンドラインで AWS CLI を使用して WLM を設定する際のルール

  • JSON 構造全体を単一引用符 (') と角括弧 ([ ]) で囲む必要があります。

  • すべてのパラメーター名とパラメーター値は、二重引用符 (") で囲む必要があります。

  • ParameterValue 値内では、ネストされた構造全体を二重引用符 (") と角括弧 ([ ]) で囲む必要があります。

  • ネストされた構造内では、各キューのプロパティと値をそれぞれ中括弧 ({ }) で囲む必要があります。

  • ネストされた構造内では、各二重引用符 (") の前で円記号 (\) のエスケープ文字を使用する必要があります。

  • 名前と値のペアでは、各プロパティとその値をコロン (:) で区切ります。

  • 名前と値の各ペアは、カンマ (,) で区切ります。

  • 複数のキューは、キューの中括弧の末尾 (}) とその次のキューの中括弧の先頭 ({) の間にカンマ (,) を置くことで区切ります。

次の例は、Linux および Mac OS X の各オペレーティングシステムで AWS CLI を使用して、このセクションで説明されているキューを設定する方法を示しています。

注記

この例は、AWS CLI では 1 行で送信する必要があります。

Copy
aws redshift modify-cluster-parameter-group --parameter-group-name example-parameter-group --parameters '[{"ParameterName":"wlm_json_configuration","ParameterValue":"[{\"query_group\":[\"reports\"],\"query_group_wild_card\":0,\"query_concurrency\":4,\"max_execution_time\":20000,\"memory_percent_to_use\":25},{\"user_group\":[\"admin\",\"dba\"],\"user_group_wild_card\":1,\"query_concurrency\":5,\"memory_percent_to_use\":40},{\"query_concurrency\":5,\"memory_percent_to_use\":35}]","ApplyType":"dynamic"}]'

Microsoft Windows オペレーティングシステムの Windows PowerShell で AWS CLI を使用して WLM を設定する際のルール

  • JSON 構造全体を単一引用符 (') と角括弧 ([ ]) で囲む必要があります。

  • すべてのパラメーター名とパラメーター値は、二重引用符 (") で囲む必要があります。

  • ParameterValue 値内では、ネストされた構造全体を二重引用符 (") と角括弧 ([ ]) で囲む必要があります。

  • ネストされた構造内では、各キューのプロパティと値をそれぞれ中括弧 ({ }) で囲む必要があります。

  • ネストされた構造内では、各二重引用符 (") とその円記号 (\) のエスケープ文字の前で円記号 (\) のエスケープ文字を使用する必要があります。この要件は、プロパティが正しく渡されるようにするため (\\\:)、3 つの円記号と 1 つの二重引用符を使用することを意味します。

  • 名前と値のペアでは、各プロパティとその値をコロン (:) で区切ります。

  • 名前と値の各ペアは、カンマ (,) で区切ります。

  • 複数のキューは、キューの中括弧の末尾 (}) とその次のキューの中括弧の先頭 ({) の間にカンマ (,) を置くことで区切ります。

次の例は、Windows オペレーティングシステム上の Windows PowerShell で AWS CLI を使用して、このセクションで説明されているキューを設定する方法を示しています。

注記

この例は、AWS CLI では 1 行で送信する必要があります。

Copy
aws redshift modify-cluster-parameter-group --parameter-group-name example-parameter-group --parameters '[{\"ParameterName\":\"wlm_json_configuration\",\"ParameterValue\":\"[{\\\"query_group\\\":[\\\"reports\\\"],\\\"query_group_wild_card\\\":0,\\\"query_concurrency\\\":4,\\\"max_execution_time\\\":20000,\\\"memory_percent_to_use\\\":25},{\\\"user_group\\\":[\\\"admin\\\",\\\"dba\\\"],\\\"user_group_wild_card\\\":1,\\\"query_concurrency\\\":5,\\\"memory_percent_to_use\\\":40},{\\\"query_concurrency\\\":5,\\\"memory_percent_to_use\\\":35}]\",\"ApplyType\":\"dynamic\"}]'

Windows オペレーティングシステムでコマンドプロンプトを使用して WLM を設定する際のルール

  • JSON 構造全体を二重引用符 (") と角括弧 ([ ]) で囲む必要があります。

  • すべてのパラメーター名とパラメーター値は、二重引用符 (") で囲む必要があります。

  • ParameterValue 値内では、ネストされた構造全体を二重引用符 (") と角括弧 ([ ]) で囲む必要があります。

  • ネストされた構造内では、各キューのプロパティと値をそれぞれ中括弧 ({ }) で囲む必要があります。

  • ネストされた構造内では、各二重引用符 (") とその円記号 (\) のエスケープ文字の前で円記号 (\) のエスケープ文字を使用する必要があります。この要件は、プロパティが正しく渡されるようにするため (\\\:)、3 つの円記号と 1 つの二重引用符を使用することを意味します。

  • 名前と値のペアでは、各プロパティとその値をコロン (:) で区切ります。

  • 名前と値の各ペアは、カンマ (,) で区切ります。

  • 複数のキューは、キューの中括弧の末尾 (}) とその次のキューの中括弧の先頭 ({) の間にカンマ (,) を置くことで区切ります。

次の例は、Windows オペレーティングシステム上のコマンドプロンプトで AWS CLI を使用して、このセクションで説明されているキューを設定する方法を示しています。

注記

この例は、AWS CLI では 1 行で送信する必要があります。

Copy
aws redshift modify-cluster-parameter-group --parameter-group-name example-parameter-group --parameters "[{\"ParameterName\":\"wlm_json_configuration\",\"ParameterValue\":\"[{\\\"query_group\\\":[\\\"reports\\\"],\\\"query_group_wild_card\\\":0,\\\"query_concurrency\\\":4,\\\"max_execution_time\\\":20000,\\\"memory_percent_to_use\\\":25},{\\\"user_group\\\":[\\\"admin\\\",\\\"dba\\\"],\\\"user_group_wild_card\\\":1,\\\"query_concurrency\\\":5,\\\"memory_percent_to_use\\\":40},{\\\"query_concurrency\\\":5,\\\"memory_percent_to_use\\\":35}]\",\"ApplyType\":\"dynamic\"}]"