Snowflake

Snowflakeキャッシュの仕組み|Result Cache・Metadata Cache・Warehouse Cache

2026-03-21
更新: 2026-03-27
NicheeLab編集部

Snowflakeはクエリパフォーマンスの最適化のために3種類のキャッシュを自動的に管理しています。Result Cache(Cloud Servicesレイヤー)、Metadata Cache(Cloud Servicesレイヤー)、Warehouse Cache(コンピュートレイヤーのSSD)の動作レイヤーと無効化条件を正確に理解することは、パフォーマンスチューニングとSnowPro試験の両面で重要です。

3種類のキャッシュ比較表

項目Result CacheMetadata CacheWarehouse Cache
別名Query Result CacheCloud Services CacheLocal Disk Cache / SSD Cache
動作レイヤーCloud ServicesレイヤーCloud Servicesレイヤーコンピュートレイヤー(WH内SSD)
キャッシュ対象クエリの最終結果セットテーブルのメタデータ(行数・MIN/MAX等)マイクロパーティションのローデータ
保持期間24時間(再利用で延長)永続的(データ変更まで)ウェアハウス稼働中のみ
WH必要性不要(WHなしで返却)不要(WHなしで返却)必要(WH上のSSD)
クレジット消費なし(Cloud Services枠内)なし(Cloud Services枠内)ウェアハウスクレジット消費
無効化条件テーブル変更 / 24時間経過 / SQL相違テーブルのDDL・DML変更ウェアハウスのサスペンド

Result Cache(Query Result Cache)

Result Cacheは、過去24時間以内に実行された同一SQLクエリの結果セットを保持し、同じクエリが再実行された際にウェアハウスを経由せず即座に結果を返す仕組みです。

クエリ実行フロー(Result Cache あり):

[SQL: SELECT region, SUM(amount) FROM sales GROUP BY region]
       │
       ▼
[Cloud Services レイヤー]
       │
       ├─ Result Cache にヒット?
       │     │
       │     ├─ YES → キャッシュから即座に返却(WH不使用・クレジット消費なし)
       │     │
       │     └─ NO  → ウェアハウスでクエリ実行
       │                    │
       │                    └─ 結果を返却 + Result Cache に保存(24時間)
       ▼
[クエリ結果]

Result Cacheがヒットする条件

  • SQL文が完全に一致する(大文字小文字・空白・コメントも含めて同一)
  • 対象テーブルのデータが変更されていない
  • 前回の実行から24時間以内
  • 同一ロールで実行している(異なるロールではキャッシュ不適用)
  • セッション変数 USE_CACHED_RESULT = TRUE(デフォルト)

Result Cacheが無効化される条件

無効化条件詳細
テーブルデータの変更INSERT/UPDATE/DELETE/MERGEで対象テーブルのデータが変更された場合
24時間の経過前回クエリ実行から24時間が経過(再利用されると24時間延長)
SQL文の相違空白・コメント・大小文字が1文字でも異なる場合
USE_CACHED_RESULT = FALSEセッションパラメータで明示的に無効化
非確定的関数CURRENT_TIMESTAMP()、RANDOM()、UUID_STRING()等を含むクエリ
外部関数External Functionを含むクエリ
-- Result Cacheを無効化してクエリ実行
ALTER SESSION SET USE_CACHED_RESULT = FALSE;

SELECT region, SUM(amount) FROM sales GROUP BY region;
-- → 必ずウェアハウスで再実行される

-- Result Cacheを再有効化
ALTER SESSION SET USE_CACHED_RESULT = TRUE;

Metadata Cache

Metadata Cacheは、テーブルのメタデータ(行数、バイトサイズ、各マイクロパーティションのMIN/MAX値等)をCloud Servicesレイヤーに保持する仕組みです。メタデータだけで回答可能なクエリはウェアハウスを使わずに結果を返します。

-- Metadata Cacheで即座に回答されるクエリ例
SELECT COUNT(*) FROM large_table;      -- 行数はメタデータで保持
SELECT MIN(id) FROM large_table;       -- MIN/MAXはパーティションメタデータで保持
SELECT MAX(created_at) FROM large_table;

-- これらのクエリはウェアハウスが SUSPENDED でも実行可能
-- Query Profile で "METADATA-BASED RESULT" と表示される

Metadata Cacheが保持する情報

  • テーブルの行数(ROW_COUNT)
  • テーブルのバイトサイズ
  • 各マイクロパーティションのMIN/MAX値(パーティションプルーニングに使用)
  • 各マイクロパーティションのNULL数・DISTINCT値の概算
  • テーブルのスキーマ定義

Warehouse Cache(Local Disk Cache)

Warehouse Cacheは、ウェアハウスのコンピュートノードに搭載されたSSD上にマイクロパーティションのローデータをキャッシュする仕組みです。リモートストレージ(S3/Azure Blob/GCS)からのI/Oを削減し、クエリの実行時間を短縮します。

クエリ実行フロー(Warehouse Cache あり):

[SQL: SELECT * FROM sales WHERE region = 'APAC']
       │
       ▼
[ウェアハウスのコンピュートノード]
       │
       ├─ 必要なマイクロパーティションがSSD上にキャッシュされている?
       │     │
       │     ├─ YES → SSDからローカル読み込み(高速)
       │     │
       │     └─ NO  → リモートストレージ(S3等)から読み込み
       │                    │
       │                    └─ 読み込んだデータをSSDにキャッシュ
       ▼
[クエリ結果]

Warehouse Cacheの動作特性

特性説明
キャッシュの持続ウェアハウスが稼働(RUNNING)中はキャッシュが維持される
サスペンド時ウェアハウスをSUSPENDするとキャッシュがクリアされる
リサイズ時スケールアップでノード追加分は空キャッシュ。既存ノードのキャッシュは維持
LRU方式SSD容量上限に達すると、最も古くアクセスされたデータが新データに置き換えられる
マルチクラスター各クラスターが独立したキャッシュを持つ

