ショートクエリアクセラレーションを使用する - Amazon Redshift

ショートクエリアクセラレーションを使用する

ショートクエリアクセラレーション (SQA) は、実行時間が短い一部のクエリを、実行時間が長いクエリよりも優先します。SQA では実行時間が短いクエリを専用領域で実行します。このため SQA クエリは、実行時間が長いクエリをキューで待機するよう強制されません。SQA は、実行時間が短く、ユーザー定義のキュー内にあるクエリのみを優先します。SQA によって実行時間が短いクエリの実行開始が早くなり、ユーザーへの結果表示も早くなります。

SQA を有効にすると、短いクエリの実行に割り当てられるワークロード管理 (WLM) キューを減らすことができます。さらに、キュー内のスロットに対する実行時間が長いクエリとショートクエリの競合が不要になるため、WLM キューが使用するクエリスロットの数を少なく設定できます。同時実行数が減るとクエリのスループットが向上し、大部分のワークロードに関するシステム全体のパフォーマンスも向上します。

CREATE TABLE AS (CTAS) ステートメントと読み取り専用クエリ (SELECT ステートメントなど) は SQA の対象です。

Amazon Redshift は、機械学習アルゴリズムを使用して対象のクエリを 1 つひとつ分析し、クエリの実行時間を予測します。デフォルトでは、WLM は、クラスターのワークロードの分析に基づいて、SQA 最大実行時間の値を動的に割り当てます。または、固定値 (1~20 秒) を指定します。クエリの予測実行時間が、定義済みまたは動的に割り当てられた SQA の最大ランタイムよりも短く、クエリが WLM キューで待機している場合、SQA はクエリを WLM キューから分離し、優先的に実行するようにスケジュールします。クエリの実行時間が SQA の最大実行時間より長い場合、WLM は、WLM キュー割り当てルールに基づき、最初の一致する WLM キューにクエリを移動します。クエリのパターンを SQA が学習するため、時間が経つほど予測精度は向上します。

SQA は、デフォルトのパラメータグループおよびすべての新しいパラメータグループに対してデフォルトで有効になっています。Amazon Redshift コンソールで SQA を無効にするには、パラメータグループの WLM 設定を編集し、[Enable short query acceleration (ショートクエリアクセラレーションの有効化)] を選択解除します。ベストプラクティスとして、システムパフォーマンス全体を最適な状態に維持するためには、WLM クエリのスロット数を 15 以下にすることをお勧めします。WLM 設定の変更については、「Amazon Redshift 管理ガイド」の「ワークロード管理の設定」を参照してください。

ショートクエリの最大実行時間

SQA を有効にすると、WLM は、ショートクエリの最大実行時間をデフォルトで動的に設定します。SQA の最大実行時間の動的設定を保持することをお勧めします。デフォルト設定を上書きするには、固定値 (1~20 秒) を指定します。

場合によっては、SQA の最大実行時間値に別の値を使用して、システムのパフォーマンスを向上させることを検討する場合があります。そのような場合は、ワークロードを分析して、実行時間の短いクエリの最大実行時間を見極めます。以下のクエリは、クエリの最大実行時間を約 70 パーセンタイル値で返します。

select least(greatest(percentile_cont(0.7) within group (order by total_exec_time / 1000000) + 2, 2), 20) from stl_wlm_query where userid >= 100 and final_state = 'Completed';

ワークロードにとって有効な最大実行時間の値を特定したら、ワークロードに大幅な変更が発生しない限りは、その値を変更する必要はありません。

SQA のモニタリング

SQA が有効になっているかどうか確認するには、以下のクエリを実行します。クエリが 1 行を返した場合、SQA は有効です。

select * from stv_wlm_service_class_config where service_class = 14;

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

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;

SQA によって選択され正常に完了したクエリを特定するには、以下のクエリを実行します。

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 = 14 and a.final_state = 'Completed' order by b.query desc limit 5;

SQA で選択されたがタイムアウトしたクエリを特定するには、以下のクエリを実行します。

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 = 14 and a.final_state = 'Evicted' order by b.query desc limit 5;

削除されたクエリ、およびより一般的にはクエリに対して実行できるルールベースのアクションの詳細については、WLM クエリモニタリングルール を参照してください。