チュートリアル: Query Acceleration Serviceによりワークロードのパフォーマンスを向上させる¶
概要¶
Snowflakeは、さまざまなワークロードを加速させるために、各種のパフォーマンス強化機能を提供しています。このチュートリアルでは、Query Acceleration Service(QAS)を活用して、ワークロード全体のパフォーマンスを向上させる方法について学びます。
前提条件¶
Enterprise Edition(またはそれ以上)のSnowflakeアカウント
以下の権限を付与されたロール。
CREATE WAREHOUSE および ALTER WAREHOUSE コマンドの実行に必要な権限。
チュートリアルのAccount Usageビューをクエリするために必要な権限。
チュートリアルのInformation Schemaのテーブル関数を実行するために必要な権限。
SQL の中程度の知識。
SQL コマンド実行用 Snowsight または SnowSQL (CLI クライアント)。
学習内容¶
このチュートリアルでは、次の方法を学習します。
クエリ履歴から、アクセラレーションの対象となるクエリを探します。
クエリアクセサレーションの効果を確認するために、2つのウェアハウスでクエリを実行します。
アクセラレーションを使用した場合と使用しない場合のクエリのパフォーマンスとコストを比較します。
Query Acceleration Serviceのメリットを最も受けられるウェアハウスを識別します。
既存のウェアハウスに対して、サービスを有効にします。
対象となるクエリを探す¶
加速させる対象となるクエリを探します。以下のクエリ例を使用すると、アクセラレーションの対象となるクエリを検索できます。
このクエリは、 ACCOUNT_USAGE スキーマにある QUERY_ACCELERATION_ELIGIBLE ビューの eligible_query_acceleration_timeフィールドと総クエリ時間の比率によって特定される、対象となる時間比率の高いクエリを識別します。
SELECT query_id,
query_text,
start_time,
end_time,
warehouse_name,
warehouse_size,
eligible_query_acceleration_time,
upper_limit_scale_factor,
DATEDIFF(second, start_time, end_time) AS total_duration,
eligible_query_acceleration_time / NULLIF(DATEDIFF(second, start_time, end_time), 0) AS eligible_time_ratio
FROM
SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE
start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP())
AND eligible_time_ratio <= 1.0
AND total_duration BETWEEN 3 * 60 and 5 * 60
ORDER BY (eligible_time_ratio, upper_limit_scale_factor) DESC NULLS LAST
LIMIT 100;
結果から、 UPPER_LIMIT_SCALE_FACTOR の値が最大のクエリを選択します。
クエリテキスト、ウェアハウスサイズ、上限スケールファクターをコピーします。
上記のクエリで結果が得られない場合でも、以下のクエリ例を使用して、このチュートリアルに従うことができます。このクエリのサンプルデータセットは、共有されているSnowflakeのサンプルデータにある TPC-DS データ のスナップショットです。
SELECT d.d_year as "Year",
i.i_brand_id as "Brand ID",
i.i_brand as "Brand",
SUM(ss_net_profit) as "Profit"
FROM snowflake_sample_data.tpcds_sf10tcl.date_dim d,
snowflake_sample_data.tpcds_sf10tcl.store_sales s,
snowflake_sample_data.tpcds_sf10tcl.item i
WHERE d.d_date_sk = s.ss_sold_date_sk
AND s.ss_item_sk = i.i_item_sk
AND i.i_manufact_id = 939
AND d.d_moy = 12
GROUP BY d.d_year,
i.i_brand,
i.i_brand_id
ORDER BY 1, 4, 2
LIMIT 200;
このクエリ例を使用する場合、 WAREHOUSE_SIZE はXS、 UPPER_LIMIT_SCALE_FACTOR は64です。
クエリテキスト、ウェアハウスサイズ、上限スケールファクターをコピーします。
新しいウェアハウスを作成する¶
このチュートリアルでは、クエリを実行するために、Query Acceleration Serviceを有効にしたウェアハウスと、有効にしていないウェアハウスの2つが必要です。同じクエリを新たに別のウェアハウスで実行することで、このチュートリアルのQuery Acceleration Serviceのパフォーマンスとコストの両方を比較できます。
ウェアハウスを作成するには、Snowflakeに接続し、 Snowsight または SnowSQL を使用して以下のコマンドを実行します。 warehouse_size
と upper_limit_scale_factor
を前のステップで選択した値に置き換えます。
CREATE WAREHOUSE noqas_wh WITH
WAREHOUSE_SIZE='<warehouse_size>'
ENABLE_QUERY_ACCELERATION = false
INITIALLY_SUSPENDED = true
AUTO_SUSPEND = 60;
CREATE WAREHOUSE qas_wh WITH
WAREHOUSE_SIZE='<warehouse_size>'
ENABLE_QUERY_ACCELERATION = true
QUERY_ACCELERATION_MAX_SCALE_FACTOR = <upper_limit_scale_factor>
INITIALLY_SUSPENDED = true
AUTO_SUSPEND = 60;
QAS を使用しないクエリ¶
環境を設定し、Query Acceleration Serviceの対象となるクエリを見つけたら、Query Acceleration Serviceを有効にせずにクエリを実行し、そのパフォーマンスを確認します。
クエリ履歴から対象となるクエリではなく、プロバイダーが提供するサンプルクエリを使用する場合は、まず以下のステートメントを実行します。
USE SCHEMA snowflake_sample_data.tpcds_sf10tcl;
ウェアハウスを選択し、クエリを実行します。
QAS が有効になっていないウェアハウスを使用します。
USE WAREHOUSE noqas_wh;
テストクエリ(前のステップからのクエリテキスト)を実行します。
最後に実行されたクエリのクエリ ID を取得します。
Snowsight を使用している場合は、 Results パネルにある Query Profile パネルからクエリ ID をコピーして貼り付けることができます。または、次のステートメントを実行することもできます。
SELECT LAST_QUERY_ID();
今後の追加ステップのために、このクエリ ID をコピーします。
QAS を使用するクエリ¶
クエリアクセラレーションを使用しないウェアハウスでクエリを実行した後、 QAS が有効なウェアハウスで同じクエリを実行します。
QAS を有効にしたウェアハウスを使用して、クエリを実行します。
USE WAREHOUSE qas_wh;
テストクエリ(前のステップからのクエリテキスト)を実行します。
最後に実行されたクエリのクエリ ID を取得します
Snowsight を使用している場合は、 Results パネルにある Query Profile パネルからクエリ ID をコピーして貼り付けることができます。または、次のステートメントを実行することもできます。
SELECT LAST_QUERY_ID();
今後の追加ステップのために、このクエリ ID をコピーします。
クエリのパフォーマンスとコストを比較する¶
前のステップでは、 QAS が有効なウェアハウスと有効ではないウェアハウスを使用して、同じクエリを2回実行しました。これで、クエリのパフォーマンスを比較できます。
それには、Information Schema QUERY_HISTORY テーブル関数を実行し、そのクエリ IDs を使ったクエリの実行時間を比較します。
SELECT query_id,
query_text,
warehouse_name,
total_elapsed_time
FROM TABLE(snowflake.information_schema.query_history())
WHERE query_id IN ('<non_accelerated_query_id>', '<accelerated_query_id>')
ORDER BY start_time;
同じクエリをアクセラレーションあり、なしで実行した場合の TOTAL_ELAPSED_TIME を比較します。
次に、各ウェアハウスのコストを比較するために、各ウェアハウスのInformation Schema WAREHOUSE_METERING_HISTORY テーブル関数を実行します。
注釈
このチュートリアルで新しいウェアハウスの作成をスキップし、既存のウェアハウスを使用した場合、このテーブル関数の結果は役に立たない可能性が高くなります。
次のクエリを実行し、
noqas_wh
ウェアハウスのコストを表示します。SELECT start_time, end_time, warehouse_name, credits_used, credits_used_compute, credits_used_cloud_services, (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'NOQAS_WH' ));
QAS を有効にしたウェアハウスのために、ウェアハウスとQuery Acceleration Serviceのコストを加算して、 QAS の総コストを算出します。
qas_wh
ウェアハウスのコストを表示します。SELECT start_time, end_time, warehouse_name, credits_used, credits_used_compute, credits_used_cloud_services, (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'QAS_WH' ));
Information Schema QUERY_ACCELERATION_HISTORY テーブル関数でQuery Acceleration Serviceのコストを表示します。
SELECT start_time, end_time, warehouse_name, credits_used, num_files_scanned, num_bytes_scanned FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.QUERY_ACCELERATION_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'QAS_WH' ));
最初のクエリの
credits_used_total
値と2番目のクエリのcredits_used
値を加算し、 QAS の総コストを算出します。
これまでに、 QAS が有効なウェアハウスと有効ではないウェアハウスのそれぞれでクエリをテストし、 QAS のパフォーマンスとコストを比較することができました。次に、どのウェアハウスが QAS のメリットを最も受けられるかを識別する方法を学びます。
ワークロードの中から対象となるウェアハウスを探す¶
クエリアクセラレーションのメリットを最も受けられるウェアハウスは、アクセラレーションの対象となるクエリの数が最も多いウェアハウスと、クエリアクセラレーションの対象となる時間が最も長いウェアハウスを決定することによって見つけられます。
直近1か月でQuery Acceleration Serviceの対象となるクエリが最も多いウェアハウスを識別子で確認します。
SELECT warehouse_name, count(query_id) as num_eligible_queries, MAX(upper_limit_scale_factor) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE WHERE start_time > DATEADD(month, -1, 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, MAX(upper_limit_scale_factor) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE WHERE start_time > DATEADD(month, -1, CURRENT_TIMESTAMP()) GROUP BY warehouse_name ORDER BY total_eligible_time DESC;
一般的に、最もメリットを受けるウェアハウスは、対象となるクエリの数が最も多いか、対象となるクエリのアクセラレーション時間が最も長いか、その2つの組み合わせのいずれかです。たとえば、あるウェアハウスが上記の両方のクエリで結果の上位にある場合、そのウェアハウスはクエリアクセラレーションの良い候補になる可能性があります。
Query Accelerationの有効化¶
Query Acceleration Serviceのメリットを最も受けるウェアハウスを決定した後、次の ALTER WAREHOUSE ステートメントを実行して、クエリアクセラレーションを有効にします。
ALTER WAREHOUSE <warehouse_name> SET
enable_query_acceleration = TRUE;
ウェアハウスの QAS を有効にして、対象となるクエリのクエリアクセラレーションを利用する準備ができました。
クリーンアップと追加のリソース¶
クリーンアップするには、このチュートリアルのために作成したウェアハウスをドロップします。
DROP WAREHOUSE noqas_wh;
DROP WAREHOUSE qas_wh;
次に読むもの¶
Query Acceleration Serviceに関する詳細については、 Query Acceleration Serviceの使用 をご参照ください。
対象となるクエリやウェアハウスを特定するためのクエリのさらなる例については、 Query Accelerationのメリットを受ける可能性のあるクエリとウェアハウスの識別 をご参照ください。
QAS スケールファクターの詳細については、こちらをご参照ください。
スケールファクターの説明については、 CREATE WAREHOUSE トピック内の QUERY_ACCELERATION_MAX_SCALE_FACTOR をご参照ください。
スケールファクターの設定に関する詳細については、 スケールファクターの調整 をご参照ください。
Query Acceleration Serviceの使用開始後、 QAS の使用状況やコストをモニターするには、
Query Acceleration Serviceの使用状況のモニターについては、 Query Acceleration Serviceの使用状況に対するモニター をご参照ください。
サービスのコストに関する詳細については、 Query Acceleration Serviceのコスト をご参照ください。
QAS のパフォーマンスとコストを評価するのに役立つクエリの例については、 コストとパフォーマンスの評価 をご参照ください。