クエリ実行時のキャッシュ評価順序

キャッシュ評価の優先順位:

[SQLクエリ受信]
       │
       ▼
[1] Metadata Cache チェック
       │  メタデータだけで回答可能?(COUNT(*), MIN, MAX等)
       │     ├─ YES → 即座に返却(WH不要)
       │     └─ NO  → 次のステップへ
       ▼
[2] Result Cache チェック
       │  同一SQL + 同一ロール + 24時間以内 + データ未変更?
       │     ├─ YES → キャッシュ結果を返却(WH不要)
       │     └─ NO  → 次のステップへ
       ▼
[3] ウェアハウスで実行(Warehouse Cache を活用)
       │  必要なマイクロパーティションがSSD上にあれば高速読み込み
       │  なければリモートストレージから読み込み + SSDにキャッシュ
       ▼
[クエリ結果返却 + Result Cache に保存]

AUTO_SUSPENDとキャッシュの関係

ウェアハウスのAUTO_SUSPEND設定はWarehouse Cacheの有効性に大きく影響します。

  • AUTO_SUSPENDを短く設定(例: 60秒)→ 頻繁にサスペンドされWarehouse Cacheがクリアされる
  • AUTO_SUSPENDを長く設定(例: 600秒)→ キャッシュが長く保持されるがアイドル時のクレジット消費が増加
  • バッチ処理ではSUSPENDしてコスト削減を優先
  • 対話的クエリではキャッシュ保持を優先しAUTO_SUSPENDを適度に長くする

Query Profileでのキャッシュ確認

-- Query Profileで確認できるキャッシュ関連指標

Result Cache ヒット時:
  → Query Profile に "QUERY RESULT REUSE" と表示
  → ウェアハウスの処理ノードが表示されない

Metadata Cache ヒット時:
  → Query Profile に "METADATA-BASED RESULT" と表示

Warehouse Cache 利用時:
  → Statistics タブで以下を確認
     - Percentage Scanned from Cache: SSDキャッシュからの読み込み割合
     - Bytes Scanned from Cache: キャッシュから読み込んだバイト数

-- Warehouse Cacheの効果を比較するクエリ
-- 1回目: リモートストレージから読み込み(Percentage Scanned from Cache = 0%)
-- 2回目: SSDキャッシュから読み込み(Percentage Scanned from Cache ≒ 100%)

試験対策のポイント

  • Result Cacheは24時間保持、ウェアハウス不要で結果を返す
  • Result Cacheは同一ロールでの実行が必要(異なるロールではキャッシュ不適用)
  • Metadata Cacheは COUNT(*)/MIN/MAX 等のメタデータのみで回答可能なクエリに適用
  • Warehouse CacheはSSD上のローデータキャッシュ、SUSPENDでクリア
  • 非確定的関数(CURRENT_TIMESTAMP等)を含むクエリはResult Cache対象外
  • テーブルデータの変更(DML)はResult Cacheを無効化する
  • AUTO_SUSPENDの設定がWarehouse Cacheの有効性に影響する

サンプル問題

Cache

問題 1

あるユーザーが同じSELECT文を5分前にROLE_Aで実行し、今回ROLE_Bで再実行した。対象テーブルのデータは変更されていない。この場合のResult Cacheの動作として正しいものはどれか?

  1. A. SQL文が同一で24時間以内なのでResult Cacheから結果が返される
  2. B. 実行ロールが異なるためResult Cacheは適用されず、ウェアハウスで再実行される
  3. C. Result Cacheからロール情報を除外した結果が返される
  4. D. ROLE_Bの権限でフィルタされたResult Cache結果が返される

正解: B

Result Cacheはクエリを実行したロール(ROLE)ごとに管理されます。同じSQL文でも異なるロールで実行した場合はResult Cacheはヒットせず、ウェアハウスで再実行されます。これはロールによってRow Access PolicyやMasking Policyの適用結果が異なる可能性があるためです。

よくある質問

Result Cacheからクエリ結果が返された場合、ウェアハウスのクレジットは消費されますか?

いいえ。Result Cache(Query Result Cache)はCloud Servicesレイヤーで管理され、ウェアハウスを経由せずに結果が返されます。そのためウェアハウスのクレジット消費は発生しません。ただし、Cloud Servicesレイヤーの利用量がウェアハウスのクレジット消費の10%を超えた分は課金対象になるため、完全に無料というわけではありません。

Result Cacheが無効化されるのはどのような場合ですか?

Result Cacheは以下の条件で無効化されます: (1) 対象テーブルのデータが変更された(INSERT/UPDATE/DELETE/MERGE)場合、(2) 24時間が経過した場合、(3) クエリのSQL文が1文字でも異なる場合、(4) ユーザーがUSE_CACHED_RESULT = FALSEを設定した場合。また、ランダム関数(RANDOM()等)や非確定的関数(CURRENT_TIMESTAMP()等)を含むクエリはResult Cacheの対象外です。

Warehouse CacheとResult Cacheの違いを簡潔に教えてください

Result Cacheはクエリの最終結果セットをCloud Servicesレイヤーに24時間保持する仕組みで、同一SQLが再実行されると即座に返します。Warehouse Cache(Local Disk Cache)はウェアハウスのSSDに読み込んだマイクロパーティションのローデータをキャッシュする仕組みで、異なるクエリでも同じテーブルデータにアクセスする場合にリモートストレージへのI/Oを削減します。Warehouse Cacheはウェアハウスが稼働中のみ有効で、サスペンドするとクリアされます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.