Query Acceleration Serviceの使用(QAS)¶
Query Acceleration Service(QAS)は、ウェアハウス内のクエリワークロードの一部を高速化できます。ウェアハウスに対して有効にすると、通常のクエリよりも多くのリソースを使用するクエリである外れ値クエリの影響を減らすことで、ウェアハウス全体のパフォーマンスを向上させることができます。Query Acceleration Serviceは、クエリ処理作業の一部をサービスによって提供される共有コンピューティングリソースにオフロードして、これを実現します。
Query Acceleration Serviceのメリットを受ける可能性があるワークロードのタイプの例は次のとおりです。
アドホック分析。
クエリごとのデータ量が予測できないワークロード。
大規模なスキャンと選択フィルターを使用したクエリ。
Query Acceleration Serviceは、より多くの作業を並行して実行し、スキャンとフィルタリングに費やされるウォールクロック時間を短縮することで、これらのタイプのワークロードをより効率的に処理できます。
注釈
Query Acceleration Serviceは、サーバーの可用性によって異なります。したがって、パフォーマンスの向上は時間の経過とともに変動する可能性があります。
QAS が加速させる SQL コマンド¶
Query Acceleration Serviceは、次の SQL コマンドをサポートしています。
SELECT
INSERT
CREATE TABLE AS SELECT (CTAS)
COPY INTO <テーブル>
サポートされている SQL コマンドの中で、 QAS は、そのコマンドが高速化の対象である場合、クエリ全体、またはクエリ内のサブクエリや句を高速化する可能性があります。
Query Accelerationの有効化¶
クエリ・アクセラレーション・サービスを有効にするには、 CREATE WAREHOUSE または ALTER WAREHOUSE コマンドで ENABLE_QUERY_ACCELERATION = TRUE 句を指定します。
例¶
次の例では、 my_wh という名前の新しいウェアハウスと、 QAS をオフにして最初に作成された my_other_wh という名前のウェアハウスに対して、クエリ・アクセラレーション・サービスを有効にしています:
CREATE WAREHOUSE my_wh WITH ENABLE_QUERY_ACCELERATION = true;
CREATE WAREHOUSE my_other_wh;
ALTER WAREHOUSE my_other_wh SET ENABLE_QUERY_ACCELERATION = true;
SHOW WAREHOUSES コマンドを実行して、 my_wh ウェアハウスに関する詳細を表示します。次のクエリは パイプ演算子 </sql-reference/operators-flow>`(:code:->>`)を使用して、 SHOW に関連する出力から QAS 処理の列に関する情報のみを返します。
SHOW WAREHOUSES LIKE 'my_wh'
->> SELECT "name",
"enable_query_acceleration",
"query_acceleration_max_scale_factor"
FROM $1;
+-------+---------------------------+-------------------------------------+
| name | enable_query_acceleration | query_acceleration_max_scale_factor |
|-------+---------------------------+-------------------------------------|
| MY_WH | true | 8 |
+-------+---------------------------+-------------------------------------+
Query Acceleration Serviceは、ウェアハウスのクレジット消費率を高める可能性があります。最大スケールファクターは、消費率を制限するのに役立ちます。スケールファクターの調整 プロパティの指定方法については QUERY_ACCELERATION_MAX_SCALE_FACTOR をご参照ください。CREATE WAREHOUSE および ALTER WAREHOUSE コマンドを使用してこれを行います。
QUERY_ACCELERATION_ELIGIBLE ビューと SYSTEM$ESTIMATE_QUERY_ACCELERATION 関数は、ウェアハウスの適切なスケールファクターを決定するのに役立つ場合があります。詳細については、 Query Accelerationのメリットを受ける可能性のあるクエリとウェアハウスの識別 (このトピック内)をご参照ください。
Query Accelerationのメリットを受ける可能性のあるクエリとウェアハウスの識別¶
Query Acceleration Serviceのメリットを受ける可能性のあるクエリまたはウェアハウスを識別するには、QUERY_ACCELERATION_ELIGIBLE</sql-reference/account-usage/query_acceleration_eligible>`ビューをクエリします。また、 :doc:/sql-reference/functions/system_estimate_query_acceleration` 関数を使用して、特定のクエリが高速化の対象かどうかを評価することもできます。
適格なクエリ¶
一般的に、クエリは、QASの計算リソースを使用して並列実行できるクエリプランの一部を持っているため、対象となります。これらのクエリは、2つのパターンのいずれかに分類されます。
集約または選択フィルターによる大規模スキャン。
多くの新しい行を挿入またはコピーする大容量スキャン(例えば、 INSERT および COPY コマンド)。
Snowflake doesn't have a specific cutoff for what constitutes a "large enough" scan to be eligible. The threshold for eligibility depends on a variety of factors, including the query plan and warehouse size. Snowflake only marks a query as eligible if there is high confidence that the query would be accelerated if QAS was enabled. Over time, Snowflake is expanding the query patterns that are eligible for acceleration. For example, formerly QAS didn't accelerate queries with a LIMIT clause and no ORDER BY clause, but now Snowflake automatically determines whether such queries can benefit from QAS.
クエリが不適格となる一般的な理由¶
一部のクエリは、クエリアクセラレーションの対象外です。クエリを高速化できない一般的な理由は次のとおりです。
There aren't enough partitions in the scan. If there aren't enough partitions to scan, the benefits of query acceleration are offset by the latency in acquiring resources for the query acceleration service.
クエリにフィルターがあっても、フィルターが十分に選択的でない場合があります。あるいは、クエリにGROUPBYの集約がある場合、GROUPBY表現のカーディナリティが高すぎて適格でない可能性があります。
The query includes a LIMIT clause that prevents acceleration. QAS automatically determines which queries with LIMIT clauses (including those without ORDER BY) can be accelerated.
SYSTEM$ESTIMATE_QUERY_ACCELERATION関数を使用したクエリの識別¶
SYSTEM$ESTIMATE_QUERY_ACCELERATION 関数は、以前に実行されたクエリが、Query Acceleration Serviceのメリットを受ける可能性があるかどうかを判断するのに役立ちます。クエリがクエリアクセラレーションの対象である場合、関数はさまざまなクエリのアクセラレーション スケールファクター の推定クエリ実行時間を返します。
例¶
次のステートメントを実行して、クエリアクセラレーションが特定のクエリに役立つかどうかを判断します。
SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f'));
この例では、クエリはQuery Acceleration Serviceの対象となります。結果値には、サービスを使用した推定クエリ時間が含まれます。``ineligibleReason``プロパティは空です。
{
"estimatedQueryTimes": {
"1": 171,
"10": 115,
"2": 152,
"4": 133,
"8": 120
},
"ineligibleReason": null,
"originalQueryTime": 300.291,
"queryUUID": "8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f",
"status": "eligible",
"upperLimitScaleFactor": 10
}
次の例は、Query Acceleration Serviceの対象とならないクエリの結果を示しています。
SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('cf23522b-3b91-cf14-9fe0-988a292a4bfa'));
上記のステートメントは、次の出力を生成します。推定クエリ時間は空白です。``ineligibleReason``プロパティレポートでは、クエリがQASを使用しなかった理由をレポートします。
{
"estimatedQueryTimes": {},
"ineligibleReason": "NO_LARGE_ENOUGH_SCAN",
"originalQueryTime": 20.291,
"queryUUID": "cf23522b-3b91-cf14-9fe0-988a292a4bfa",
"status": "ineligible",
"upperLimitScaleFactor": 0
}
QUERY_ACCELERATION_ELIGIBLEビューを使用したクエリとウェアハウスの識別¶
:doc:`QUERY_ACCELERATION_ELIGIBLE</sql-reference/account-usage/query_acceleration_eligible>`をクエリして、Query Acceleration Serviceから最もメリットを受ける可能性のあるクエリとウェアハウスを識別します。ビューには、クエリごとに、Query Acceleration Serviceの対象となるクエリ実行時間が含まれます。
例¶
注釈
これらの例では、 ACCOUNTADMIN ロール(または共有 SNOWFLAKE データベースで IMPORTED PRIVILEGES が付与されたロール)が使用されていることを想定しています。使用されていない場合は、例にあるクエリを実行する前に次のコマンドを実行します。
USE ROLE ACCOUNTADMIN;
アクセラレーションの対象となるクエリ実行時間のうち、過去1週間で最も長いクエリによって、このサービスの恩恵を受ける可能性のあるクエリを特定します。
SELECT query_id, eligible_query_acceleration_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
ORDER BY eligible_query_acceleration_time DESC;
過去1週間で、特定のウェアハウス mywh でサービスの恩恵を最も受けそうなクエリを特定します。
SELECT query_id, eligible_query_acceleration_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE warehouse_name = 'MYWH'
AND start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
ORDER BY eligible_query_acceleration_time DESC;
Query Acceleration Serviceの対象となる、過去1週間に最もクエリの多かったウェアハウスを特定します。
SELECT warehouse_name, COUNT(query_id) AS num_eligible_queries
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
GROUP BY warehouse_name
ORDER BY num_eligible_queries DESC;
過去1週間でQuery Acceleration Serviceの対象となる時間が最も長いウェアハウスを特定します。
SELECT warehouse_name, SUM(eligible_query_acceleration_time) AS total_eligible_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
GROUP BY warehouse_name
ORDER BY total_eligible_time DESC;
ウェアハウス mywh 向けQuery Acceleration Serviceの過去1週間の上限 スケールファクター を特定します。
SELECT MAX(upper_limit_scale_factor)
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE warehouse_name = 'MYWH'
AND start_time > DATEADD('day', -7, CURRENT_TIMESTAMP());
ウェアハウス mywh のQuery Acceleration Serviceの過去1週間のスケールファクターの分布を特定します。
SELECT upper_limit_scale_factor, COUNT(upper_limit_scale_factor)
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE warehouse_name = 'MYWH'
AND start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
GROUP BY 1 ORDER BY 1;
スケールファクターの調整¶
スケールファクターは、ウェアハウスがクエリアクセラレーションのためにリースするコンピューティングリソースの量に上限を設定できる コスト管理 メカニズムです。この値は、ウェアハウスサイズとコストに基づく乗数として使用されます。
たとえば、Mサイズのウェアハウスのスケールファクターを5に設定するとします。これは、
ウェアハウスは、Mサイズのウェアハウスの5倍までコンピューティングリソースをリースできます。
Mサイズのウェアハウスのコストは 1時間あたり4クレジット であるため、これらのリソースをリースすると、1時間あたり最大20クレジット(ウェアハウスあたり4クレジットx5倍のサイズ)のコストがかかる可能性があります。
Tip
スケールファクターは、単一クラスタウェアハウスであろうと複数クラスターウェアハウスであろうと、ウェアハウス全体に適用されます。マルチクラスタウェアハウスに QAS を使用する場合は、スケールファクターを上げることを検討してください。そうすることで、すべてのウェアハウスクラスターが QAS の最適化を利用することができます。
Query Acceleration Serviceを同時に使用するクエリの数に関係なく、コストは同じです。Query Acceleration Serviceは、サービスが使用されている場合にのみ、秒単位で課金されます。これらのクレジットは、ウェアハウスの使用とは別に請求されます。
すべてのクエリが、スケールファクターによって利用可能になるリソースのフルセットを必要とするわけではありません。サービスのためにリクエストされるリソースの量は、アクセラレーションの対象となるクエリの量と、それに応答するために処理されるデータの量によって異なります。スケールファクターの値またはリクエストされたリソースの量に関係なく、クエリアクセラレーションに使用できるコンピューティングリソースの量は、サービスで使用可能なリソースと、他の同時リクエストの数によって制限されます。Query Acceleration Serviceは、必要な数のリソースをクエリの実行時に使用可能な量のみ使用します。
スケールファクターが明示的に設定されていない場合、デフォルト値は 8 です。スケールファクターを 0 に設定すると、上限がなくなり、クエリが必要な数のリソースをリースし、クエリの処理に使用できるようになります。
例¶
次の例では、 my_wh という名前のウェアハウスを変更して、最大スケールファクターを0にしたQuery Acceleration Serviceを有効にします。
ALTER WAREHOUSE my_wh SET ENABLE_QUERY_ACCELERATION = true QUERY_ACCELERATION_MAX_SCALE_FACTOR = 0;
Query Acceleration Serviceの使用状況に対するモニター¶
このセクションでは、Query Acceleration Serviceの使用状況をモニターする方法について説明します。モニターすることで、パフォーマンスへの影響を理解し、アクセラレーションの恩恵を最も受けるクエリを特定し、機能の全体的な有効性を評価できます。そうすることで、コストを管理し、ワークロードを最適化することができます。
ウェブインターフェイスを使用した、Query Accelerationの使用状況に対するモニター¶
Query Acceleration Serviceを有効にすると、 クエリプロファイルタブ の Profile Overview パネルを表示して、クエリアクセラレーション結果の効果を確認できます。
次のスクリーンショットは、クエリ全体に対して表示される統計の例を示しています。クエリ内の複数の操作が高速化された場合、結果はこのビューに集約されるため、Query Acceleration Serviceによって実行された作業の合計量を確認できます。
Profile Overview パネルの Query Acceleration セクションには、次の統計が含まれています。
サービスによってスキャンされたパーティション --- スキャンするためにQuery Acceleration Serviceにオフロードされたファイルの数。
アクセラレーション用に選択されたスキャン --- 高速化されているテーブルスキャンの数。
演算子の詳細(統計 を参照)で、演算子をクリックして詳細情報を表示します。次のスクリーンショットは、 TableScan 操作で表示される統計の例を示しています。
TableScan 詳細パネルの Query Acceleration セクションには、次の統計が含まれています。
サービスによってスキャンされたパーティション --- スキャンするためにQuery Acceleration Serviceにオフロードされたファイルの数。
Account Usage QUERY_HISTORYビューを使用したクエリアクセラレーション使用状況のモニター¶
クエリに対するクエリアクセラレーションの影響を確認するには、 QUERY_HISTORY ビュー で次の列を使用できます。
QUERY_ACCELERATION_BYTES_SCANNED
QUERY_ACCELERATION_PARTITIONS_SCANNED
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR
これらの列を使用して、Query Acceleration Serviceのメリットを受けたクエリを識別できます。クエリごとに、Query Acceleration Serviceによってスキャンされたパーティションとバイトの総数を確認することもできます。
これらの各列の説明については、 QUERY_HISTORY ビュー をご参照ください。
注釈
特定のクエリについて、 QUERY_ACCELERATION_BYTES_SCANNED 列と BYTES_SCANNED 列の合計は、Query Acceleration Serviceを使用しない場合よりもサービスを使用した場合の方が大きくなる可能性があります。列 QUERY_ACCELERATION_PARTITIONS_SCANNED と PARTITIONS_SCANNED の合計にも同じことが当てはまります。
バイト数とパーティション数の増加は、クエリアクセラレーションを促進するためにサービスによって生成される中間結果によるものです。
たとえば、過去24時間にQuery Acceleration Serviceによってスキャンされたバイト数が最も多いクエリを検索するには、次を実行します。
SELECT query_id,
query_text,
warehouse_name,
start_time,
end_time,
query_acceleration_bytes_scanned,
query_acceleration_partitions_scanned,
query_acceleration_upper_limit_scale_factor
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE query_acceleration_partitions_scanned > 0
AND start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP())
ORDER BY query_acceleration_bytes_scanned DESC;
過去24時間にQuery Acceleration Serviceによってスキャンされたパーティションの数が最も多いクエリを検索するには、次を実行します。
SELECT query_id,
query_text,
warehouse_name,
start_time,
end_time,
query_acceleration_bytes_scanned,
query_acceleration_partitions_scanned,
query_acceleration_upper_limit_scale_factor
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE query_acceleration_partitions_scanned > 0
AND start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP())
ORDER BY query_acceleration_partitions_scanned DESC;
Query Acceleration Serviceのコスト¶
Query Accelerationは、 サーバーレスコンピューティングリソース を使用して対象となるクエリの一部を実行するため、クレジットを消費します。
Query Accelerationは、使用されたコンピューティングリソースに対して秒単位で支払うという点で、Snowflakeの他のサーバーレス機能と同様に課金されます。Query Acceleration Serviceにより消費されたコンピューティング時間あたりのクレジット量を知る方法については、 Snowflakeサービス利用テーブル の「サーバーレス機能クレジットテーブル」をご参照ください。
従来のコンソール内における請求情報の表示¶
アカウントでQuery Acceleration Serviceを有効にしている場合、 Classic Console の請求ページには QUERY_ACCELERATION というウェアハウスが含まれ、アカウント内のすべてのウェアハウスでサービスによって使用されるすべてのクレジットが表示されます。
以下のスクリーンショットは、 QUERY_ACCELERATION ウェアハウスに表示される請求情報の例を示しています。
Account Usage QUERY_ACCELERATION_HISTORYビューを使用した請求データの表示¶
Account Usage QUERY_ACCELERATION_HISTORY ビュー で請求データを表示できます。
例¶
このクエリは、アカウント内の各ウェアハウスが、Query Acceleration Serviceに使用するクレジットの合計数を返します(月度累計)。
SELECT warehouse_name,
SUM(credits_used) AS total_credits_used
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE start_time >= DATE_TRUNC(month, CURRENT_DATE)
GROUP BY 1
ORDER BY 2 DESC;
組織の使用状況 QUERY_ACCELERATION_HISTORYビューを使用した請求の表示¶
組織の使用状況 QUERY_ACCELERATION_HISTORY ビュー で、組織内にあるすべてのQuery Acceleration Serviceの請求データを表示できます。
例¶
このクエリは、各アカウント内の各ウェアハウスが、Query Acceleration Serviceに使用するクレジットの合計数を返します(月初来)。
SELECT account_name,
warehouse_name,
SUM(credits_used) AS total_credits_used
FROM SNOWFLAKE.ORGANIZATION_USAGE.QUERY_ACCELERATION_HISTORY
WHERE usage_date >= DATE_TRUNC(month, CURRENT_DATE)
GROUP BY 1, 2
ORDER BY 3 DESC;
QUERY_ACCELERATION_HISTORY関数を使用した請求の表示¶
Information Schema QUERY_ACCELERATION_HISTORY 関数を使用して請求データを表示することもできます。
例¶
次の例では、 QUERY_ACCELERATION_HISTORY 関数を使用して、過去12時間以内にこのサービスによって高速化されたクエリに関する情報を返します。
SELECT start_time, end_time, credits_used, warehouse_name, num_files_scanned, num_bytes_scanned FROM TABLE(INFORMATION_SCHEMA.QUERY_ACCELERATION_HISTORY( date_range_start=>DATEADD(H, -12, CURRENT_TIMESTAMP)));
コストとパフォーマンスの評価¶
このセクションでは、Query Acceleration Serviceを有効にする前後の、クエリのパフォーマンスとコストを評価するのに役立つサンプルクエリを示します。
ウェアハウスとQuery Acceleration Serviceのコストの表示¶
次のクエリは、特定のウェアハウスに対する、ウェアハウスとQuery Acceleration Serviceのコストを計算します。ウェアハウスのQuery Acceleration Serviceを有効にした後にこのクエリを実行すると、クエリアクセラレーションを有効にする前と後のコストを比較できます。クエリの日付範囲は、Query Acceleration Serviceの最初のクレジット使用の8週間前から、Query Acceleration Serviceの最後に発生したコストの8週間後(または現在の日付)までです。
注釈
このクエリは、Query Acceleration Serviceを有効にする前後で、ウェアハウスのプロパティとワークロードが同じである場合に、サービスのコストを評価するのに最も役立ちます。
このクエリは、ウェアハウス内で高速化されたクエリに対するクレジットの使用があった場合にのみ結果を返します。
この例のクエリは、 my_warehouse のウェアハウスとQuery Acceleration Serviceのコストを返します。
WITH credits AS (
SELECT 'QC' AS credit_type,
TO_DATE(end_time) AS credit_date,
SUM(credits_used) AS num_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE warehouse_name = 'my_warehouse'
AND credit_date BETWEEN
DATEADD(WEEK, -8, (
SELECT TO_DATE(MIN(end_time))
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE warehouse_name = 'my_warehouse'
))
AND
DATEADD(WEEK, +8, (
SELECT TO_DATE(MAX(end_time))
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE warehouse_name = 'my_warehouse'
))
GROUP BY credit_date
UNION ALL
SELECT 'WC' AS credit_type,
TO_DATE(end_time) AS credit_date,
SUM(credits_used) AS num_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
WHERE warehouse_name = 'my_warehouse'
AND credit_date BETWEEN
DATEADD(WEEK, -8, (
SELECT TO_DATE(MIN(end_time))
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE warehouse_name = 'my_warehouse'
))
AND
DATEADD(WEEK, +8, (
SELECT TO_DATE(MAX(end_time))
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE warehouse_name = 'my_warehouse'
))
GROUP BY credit_date
)
SELECT credit_date,
SUM(IFF(credit_type = 'QC', num_credits, 0)) AS qas_credits,
SUM(IFF(credit_type = 'WC', num_credits, 0)) AS compute_credits,
compute_credits + qas_credits AS total_credits,
AVG(total_credits) OVER (
PARTITION BY NULL ORDER BY credit_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
AS avg_total_credits_7days
FROM credits
GROUP BY credit_date
ORDER BY credit_date;
クエリのパフォーマンスの表示¶
このクエリは、特定のウェアハウスのクエリアクセラレーション対象クエリの平均実行時間を返します。クエリの日付範囲は、Query Acceleration Serviceの最初のクレジット使用の8週間前から、Query Acceleration Serviceの最後に発生したコストの8週間後(または現在の日付)までです。この結果は、Query Acceleration Serviceを有効にした後に、平均クエリパフォーマンスがどのように変化したかを評価するのに役立つ場合があります。
注釈
このクエリは、Query Acceleration Serviceを有効にする前後で、ウェアハウスのワークロードが変わらない場合に、クエリのパフォーマンスを評価するのに最も役立ちます。
ウェアハウスのワークロードが安定していれば、
num_execs列の値も一定に保たれるはずです。クエリ結果の
num_execs列の値が大幅に増加または減少した場合、このクエリの結果はクエリのパフォーマンス評価には役に立たない可能性があります。
この例のクエリは、日ごとのクエリ実行時間を返し、ウェアハウス my_warehouse で高速化の対象となるクエリの前の週の7日間の平均を計算します。
WITH qas_eligible_or_accelerated AS (
SELECT TO_DATE(qh.end_time) AS exec_date,
COUNT(*) AS num_execs,
SUM(qh.execution_time) AS exec_time,
MAX(IFF(qh.query_acceleration_bytes_scanned > 0, 1, NULL)) AS qas_accel_flag
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY AS qh
WHERE qh.warehouse_name = 'my_warehouse'
AND TO_DATE(qh.end_time) BETWEEN
DATEADD(WEEK, -8, (
SELECT TO_DATE(MIN(end_time))
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE warehouse_name = 'my_warehouse'
))
AND
DATEADD(WEEK, +8, (
SELECT TO_DATE(MAX(end_time))
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE warehouse_name = 'my_warehouse'
))
AND (qh.query_acceleration_bytes_scanned > 0
OR
EXISTS (
SELECT 1
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE AS qae
WHERE qae.query_id = qh.query_id
AND qae.warehouse_name = qh.warehouse_name
)
)
GROUP BY exec_date
)
SELECT exec_date,
SUM(exec_time) OVER (
PARTITION BY NULL ORDER BY exec_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) /
NULLIFZERO(SUM(num_execs) OVER (
PARTITION BY NULL ORDER BY exec_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
) AS avg_exec_time_7days,
exec_time / NULLIFZERO(num_execs) AS avg_exec_time,
qas_accel_flag,
num_execs,
exec_time
FROM qas_eligible_or_accelerated;
ステートメントからの出力には次の列が含まれます。
列 |
説明 |
|---|---|
EXEC_DATE |
クエリ実行プラン |
AVG_EXEC_TIME_7DAYS |
EXEC_DATE を含む過去7日間の平均実行時間。 |
AVG_EXEC_TIME |
平均クエリ実行時間。 |
QAS_ACCEL_FLAG |
クエリが高速化された場合は1、クエリが高速化されなかった場合は NULL。 |
NUM_EXECS |
高速化されたクエリの数。 |
EXEC_TIME |
クエリアクセラレーションの対象となるすべてのクエリの総実行時間。 |
Tip
クエリ Acceleration Service(QAS)が有効な場合、Snowflakeは対象となるクエリごとに少量のデータをリモートストレージに書き込みます。QAS はそのクエリでは使用されません。したがって、のゼロ以外の値は心配しないでください。bytes_spilled_to_remote_storage 内の QUERY_HISTORY の場合に表示 QAS が有効になっています。
検索最適化との互換性¶
クエリアクセラレーションと 検索最適化 を併用して、クエリのパフォーマンスを最適化できます。まず、検索最適化により、クエリに不要な マイクロパーティション を削除できます。次に、 対象となるクエリ については、クエリアクセラレーションによって残りの作業の一部をサービスが提供する共有コンピューティングリソースにオフロードできます。
両方のサービスによって高速化されるクエリのパフォーマンスは、ワークロードと利用可能なリソースによって異なります。