

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# チュートリアル: 手動ワークロード管理 (WLM) キューの設定
<a name="tutorial-configuring-workload-management"></a>

Amazon Redshift では、手動ワークロード管理 (WLM) キューを設定して、さまざまなタイプのクエリやユーザーにリソースを優先して割り当てることができます。手動 WLM キューを使用すると、特定のキューに対するメモリと同時実行設定を制御できるため、優先度の低いクエリがシステムを占有するのを防ぎながら、重要なワークロードが必要なリソースを確実に得ることができます。以下のセクションでは、ワークロード管理要件を満たすために Amazon Redshift で手動 WLM キューを作成および設定するプロセスについて説明します。

## 概要
<a name="tutorial-wlm-overview"></a>

Amazon Redshift では自動ワークロード管理 (WLM) を設定することをお勧めします。自動 WLM の詳細については、「[ワークロード管理](cm-c-implementing-workload-management.md)」を参照してください。ただし、複数の WLM キューを必要とする場合のために、このチュートリアルでは、Amazon Redshift で手動ワークロード管理 (WLM) を設定するプロセスについて説明します。手動 WLM を設定することで、クラスターのクエリパフォーマンスとリソース割り当てを改善できます。

Amazon Redshift はユーザークエリをキューにルーティングして処理します。WLM は、クエリがキューにルーティングされる方法を定義します。デフォルトで、Amazon Redshift にはクエリに使用できるキューが 2 つあります。1 つはスーパーユーザー用で、もう 1 つはユーザー用です。スーパーユーザーキューは設定ができず、一度に 1 つのクエリしか処理できません。このキューはトラブルシューティング目的のみに使用してください。ユーザーキューは最大 5 件のクエリを一度に処理できますが、必要に応じてキューの同時実行レベルを変更することで、この件数を設定できます。

データベースに対して数人のユーザーがクエリを実行する場合は、別の設定の方が効率的なことがあります。例えば、一部のユーザーが VACUUM のように大量のリソースを使う操作を実行する場合、レポートのようにリソースをあまり使わないクエリに対して悪影響が生じることがあります。このような場合は、キューを追加して、異なるワークロード用に設定することを検討してください。

**予測時間:** 75 分

**推定コスト:** 50 セント

### 前提条件
<a name="tutorial-wlm-prereq"></a>

