❄️

実践 Zero to Snowflake #5:クエリ結果キャッシュ(Query Result Cache)

に公開

個人的取り組みで始めた『実践 Zero to Snoflake』シリーズ。

当エントリは『#5:クエリ結果キャッシュ(Query Result Cache)』について実践を進めていきます。

はじめに

Snowflakeににはクエリ結果キャッシュ(Query Result Cache)という仕組みがあります。

クエリの実行結果は一定期間保持(キャッシュ)され、一定期間が終了すると、結果はシステムからパージされる仕組みとなっています。Snowflakeは永続的なクエリ結果を使用して、何も変更されていない場合(「取得の最適化」)に結果が再生成されるのを防ぎます。

すべてのサイズの永続的なクエリ結果の場合、キャッシュは24時間後に期限切れとなります。

その他Snowflakeにおけるクエリ結果キャッシュの概要は以下公式ドキュメントをご参照ください。
https://docs.snowflake.com/ja/user-guide/querying-persisted-results

クエリ結果キャッシュ実践

前エントリで実行していたSQLクエリをここで再実行してみます。

SELECT
    o.truck_brand_name,
    COUNT(DISTINCT o.order_id) AS order_count,
    SUM(o.price) AS total_sales
FROM analytics.orders_v o
GROUP BY o.truck_brand_name
ORDER BY total_sales DESC;

結果が爆速で返ってきました。

上記実行クエリで絞る形で「クエリ履歴」を見てみます。[モニタリング]メニューから該当SQLカラムの項目名で絞り込む形で結果を抽出してみました。赤枠で囲った部分が前エントリからの継続した記録となっていますが、一番下の1分3秒掛かっているものがx-smallサイズでの実行結果、その上の7.2秒掛かったものがx-largeサイズでの実行結果、その上2件(0.2〜0.3秒)がキャッシュの効いたクエリとなっています。

クエリ結果キャッシュを無効化する方法

基本的にはここで言及されている「クエリ結果キャッシュ」の設定はデフォルトで有効(value=true)となっています。

SHOW PARAMETERS LIKE '%USE_CACHED_RESULT%';

+-------------------+-------+---------+---------+---------+
| key               | value | default | level   | type    |
+-------------------+-------+---------+---------+---------+
| USE_CACHED_RESULT | true  | true    | ACCOUNT | BOOLEAN |
+-------------------+-------+---------+---------+---------+

この設定は無効化(value=false)することが可能です。
https://qiita.com/manabian/items/dffa2123a40191d8e440
https://zenn.dev/finatext/articles/snowflake-chache

USE_CACHED_RESULTの値に対してALTER ACCOUNT文を実行することで変更できます。

use role accountadmin;
ALTER ACCOUNT SET USE_CACHED_RESULT = true;
SHOW PARAMETERS LIKE '%USE_CACHED_RESULT%'

+-------------------+-------+---------+---------+---------+
| key               | value | default | level   | type    |
+-------------------+-------+---------+---------+---------+
| USE_CACHED_RESULT | false | true    | ACCOUNT | BOOLEAN |
+-------------------+-------+---------+---------+---------+

設定を無効化すると、当然のことながら毎回キャッシュが効かない状態となってしまいます。本番環境への適用についてはくれぐれも気を付けてください。(という事で戻しておく)

use role accountadmin;
ALTER ACCOUNT SET USE_CACHED_RESULT = true;

Snowflakeの「クエリ結果キャッシュ」に関する有用情報

後学のために、Snowflakeにおけるクエリ結果キャッシュで有用そうな情報をまとめておこうと思います。

まとめ

という訳で、実践『Zero to Snowflake』第5弾、『クエリ結果キャッシュ(Query Result Cache)』の紹介でした。

エントリ終盤でウェアハウスの性能そのものを変更してその効果を実感することができましたが、このように用途状況に応じて柔軟に実行性能を変更できるというのはとても便利ですね。

次は『#6:基本的な変換テクニック』について実践していきます。

Discussion