1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Snowflakeにおけるパフォーマンスチューニング:Query Acceleration Service

Last updated at Posted at 2023-12-19

はじめに

Snowflakeにおけるパフォーマンスチューニングには複数の方法があります。
その1つのQuery Acceleration Serviceについて、勉強した内容をまとめておこうと思います。

Query Acceleration Serviceとは

クエリの処理時にウェアハウスのコンピュートリソースが足りない場合、一時的にリソースを増強させる機能です。

例えば、Sサイズのウェアハウスを使って、1~10GBのテーブルにクエリする場合、数秒~1分くらいでクエリ結果が返ってきますが、100GB以上の場合だと数分かかります。

Query Acceleration Serviceを利用すると、Sサイズのウェアハウスではリソースが足りないと判断し、リソースを一時的に増強して、パフォーマンスを改善させることができます。
image.png

Query Acceleration Serviceは、リソースが不足している場合にのみリソースを増強します。
リソースの不足は、Snowflakeが自動で判断します。
そのため、ユースケースとしては、クエリごとのデータ量が予測できない運用が適しています。

Query Acceleration Serviceを利用する際の注意点

①エディション

Query Acceleration Serviceを利用するには、Enterprise Edition以上が必要です。

②Query Acceleration Serviceを利用できるSQL

以下に該当するSQL文で、Query Acceleration Serviceのによるパフォーマンスの改善が期待できます。
SELECT文WHERE句での条件指定、もしくはGROUP BY句での集約が行われていること)
INSERT文(挿入するデータをSELECT句 で指定していること。Insert Into テーブル名 Select・・・)
CREATE TABLE AS SELECT(CTAS)

③Query Acceleration Serviceを利用できないSQL

以下に該当するSQL文では、Query Acceleration Serviceを利用できません。
 ・WHERE句での条件指定がない、または条件指定していてもテーブルの大部分を取得するSELECT文
 ・GROUP BY句での集約がない、またはカーディナリティが高い列にGROUP BYを使っているSELECT文
 ・テーブルのマイクロパーティションの数が少ない(テーブルの容量自体が小さいことを意味する)
 ・LIMIT句を使っているSELECT文(ただし、Order By句を一緒に使っている場合は、利用できないSQLと見なされません)

※カーディナリティが高い列
 列に格納されているデータの種類がどのくらいあるのかを示します。
 種類が多いほど、カーディナリティが高いと言えます。
 例えば、タイムスタンプ型の列はカーディナリティが高くなります。

④クレジットを消費する

Query Acceleration Serviceにより一時的に増強されたリソースがクレジット消費の対象となります。
リソースを消費した分だけ課金されます。(1秒単位の課金)
消費されたクレジットは、QUERY_ACCELERATION_HISTORYで確認できます。

Query Acceleration Serviceの利用方法

 Query Acceleration Serviceは、ウェアハウス単位で有効化します。
 そのため、まず、Query Acceleration Serviceでパフォーマンスを改善できるウェアハウスを特定します。
 
 以下の手順で、Query Acceleration Serviceを利用します。
 手順1:Query Acceleration Serviceでパフォーマンスを改善できるウェアハウスを特定する
 手順2:必要なscale factorを確認する
 手順3:ウェアハウスの設定変更でQuery Acceleration Serviceを有効にする

手順1:Query Acceleration Serviceでパフォーマンスを改善できるウェアハウスを特定する

ACCOUNT_USAGEスキーマのQUERY_ACCELERATION_ELIGIBLEビューを参照して、パフォーマンスを改善できるウェアハウスを特定します。

以下のSQLは、Query Acceleration Serviceでパフォーマンスを改善できるSQLが実行されているウェアハウスと、対象のSQLの実行時間を抽出しています。

SELECT 
  warehouse_name, 
  SUM(eligible_query_acceleration_time) AS total_eligible_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE start_time >= DATEADD('days', -1, current_date())
GROUP BY warehouse_name
ORDER BY total_eligible_time DESC;

image.png

手順2:必要なscale factorを確認する

scale factorとは、Query Acceleration Serviceの利用時のクレジット消費量を制限する機能です。
Query Acceleration Serviceから増強してもらうリソースの量に上限値を設定することで、クレジット消費を制限します。

scale factorで指定する値は、各サイズのウェアハウスが消費するクレジットの倍数です。

例えば、Sサイズのウェアハウスで、scale factor = 5と設定した場合、1時間当たりのクレジットの最大消費は以下になります。

2クレジット/時間(Sサイズの場合) X 5 = 10クレジット/時間

scale factorについても、QUERY_ACCELERATION_ELIGIBLEビューを参照して、適切な設定値を確認します。

以下は、手順1で特定したウェアハウスのscale factorを確認する例です。

SELECT upper_limit_scale_factor, COUNT(upper_limit_scale_factor)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE warehouse_name = '<手順1で特定したウェアハウスの名称>'
  GROUP BY 1 ORDER BY 1;

image.png

※scale factor = 0とした場合
 Query Acceleration Serviceが、クレジット消費の制限なくリソースを増強することを意味します。

手順3:ウェアハウスの設定変更でQuery Acceleration Serviceを有効にする

QUERY_ACCELERATION_MAX_SCALE_FACTORに手順2で確認したscale factorの値を指定して、Query Acceleration Serviceを有効化します。

ALTER WAREHOUSE <ウェアハウスの名称> SET
  ENABLE_QUERY_ACCELERATION = true
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = <手順2で確認したscale factor>;

その他のパフォーマンスチューニングについて

その他のチューニング方法としては、クラスタリングという方法もございます。

参考にしたサイト

ご案内

株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?