Amazon Redshift クラスター、サンプル TICKIT データベース、Amazon Redshift RSQL クライアントツールが必要です。これらをまだセットアップしていない場合は、「[Amazon Redshift 入門ガイド](https://docs.aws.amazon.com/redshift/latest/gsg/new-user.html)」と「[Amazon Redshift RSQL](https://docs.aws.amazon.com/redshift/latest/mgmt/rsql-query-tool.html)」を参照してください。

### セクション
<a name="tutorial-wlm-steps"></a>
+ [セクション 1: デフォルトキュー処理の動作の理解](#tutorial-wlm-understanding-default-processing)
+ [セクション 2: WLM のクエリキュー設定の変更](#tutorial-wlm-modifying-wlm-configuration)
+ [セクション 3: ユーザーグループとクエリグループに基づいてクエリをキューにルーティング](#tutorial-wlm-routing-queries-to-queues)
+ [セクション 4: wlm\$1query\$1slot\$1count を使用してキューの同時実行レベルを一時的に変更](#tutorial-wlm-query-slot-count)
+ [セクション 5: リソースのクリーンアップ](#tutorial-wlm-cleaning-up-resources)

## セクション 1: デフォルトキュー処理の動作の理解
<a name="tutorial-wlm-understanding-default-processing"></a>

手動 WLM の設定を開始する前に、Amazon Redshift におけるキュー処理のデフォルト動作を理解しておくと役に立ちます。このセクションでは、いくつかのシステムテーブルから情報を返すデータベースビューを 2 つ作成します。その後、いくつかのテストクエリを実行して、クエリがデフォルトでどのようにルーティングされるかを確認します。システムテーブルの詳細については、「[システムテーブルとビューのリファレンス](cm_chap_system-tables.md)」を参照してください。

### ステップ 1: WLM\$1QUEUE\$1STATE\$1VW ビューを作成する
<a name="tutorial-wlm-create-queue-state-view"></a>

このステップでは、WLM\$1QUEUE\$1STATE\$1VW というビューを作成します。このビューは、次のシステムテーブルから情報を返します。
+ [STV\$1WLM\$1CLASSIFICATION\$1CONFIG](r_STV_WLM_CLASSIFICATION_CONFIG.md)
+ [STV\$1WLM\$1SERVICE\$1CLASS\$1CONFIG](r_STV_WLM_SERVICE_CLASS_CONFIG.md)
+ [STV\$1WLM\$1SERVICE\$1CLASS\$1STATE](r_STV_WLM_SERVICE_CLASS_STATE.md)

チュートリアル全体でこのビューを使用して、WLM 設定の変更後にキューがどうなるかをモニタリングします。次の表は WLM\$1QUEUE\$1STATE\$1VW ビューが返すデータについて説明しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/tutorial-configuring-workload-management.html)

#### WLM\$1QUEUE\$1STATE\$1VW ビューを作成するには
<a name="how-to-wlm-create-queue-state-view"></a>

1. [Amazon Redshift RSQL](https://docs.aws.amazon.com/redshift/latest/mgmt/rsql-query-tool.html) を開き、TICKIT サンプルデータベースに接続します。このデータベースがない場合は、「[前提条件](#tutorial-wlm-prereq)」を参照してください。

1. 次のクエリを実行して、WLM\$1QUEUE\$1STATE\$1VW ビューを作成します。

   ```
   create view WLM_QUEUE_STATE_VW as
   select (config.service_class-5) as queue
   , trim (class.condition) as description
   , config.num_query_tasks as slots
   , config.query_working_mem as mem
   , config.max_execution_time as max_time
   , config.user_group_wild_card as "user_*"
   , config.query_group_wild_card as "query_*"
   , state.num_queued_queries queued
   , state.num_executing_queries executing
   , state.num_executed_queries executed
   from
   STV_WLM_CLASSIFICATION_CONFIG class,
   STV_WLM_SERVICE_CLASS_CONFIG config,
   STV_WLM_SERVICE_CLASS_STATE state
   where
   class.action_service_class = config.service_class 
   and class.action_service_class = state.service_class 
   and config.service_class > 4
   order by config.service_class;
   ```

1. 次のクエリを実行して、ビューに含まれる情報を表示します。

   ```
   select * from wlm_queue_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (querytype:any)                           |     5 | 836 |        0 |  false | false   |      0 |         1 |      160
   ```

### ステップ 2: WLM\$1QUERY\$1STATE\$1VW ビューを作成する
<a name="tutorial-wlm-create-query-state-view"></a>

このステップでは、WLM\$1QUERY\$1STATE\$1VW というビューを作成します。このビューは [STV\$1WLM\$1QUERY\$1STATE](r_STV_WLM_QUERY_STATE.md) システムテーブルから情報を返します。

チュートリアル全体でこのビューを使用して、実行中のクエリをモニタリングします。次の表は WLM\$1QUERY\$1STATE\$1VW ビューが返すデータについて説明しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/tutorial-configuring-workload-management.html)

#### WLM\$1QUERY\$1STATE\$1VW ビューを作成するには
<a name="how-to-wlm-create-query-state-view"></a>

1. RSQL で次のクエリを実行して、WLM\$1QUERY\$1STATE\$1VW ビューを作成します。

   ```
   create view WLM_QUERY_STATE_VW as
   select query, (service_class-5) as queue, slot_count, trim(wlm_start_time) as start_time, trim(state) as state, trim(queue_time) as queue_time, trim(exec_time) as exec_time
   from stv_wlm_query_state;
   ```

1. 次のクエリを実行して、ビューに含まれる情報を表示します。

   ```
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    1249 |     1 |          1 | 2014-09-24 22:19:16 | Executing | 0          | 516
   ```

### ステップ 3: テストクエリを実行する
<a name="tutorial-wlm-run-test-queries"></a>

このステップでは、RSQL で複数の接続からクエリを実行し、システムテーブルを確認して、クエリがどのようにルーティングされて処理されたかを判断します。

このステップでは、RSQL ウィンドウを 2 つ開いておく必要があります。
+ RSQL ウィンドウ 1 では、このチュートリアルで既に作成したビューを使用して、キューとクエリの状態をモニタリングするクエリを実行します。
+ RSQL ウィンドウ 2 では、RSQL ウィンドウ 1 に表示される結果を変更する実行時間が長いクエリを実行します。

#### テストクエリを実行するには
<a name="how-to-wlm-run-test-queries"></a>

1. RSQL ウィンドウを 2 つ開きます。既にウィンドウを 1 つ開いている場合は、2 つ目のウィンドウを開くだけでかまいません。どちらの接続にも同じユーザーアカウントを使用できます。

1. RSQL ウィンドウ 1 で、次のクエリを実行します。

   ```
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    1258 |     1 |          1 | 2014-09-24 22:21:03 | Executing | 0          | 549
   ```

   このクエリは自己参照的な結果を返します。現在実行中のクエリはこのビューからの SELECT ステートメントです。このビューに対するクエリは少なくとも 1 つの結果を常に返します。次のステップで実行時間が長いクエリを開始した後に表示される結果とこの結果を比較します。

1. RSQL ウィンドウ 2 で、TICKIT サンプルデータベースからクエリを実行します。このクエリは約 1 分間実行されるため、その間に WLM\$1QUEUE\$1STATE\$1VW ビューと以前に作成した WLM\$1QUERY\$1STATE\$1VW ビューの結果を確認できます。場合によっては、クエリの実行時間が短くて両方のビューに対してクエリを実行できないことがあります。このような場合は、`l.listid ` でフィルターの値を増やし、実行時間を延長できます。
**注記**  
クエリの実行時間を短縮し、システムパフォーマンスを向上させるために、Amazon Redshift は特定の種類のクエリの結果をリーダーノード上のメモリにキャッシュします。結果のキャッシュが有効になると、その後のクエリはより高速に実行されます。クエリが高速で実行されることを防ぐには、現行のセッションで結果のキャッシュを無効にします。

   現在のセッションに対する結果のキャッシュをオフにするには、以下にあるとおり、[enable\$1result\$1cache\$1for\$1session](r_enable_result_cache_for_session.md) パラメータを `off` に設定します。

   ```
   set enable_result_cache_for_session to off;
   ```

   RSQL ウィンドウ 2 で、次のクエリを実行します。

   ```
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid < 100000;
   ```

1. RSQL ウィンドウ 1 で、WLM\$1QUEUE\$1STATE\$1VW と WLM\$1QUERY\$1STATE\$1VW をクエリし、その結果を以前の結果と比較します。

   ```
   select * from wlm_queue_state_vw;
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (querytype:any)                           |     5 | 836 |        0 |  false | false   |      0 |         2 |      163
                           
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    1267 |     1 |          1 | 2014-09-24 22:22:30 | Executing | 0          | 684
    1265 |     1 |          1 | 2014-09-24 22:22:36 | Executing | 0          | 4080859
   ```

以前のクエリとこのステップでの結果との間には次の違いがあることに注意してください。
+ 現在は WLM\$1QUERY\$1STATE\$1VW に 2 行あります。1 つの結果は、このビューに対して SELECT 操作を実行する自己参照的クエリです。2 つ目の結果は、以前のステップの長時間実行されるクエリです。
+ WLM\$1QUEUE\$1STATE\$1VW の executing 列の値は、1 から 2 に増えました。この列エントリは、キューで 2 つのクエリが実行中であることを意味します。
+ executed 列の値は、キューのクエリを実行するたびに増加します。

WLM\$1QUEUE\$1STATE\$1VW ビューは、キューの全体像と各キューで処理中のクエリの数を把握するのに便利です。WLM\$1QUERY\$1STATE\$1VW ビューは、現在実行中の個々のクエリについてその詳細を把握するのに便利です。

## セクション 2: WLM のクエリキュー設定の変更
<a name="tutorial-wlm-modifying-wlm-configuration"></a>

キューのデフォルトの仕組みが理解できたため、次は手動 WLM を使用してクエリキューを設定する方法について説明します。このセクションでは、クラスターの新しいパラメータグループを作成して設定します。ユーザーキューを 2 つ追加で作成して、クエリのユーザーグループまたはクエリグループラベルに基づいてクエリを受け付けるように、これらのキューを設定します。この 2 つのキューのどちらにもルーティングされないクエリは、実行時にデフォルトキューにルーティングされます。

**パラメータグループの手動 WLM 設定を作成するには**

1. AWS マネジメントコンソール にサインインして、[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) で Amazon Redshift コンソールを開きます。

1. ナビゲーションメニューで、**[Configurations]** (設定) を選択し、次に **[Workload management]** (ワークロード管理) を選択して **[Workload management]** (ワークロード管理) ページを表示します。

1. [**作成**] を選択して [**パラメータグループの作成**] ウィンドウを表示します。

1. **[パラメータグループ名]** と **[説明]** の両方で **WLMTutorial** を入力し、**[作成]** をクリックしてパラメータグループを作成します。
**注記**  
[**パラメータグループ名**] は作成時にすべて小文字に変換されます。

1. [**ワークロード管理**] ページで、パラメータグループ **wlmtutorial** を選択し、[**パラメータ**] と [**ワークロード管理**] のタブのある詳細ページを表示します。

1. [**ワークロード管理**] タブを開いていることを確認し、[**Switch WLM mode (WLM モードの切り替え)**] を選択して [**Concurrency settings (同時実行設定)**] ウィンドウを表示します。

1. [**Manual WLM (手動 WLM)**] を選択してから [**保存**] を選択し、手動 WLM に切り替えます。

1. [**Edit workload queues (ワークロードキューの編集)**] を選択します。

1. [**キューの追加**] を 2 度選択して、2 つのキューを追加します。現在 [**キュー 1**]、[**キュー 2**]、[**デフォルトキュー**] の 3つのキューがある状態です。

1. それぞれのキューの情報を次のように入力します。
   + **[Queue 1]** (キュー 1) では、**[Memory (%)]** (メモリ (%)) に **30**、**[Concurrency on main]** (メインの同時実行性)に **2**、**[Query groups]** (クエリグループ) に **test** を入力します。その他の設定はデフォルト値のままにしておきます。
   + **[Queue 2]** (キュー 2) では、**[Memory (%)]** (メモリ (%)) に **40**、**[Concurrency on main]** (メインの同時実行性) に **3**、**[User groups]** (ユーザーグループ) に **admin** を入力します。その他の設定はデフォルト値のままにしておきます。
   + デフォルトキューの **[メインでの同時実行]** を 1 以上の値に設定します。**[デフォルトキュー]** は変更しないでください。WLM は、未割り当てのメモリをデフォルトキューに割り当てます。

1. 設定を保存するには [**保存**] を選択します。

次に、手動 WLM 設定を持つパラメータグループをクラスターに関連付けます。

**パラメータグループをクラスターの手動 WLM 設定に関連付けるには**

1. AWS マネジメントコンソール にサインインして、[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) で Amazon Redshift コンソールを開きます。

1. ナビゲーションメニューから **[Clusters]** (クラスター) を選択し、次に **[Clusters]** (クラスター) を選択してクラスターのリストを表示します。

1. クラスターの詳細を表示するには、`examplecluster` などのクラスターを選択します。次に、**[Properties]** (プロパティ) タブを選択して、そのクラスターのプロパティを表示します。

1. **[Database configurations]** (データベース構成) セクションで、**[Edit]** (編集)、**[Edit parameter group]** (パラメータグループの編集) を選択して、パラメータグループのウィンドウを表示します。

1. **[Parameter groups]** (パラメータグループ) で、以前に作成した **wlmtutorial** パラメータグループを選択します。

1. **[Save changes]** (変更を保存) を選択して、パラメータグループを関連付けます。

   クラスターは変更されたパラメータグループで変更されます。ただし、変更をデータベースにも適用するには、クラスターを再起動する必要があります。

1. クラスターを選択してから、**[Actions]** (アクション) の **[Reboot]** (再起動) を選択します。

クラスターが再起動されると、ステータスは [**利用可能**] に戻ります。

## セクション 3: ユーザーグループとクエリグループに基づいてクエリをキューにルーティング
<a name="tutorial-wlm-routing-queries-to-queues"></a>

クラスターを新しいパラメータグループに関連付けて WLM を設定しました。次に、いくつかのクエリを実行して Amazon Redshift がどのようにクエリをキューにルーティングして処理するかを確認します。

### ステップ 1: データベースのクエリキュー設定を表示する
<a name="tutorial-wlm-view-query-config"></a>

まず、データベースに WLM が正常に設定されていることを確認します。

#### クエリキュー設定を表示するには
<a name="how-to-wlm-view-query-config"></a>

1. RSQL を開き、次のクエリを実行します。クエリは「[ステップ 1: WLM\$1QUEUE\$1STATE\$1VW ビューを作成する](#tutorial-wlm-create-queue-state-view)」で作成した WLM\$1QUEUE\$1STATE\$1VW ビューを使用します。クラスターを再起動する前にセッションをデータベースに接続済みである場合は、再接続する必要があります。

   ```
   select * from wlm_queue_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      0 |         0 |        0
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         0 |        0
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         1 |        0
   ```

   この結果を、「[ステップ 1: WLM\$1QUEUE\$1STATE\$1VW ビューを作成する](#tutorial-wlm-create-queue-state-view)」で受け取った結果と比較します。キューが 2 つ追加されていることがわかります。キュー 1 は test クエリグループのキューになり、キュー 2 は admin ユーザーグループのキューになっています。

   キュー 3 はデフォルトキューになっています。リストの最後のキューは常にデフォルトキューです。これは、クエリでユーザーグループやクエリグループが指定されていない場合、デフォルトでクエリがルーティングされる先のキューです。

1. 次のクエリを実行して、クエリがキュー 3 で実行されることを確認します。

   ```
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    2144 |     3 |          1 | 2014-09-24 23:49:59 | Executing | 0          | 550430
   ```

### ステップ 2: クエリグループキューを使ってクエリを実行する
<a name="tutorial-wlm-query-group"></a>

#### クエリグループキューを使ってクエリを実行するには
<a name="how-to-wlm-query-group"></a>

1. 次のクエリを実行して、クエリを `test` クエリグループにルーティングします。

   ```
   set query_group to test;
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

1. 他の RSQL ウィンドウから、次のクエリを実行します。

   ```
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    2168 |     1 |          1 | 2014-09-24 23:54:18 | Executing | 0          | 6343309
    2170 |     3 |          1 | 2014-09-24 23:54:24 | Executing | 0          | 847
   ```

   クエリは、test クエリグループ (今はキュー 1) にルーティングされました。

1. キューの状態表示ですべてを選択します。

   ```
   select * from wlm_queue_state_vw;
   ```

   次のような結果が表示されます。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      0 |         1 |        0
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         0 |        0
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         1 |        0
   ```

1. 今度は、クエリグループをリセットして、実行時間が長いクエリを再び実行します。

   ```
   reset query_group;
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

1. ビューに対するクエリを実行して、結果を確認します。

   ```
   select * from wlm_queue_state_vw;
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      0 |         0 |        1
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         0 |        0
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         2 |        5
    
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    2186 |     3 |          1 | 2014-09-24 23:57:52 | Executing | 0          | 649
    2184 |     3 |          1 | 2014-09-24 23:57:48 | Executing | 0          | 4137349
   ```

   結果として、クエリが今は再びキュー 3 で実行されています。

### ステップ 3: データベースユーザーとグループを作成する
<a name="tutorial-wlm-create-db-user-and-group"></a>

このキューでクエリを実行する前に、データベースにユーザーグループを作成して、このユーザーグループにユーザーを追加する必要があります。次に、新しいユーザーの認証情報を使って RSQL にログインして、クエリを実行します。データベースユーザーを作成するには、管理ユーザーのようなスーパーユーザーとしてクエリを実行する必要があります。

#### 新しいデータベースユーザーとユーザーグループを作成するには
<a name="how-to-wlm-create-db-user-and-group"></a>

1. RSQL ウィンドウで次のコマンドを実行して、データベースに `adminwlm` という名前の新しいデータベースユーザーを作成します。

   ```
   create user adminwlm createuser password '123Admin';
   ```

1. 続いて、次のコマンドを実行して、新しいユーザーグループを作成し、新しい `adminwlm` ユーザーをそのユーザーグループに追加します。

   ```
   create group admin;
   alter group admin add user adminwlm;
   ```

### ステップ 4: ユーザーグループキューを使ってクエリを実行する
<a name="tutorial-wlm-user-group-query"></a>

次に、クエリを実行し、それをユーザーグループキューにルーティングします。これを行うのは、実行するクエリのタイプを処理するように設定されたキューにクエリをルーティングする場合です。

#### ユーザーグループキューを使ってクエリを実行するには
<a name="how-to-wlm-user-group-query"></a>

1. RSQL ウィンドウ 2 で、次のクエリを実行して、`adminwlm` アカウントに切り替え、そのユーザーとしてクエリを実行します。

   ```
   set session authorization 'adminwlm';
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

1. RSQL ウィンドウ 1 で、次のクエリを実行して、クエリがルーティングされるクエリキューを確認します。

   ```
   select * from wlm_query_state_vw;
   select * from wlm_queue_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      0 |         0 |        1
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         1 |        0
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         1 |        8
    
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    2202 |     2 |          1 | 2014-09-25 00:01:38 | Executing | 0          | 4885796
    2204 |     3 |          1 | 2014-09-25 00:01:43 | Executing | 0          | 650
   ```

   このクエリが実行されたキューはキュー 2 (`admin` ユーザーキュー) です。このユーザーとしてログインしてクエリを実行すると、別のクエリグループを指定しない限り、クエリは常にキュー 2 で実行されます。選択されるキューは、キューの割り当てルールによって異なります。詳細については、「[WLM キュー割り当てルール](cm-c-wlm-queue-assignment-rules.md)」を参照してください。

1. 次に、RSQL ウィンドウ 2.から次のクエリを実行します。

   ```
   set query_group to test;
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

1. RSQL ウィンドウ 1 で、次のクエリを実行して、クエリがルーティングされるクエリキューを確認します。

   ```
   select * from wlm_queue_state_vw;
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      0 |         1 |        1
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         0 |        1
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         1 |       10
    
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    2218 |     1 |          1 | 2014-09-25 00:04:30 | Executing | 0          | 4819666
    2220 |     3 |          1 | 2014-09-25 00:04:35 | Executing | 0          | 685
   ```

1. 処理が完了したら、クエリグループをリセットします。

   ```
   reset query_group;
   ```

## セクション 4: wlm\$1query\$1slot\$1count を使用してキューの同時実行レベルを一時的に変更
<a name="tutorial-wlm-query-slot-count"></a>

ときどき、特定のクエリのために一時的にリソースが余分に必要になることがあります。その場合は、wlm\$1query\$1slot\$1count 設定を使って、クエリキューでスロットが割り当てられる方法を一時的に変更することができます。*スロット*は、クエリを処理するために使用されるメモリと CPU の単位です。データベースで VACUUM 操作を実行する場合など、クラスターのリソースを大量に使用するクエリをたまに実行する場合に、スロット数を一時的に変更できます。

クエリのタイプによっては、ユーザーが wlm\$1query\$1slot\$1count を設定することが必要になる場合があります。そのような場合は、WLM 設定を調整し、クエリのニーズにより適したキューをユーザーに提供することを検討します。スロット数を使用して同時実行レベルを一時的に変更する方法の詳細については、「[wlm\$1query\$1slot\$1count](r_wlm_query_slot_count.md)」を参照してください。

### ステップ 1: wlm\$1query\$1slot\$1count を使用して同時実行レベルを一時的に変更する
<a name="tutorial-wlm-override-slot-count"></a>

このチュートリアルの目的に合わせて、実行時間が長い同じ SELECT クエリを実行します。そのクエリは `adminwlm` ユーザーとして実行し、wlm\$1query\$1slot\$1count を使ってクエリで使用可能なスロット数を増やします。

#### wlm\$1query\$1slot\$1count を使用して同時実行レベルを一時的に変更するには
<a name="how-to-wlm-override-slot-count"></a>

1. クエリの制限を増やして、WLM\$1QUERY\$1STATE\$1VW ビューをクエリして結果を確認する時間を十分に確保します。

   ```
   set wlm_query_slot_count to 3; 
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

1. ここで、管理者ユーザーを使用して WLM\$1QUERY\$1STATE\$1VW にクエリを実行し、クエリの動作を確認します。

   ```
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    2240 |     2 |          1 | 2014-09-25 00:08:45 | Executing | 0          | 3731414
    2242 |     3 |          1 | 2014-09-25 00:08:49 | Executing | 0          | 596
   ```

   クエリのスロット数が 3 であることがわかります。この数は、クエリが 3 つのスロットをすべて使ってクエリを処理していること、キューのリソースがすべてそのクエリに割り当てられていることを意味します。

1. 今度は、次のクエリを実行します。

   ```
   select * from WLM_QUEUE_STATE_VW;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      0 |         0 |        4
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         1 |        3
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         1 |       25
   ```

   wlm\$1query\$1slot\$1count 設定は、現在のセッションに対してのみ有効です。そのセッションが期限切れになった場合、または、別のユーザーがクエリを実行する場合は、WLM 設定が使用されます。

1. スロット数をリセットして、テストを再実行します。

   ```
   reset wlm_query_slot_count;
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      0 |         0 |        2
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         1 |        2
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         1 |       14
    
   query | queue | slot_count | start_time          | state     | queue_time | exec_time
   ------+-------+------------+---------------------+-----------+------------+-----------
    2260 |     2 |          1 | 2014-09-25 00:12:11 | Executing | 0          | 4042618
    2262 |     3 |          1 | 2014-09-25 00:12:15 | Executing | 0          | 680
   ```

### ステップ 2: 別のセッションからクエリを実行する
<a name="tutorial-wlm-run-queries-from-different-sessions"></a>

次に、別のセッションからクエリを実行します。

#### 別のセッションからクエリを実行するには
<a name="how-to-wlm-run-queries-from-different-sessions"></a>

1. RSQL ウィンドウ 1 および 2 で、次を実行して、テストクエリグループを使用します。

   ```
   set query_group to test;
   ```

1. RSQL ウィンドウ 1 で、実行時間が長い次のクエリを実行します。

   ```
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

1. RSQL ウィンドウ 1 で実行時間が長いクエリがまだ進行中の間に、以下を実行します。これらのコマンドは、キューのすべてのスロットを使用するようにスロット数を増やした後で、実行時間が長いクエリの実行を開始します。

   ```
   set wlm_query_slot_count to 2;
   select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
   ```

1. 3 つ目の RSQL ウィンドウを開いて、ビューをクエリし、結果を確認します。

   ```
   select * from wlm_queue_state_vw;
   select * from wlm_query_state_vw;
   ```

   結果の例は次のとおりです。

   ```
   query | description                               | slots | mem | max_time | user_* | query_* | queued | executing | executed
   ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+----------
       0 | (super user) and (query group: superuser) |     1 | 357 |        0 |  false | false   |      0 |         0 |        0
       1 | (query group: test)                       |     2 | 627 |        0 |  false | false   |      1 |         1 |        2
       2 | (suser group: admin)                      |     3 | 557 |        0 |  false | false   |      0 |         0 |        3
       3 | (querytype:any)                           |     5 | 250 |        0 |  false | false   |      0 |         1 |       18
    
   query | queue | slot_count | start_time          | state         | queue_time | exec_time
   ------+-------+------------+---------------------+---------------+------------+-----------
    2286 |     1 |          2 | 2014-09-25 00:16:48 | QueuedWaiting | 3758950    | 0
    2282 |     1 |          1 | 2014-09-25 00:16:33 | Executing     | 0          | 19335850
    2288 |     3 |          1 | 2014-09-25 00:16:52 | Executing     | 0          | 666
   ```

   最初のクエリではキュー 1 に割り当てられたスロットの 1 つを使用してクエリを実行していることに注意してください。さらに、キュー内で待機しているキューが 1 つあることにも注意してください (`queued` が `1`、`state` が `QueuedWaiting`)。最初のクエリが完了すると、2 つ目のクエリの実行が開始されます。このように実行されるのは、両方のクエリが `test` クエリグループにルーティングされていて、2 つ目のクエリは十分なスロット数が使用可能になるまで処理の開始を待機する必要があるためです。

## セクション 5: リソースのクリーンアップ
<a name="tutorial-wlm-cleaning-up-resources"></a>

クラスターが実行されている限り料金が発生し続けます。このチュートリアルを完了したら、*Amazon Redshift 入門ガイド*の「[ステップ 8: 環境をリセットする](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-clean-up-tasks.html)」のステップに従って、環境を以前の状態に戻します。

WLM の詳細については、「[ワークロード管理](cm-c-implementing-workload-management.md)」を参照してください。