2
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?

Snowflakeのクエリキャッシュについて理解する

Posted at

1.Snowflakeのクエリキャッシュについての動きを理解する

Snowflakeは、取得したクエリに対して、まずクエリキャッシュを探しに行きます。

1716051905712.png

引用:
https://www.linkedin.com/pulse/query-lifecycle-snowflake-minzhen-yang-7mbfc/

ディスクのデータ読み込みの流れ

ローカルディスク(キャッシュ)を確認

Snowflakeの仮想ウェアハウス(コンピュートリソース)が使用するキャッシュにデータがあれば、それを利用。
キャッシュには、最近クエリで使用されたデータのコピーが含まれる。
これにより、頻繁にアクセスされるデータの取得を高速化。
キャッシュにデータがなければ、リモートストレージ(クラウドストレージ)を確認

Snowflakeは、ストレージ層にデータを保存している(AWS S3、Google Cloud Storage、Azure Blob Storage)。
ローカルキャッシュにデータがない場合、ここからデータを取得し、必要に応じてキャッシュに保存。

2.クエリキャッシュの種類

Snowflakeには、いくつかのクエリキャッシュ機能が存在します。

image.png

クエリリザルトキャッシュ

クエリリザルトキャッシュについては、以下のように確認することができます。

select
    *
from
    transactions m
left outer join
    customer_data d1
on
    m.customer_id = d1.customer_id;

image.png
このように、2つのテーブルスキャンと、ジョインの処理が実際にメモリ上で走っていることがわかります。

また同じように、同一クエリを走らせてみると以下のように、クエリキャッシュが効いていることがわかります。

image.png

ウェアハウスキャッシュ

では、このクエリキャッシュが効いた状態で、その中の単一のカラムのみを取得した場合どうなるでしょうか

select
    PRICE
from
    transactions m
left outer join
    customer_data d1
on
    m.customer_id = d1.customer_id;

結果は以下のとおりです。ディスクの読み込みがありません。全てメモリ内で完結しています。
これは、ウェアハウスキャッシュが効いている証拠です。
メモリ内にデータを保持しているため、わざわざディスクを読み込まずに高速にクエリを返してくれます。
image.png

ウェアハウスが停止すると、このキャッシュは無くなります。

メタデータキャッシュ

メタデータキャッシュは、Snowflake側が管理しているデータベースに
各種テーブルの統計情報を管理しており、そこからデータを取得する際に働くキャッシュになります。

例えば、よくアンチパターンになる以下のクエリを走らせてみたらどうでしょうか。

SELECT count(*)
from table

image.png

この通り、メタデータキャッシュが効き、ウェアハウスのスキャン量がありません。
最大値や最小値においてもこのメタデータキャッシュが聞くことができ、
有効に使えます。

3.参考資料

4.tips

実際にクエリを確かめたい場合は、リザルトキャッシュをFALSEに設定しましょう
この際、セッション単位でFALSEにすることをおすすめします。
アカウント単位で実行すると、そのままキャッシュが効かなくなり、もったいないです。

-- キャッシュを無効化にさせたい場合
ALTER SESSION SET USE_CACHED_RESULT = FALSE;
-- 再度キャッシュを効かせたい場合
ALTER SESSION SET USE_CACHED_RESULT = true;
-- 実際にキャッシュがどうなっているか確認する方法
SHOW PARAMETERS LIKE '%USE_CACHED_RESULT%';

2
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
2
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?