クエリ高速化の試行¶
このトピックでは、ウェアハウスの所有者または管理者がQuery Acceleration Serviceを使用して、ウェアハウスで実行されているクエリのパフォーマンスを向上させる方法の概要を説明します。クエリ高速化の詳細については、 Query Acceleration Serviceの使用 をご参照ください。
Query Acceleration Serviceは、クエリ処理の一部を サーバーレスコンピューティングリソース にオフロードします。これにより、ウェアハウスのコンピューティングリソースに対する需要を減らしながら、クエリの処理を高速化します。
ウェアハウスに外れ値のクエリ(つまり、通常のクエリよりも多くのリソースを使用するクエリ)がある場合は、外れ値のクエリの余分なコンピューティング需要がサーバーレスコンピューティングリソースにオフロードされるため、Query Acceleration Serviceによってウェアハウスの他のクエリのパフォーマンスも向上する可能性があります。
Query Acceleration Serviceのメリットを受ける可能性のあるワークロードの例には、アドホック分析、クエリごとのデータ量が予測できないワークロード、大規模なスキャンと選択的フィルターを使用するクエリなどがあります。
注釈
このトピックで提供されている診断クエリを実行するには、 共有 SNOWFLAKE データベースへのアクセス が必要です。デフォルトでは、 ACCOUNTADMIN ロールのみがクエリを実行するために必要な権限を持っています。
クエリ高速化の候補の検出¶
関数またはクエリを使用して、Query Acceleration Serviceを有効にすることによりクエリまたは一連のクエリのパフォーマンスが向上するかどうかを判断できます。
関数: 特定のクエリにメリットがあるかどうかを判断する
SYSTEM$ESTIMATE_QUERY_ACCELERATION 関数を使用すると、特定のクエリがQuery Acceleration Serviceに適しているかどうかを確認できます。
この関数は、唯一の引数としてクエリIDを受け入れます。関数を PARSE_JSON 関数でラップすると、結果の解釈が容易になります。例:
select parse_json(system$estimate_query_acceleration('8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f'));
クエリがQuery Acceleration Serviceの候補であり、まだ高速化されていない場合、応答の status
は eligible
です。 ineligible
のステータスは、ウェアハウスのQuery Acceleration Serviceを有効にしても、クエリにメリットがないことを示します。
特定のクエリに対するQuery Acceleration Serviceの評価に関する追加情報(さまざまなスケールファクターでの推定実行時間など)については、 リファレンスドキュメント をご参照ください。
クエリ: ウェアハウス全体での最適なクエリ候補
このクエリは、高速化の対象となるクエリ実行時間の量によって、Query Acceleration Serviceから最もメリットを受ける可能性のあるクエリを識別します。
SELECT query_id, eligible_query_acceleration_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
ORDER BY eligible_query_acceleration_time DESC;
クエリ: 実行時間別の最適なウェアハウス候補
このクエリは、Query Acceleration Serviceから最もメリットを受ける可能性のあるウェアハウスを識別します。ウェアハウスごとに、高速化の対象となるクエリ実行の合計時間を計算します。
SELECT warehouse_name, SUM(eligible_query_acceleration_time) AS total_eligible_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
GROUP BY warehouse_name
ORDER BY total_eligible_time DESC;
クエリ: クエリ数別の最適なウェアハウス候補
このクエリは、Query Acceleration Serviceの対象となるクエリが最も多い、特定の期間のウェアハウスを識別します。
SELECT warehouse_name, COUNT(query_id) AS num_eligible_queries
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE start_time > 'Mon, 29 May 2023 00:00:00'::timestamp
AND end_time < 'Tue, 30 May 2023 00:00:00'::timestamp
GROUP BY warehouse_name
ORDER BY num_eligible_queries DESC;
コストの考慮事項¶
高速化のためにウェアハウスによってリースされたサーバーレスコンピューティングリソースは、ウェアハウスによって消費されるクレジットとは別にクレジットを消費し、別途請求されます。
Query Acceleration Serviceはウェアハウス全体で有効になりますが、ウェアハウスのアップサイズとは異なり、コンピューティング能力の向上によるメリットを受けるクエリにのみ使用されます。これは、追加のコンピューティングリソースを必要としないクエリでは、より大きなウェアハウスを使用する追加コストが発生しないため、混合ワークロードを実行するウェアハウスにとって費用対効果が高くなる可能性があります。
ウェアハウスの スケールファクター を使用して、Query Acceleration Serviceのコストを制御できます。このスケールファクターは、ウェアハウスのクレジット消費の乗数であり、ウェアハウスで使用できるサーバーレスコンピューティングの量に制限を設定します。たとえば、ウェアハウスのスケールファクターが5の場合、サーバーレスコンピューティングリソースのクレジット消費率は、ウェアハウス消費率の5倍を超えることはできません。
SYSTEM$ESTIMATE_QUERY_ACCELERATION 関数を使用して、スケールファクターがクエリのパフォーマンスにどのように影響するかを測定できます。
コストを考慮せずにパフォーマンスを最大化するには、スケールファクターを0に設定します。
Query Acceleration Serviceを有効にする方法¶
パフォーマンスを最大化してQuery Acceleration Serviceを有効にするには、次のように ALTER WAREHOUSE コマンドを使用します。
ALTER WAREHOUSE my_wh SET
ENABLE_QUERY_ACCELERATION = true
QUERY_ACCELERATION_MAX_SCALE_FACTOR = 0;