セクション 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 を使用して同時実行レベルを一時的に変更するには
-
クエリの制限を増やして、WLM_QUERY_STATE_VW ビューをクエリして結果を確認する時間を十分に確保します。
set wlm_query_slot_count to 3; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
ここで、管理者ユーザーを使用して WLM_QUERY_STATE_VW にクエリを実行し、クエリの動作を確認します。
select * from wlm_query_state_vw;
結果の例は次のとおりです。
クエリのスロット数が 3 であることがわかります。この数は、クエリが 3 つのスロットをすべて使ってクエリを処理していること、キューのリソースがすべてそのクエリに割り当てられていることを意味します。
-
今度は、次のクエリを実行します。
select * from WLM_QUEUE_STATE_VW;
結果の例は次のとおりです。
wlm_query_slot_count 設定は、現在のセッションに対してのみ有効です。そのセッションが期限切れになった場合、または、別のユーザーがクエリを実行する場合は、WLM 設定が使用されます。
-
スロット数をリセットして、テストを再実行します。
reset wlm_query_slot_count; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
結果の例は次のとおりです。
ステップ 2: 別のセッションからクエリを実行する
次に、別のセッションからクエリを実行します。
別のセッションからクエリを実行するには
-
RSQL ウィンドウ 1 および 2 で、次を実行して、テストクエリグループを使用します。
set query_group to test;
-
RSQL ウィンドウ 1 で、実行時間が長い次のクエリを実行します。
select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
RSQL ウィンドウ 1 で実行時間が長いクエリがまだ進行中の間に、以下を実行します。これらのコマンドは、キューのすべてのスロットを使用するようにスロット数を増やした後で、実行時間が長いクエリの実行を開始します。
set wlm_query_slot_count to 2; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
3 つ目の RSQL ウィンドウを開いて、ビューをクエリし、結果を確認します。
select * from wlm_queue_state_vw; select * from wlm_query_state_vw;
結果の例は次のとおりです。
最初のクエリではキュー 1 に割り当てられたスロットの 1 つを使用してクエリを実行していることに注意してください。さらに、キュー内で待機しているキューが 1 つあることにも注意してください (
queued
が1
、state
がQueuedWaiting
)。最初のクエリが完了すると、2 つ目のクエリの実行が開始されます。このように実行されるのは、両方のクエリがtest
クエリグループにルーティングされていて、2 つ目のクエリは十分なスロット数が使用可能になるまで処理の開始を待機する必要があるためです。