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;
Copy

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;
Copy
+-------+---------------------------+-------------------------------------+
| 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.

  • このクエリには、非決定的な結果を返す関数が含まれています(例えば、 SEQRANDOM など)。

SYSTEM$ESTIMATE_QUERY_ACCELERATION関数を使用したクエリの識別

SYSTEM$ESTIMATE_QUERY_ACCELERATION 関数は、以前に実行されたクエリが、Query Acceleration Serviceのメリットを受ける可能性があるかどうかを判断するのに役立ちます。クエリがクエリアクセラレーションの対象である場合、関数はさまざまなクエリのアクセラレーション スケールファクター の推定クエリ実行時間を返します。

次のステートメントを実行して、クエリアクセラレーションが特定のクエリに役立つかどうかを判断します。

SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f'));
Copy

この例では、クエリは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
}
Copy

次の例は、Query Acceleration Serviceの対象とならないクエリの結果を示しています。

SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('cf23522b-3b91-cf14-9fe0-988a292a4bfa'));
Copy

上記のステートメントは、次の出力を生成します。推定クエリ時間は空白です。``ineligibleReason``プロパティレポートでは、クエリがQASを使用しなかった理由をレポートします。

{
  "estimatedQueryTimes": {},
  "ineligibleReason": "NO_LARGE_ENOUGH_SCAN",
  "originalQueryTime": 20.291,
  "queryUUID": "cf23522b-3b91-cf14-9fe0-988a292a4bfa",
  "status": "ineligible",
  "upperLimitScaleFactor": 0
}
Copy

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;
Copy

アクセラレーションの対象となるクエリ実行時間のうち、過去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;
Copy

過去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;
Copy

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;
Copy

過去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;
Copy

ウェアハウス 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());
Copy

ウェアハウス 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;
Copy

スケールファクターの調整

スケールファクターは、ウェアハウスがクエリアクセラレーションのためにリースするコンピューティングリソースの量に上限を設定できる コスト管理 メカニズムです。この値は、ウェアハウスサイズとコストに基づく乗数として使用されます。

たとえば、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;
Copy

Query Acceleration Serviceの使用状況に対するモニター

このセクションでは、Query Acceleration Serviceの使用状況をモニターする方法について説明します。モニターすることで、パフォーマンスへの影響を理解し、アクセラレーションの恩恵を最も受けるクエリを特定し、機能の全体的な有効性を評価できます。そうすることで、コストを管理し、ワークロードを最適化することができます。

ウェブインターフェイスを使用した、Query Accelerationの使用状況に対するモニター

Query Acceleration Serviceを有効にすると、 クエリプロファイルタブProfile Overview パネルを表示して、クエリアクセラレーション結果の効果を確認できます。

次のスクリーンショットは、クエリ全体に対して表示される統計の例を示しています。クエリ内の複数の操作が高速化された場合、結果はこのビューに集約されるため、Query Acceleration Serviceによって実行された作業の合計量を確認できます。

../_images/query-acceleration-profile-overview.png

Profile Overview パネルの Query Acceleration セクションには、次の統計が含まれています。

  • サービスによってスキャンされたパーティション --- スキャンするためにQuery Acceleration Serviceにオフロードされたファイルの数。

  • アクセラレーション用に選択されたスキャン --- 高速化されているテーブルスキャンの数。

演算子の詳細(統計 を参照)で、演算子をクリックして詳細情報を表示します。次のスクリーンショットは、 TableScan 操作で表示される統計の例を示しています。

../_images/query-acceleration-table-scan.png

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;
Copy

過去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;
Copy

Query Acceleration Serviceのコスト

Query Accelerationは、 サーバーレスコンピューティングリソース を使用して対象となるクエリの一部を実行するため、クレジットを消費します。

Query Accelerationは、使用されたコンピューティングリソースに対して秒単位で支払うという点で、Snowflakeの他のサーバーレス機能と同様に課金されます。Query Acceleration Serviceにより消費されたコンピューティング時間あたりのクレジット量を知る方法については、 Snowflakeサービス利用テーブル の「サーバーレス機能クレジットテーブル」をご参照ください。

従来のコンソール内における請求情報の表示

アカウントでQuery Acceleration Serviceを有効にしている場合、 Classic Console の請求ページには QUERY_ACCELERATION というウェアハウスが含まれ、アカウント内のすべてのウェアハウスでサービスによって使用されるすべてのクレジットが表示されます。

以下のスクリーンショットは、 QUERY_ACCELERATION ウェアハウスに表示される請求情報の例を示しています。

../_images/query-acceleration-billing-ui.png

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;
Copy

組織の使用状況 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;
Copy

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)));
Copy

コストとパフォーマンスの評価

このセクションでは、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;
Copy

クエリのパフォーマンスの表示

このクエリは、特定のウェアハウスのクエリアクセラレーション対象クエリの平均実行時間を返します。クエリの日付範囲は、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;
Copy

ステートメントからの出力には次の列が含まれます。

説明

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 が有効になっています。

検索最適化との互換性

クエリアクセラレーションと 検索最適化 を併用して、クエリのパフォーマンスを最適化できます。まず、検索最適化により、クエリに不要な マイクロパーティション を削除できます。次に、 対象となるクエリ については、クエリアクセラレーションによって残りの作業の一部をサービスが提供する共有コンピューティングリソースにオフロードできます。

両方のサービスによって高速化されるクエリのパフォーマンスは、ワークロードと利用可能なリソースによって異なります。