メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

セクション 4: wlm_query_slot_count を使用してキューの同時実行レベルを一時的に変更

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

特定のタイプのクエリで wlm_query_slot_count を設定する必要が何度も生じる場合は、WLM 設定を調整して、クエリのニーズに適したキューを用意することを検討してください。スロット数を使用して同時実行レベルを一時的に変更する方法の詳細については、「wlm_query_slot_count」を参照してください。

ステップ 1: wlm_query_slot_count を使用して同時実行レベルを一時的に変更する

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

wlm_query_slot_count を使用して同時実行レベルを一時的に変更するには

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

    Copy
    set wlm_query_slot_count to 3; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
  2. ここで、masteruser アカウントを使って WLM_QUERY_STATE_VW をクエリして、クエリがどのように実行されているか確認します。

    Copy
    select * from wlm_query_state_vw;

    以下に、結果の例を示します。

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

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

    Copy
    select * from WLM_QUEUE_STATE_VW;

    以下に、結果の例を示します。

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

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

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

    以下に、結果の例を示します。

ステップ 2: 別のセッションからクエリを実行する

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

別のセッションからクエリを実行するには

  1. psql ウィンドウ 1 および 2 で、次のコマンドを実行して、test クエリグループを使用するように設定します。

    Copy
    set query_group to test;
  2. psql ウィンドウ 1 で、実行時間が長い次のクエリを実行します。

    Copy
    select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
  3. 実行時間が長いクエリが psql ウィンドウ 1 でまだ実行中の間に、次のコマンドを実行して、キューのスロットをすべて使用するようにスロット数を増やし、実行時間が長いクエリの実行を開始します。

    Copy
    set wlm_query_slot_count to 2; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
  4. 3 つ目の psql ウィンドウを開いて、ビューをクエリし、結果を確認します。

    Copy
    select * from wlm_queue_state_vw; select * from wlm_query_state_vw;

    以下に、結果の例を示します。

    最初のクエリが、キュー 1 に割り当てられたスロットの 1 つを使ってクエリを実行しており、キューで待機中のクエリが 1 つあることがわかります (ここで、queued1stateQueuedWaiting です)。最初のクエリが完了すると、2 つ目のクエリの実行が開始されます。このように実行されるのは、両方のクエリが test クエリグループにルーティングされていて、2 つ目のクエリは十分なスロット数が確保されるまで処理の開始を待機する必要があるためです。