Databricks

Databricks SQLのキャッシュ: 結果キャッシュ/データキャッシュ/マテビュー

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

Databricks SQLで「同じクエリなのに速いときと遅いときがある」と感じたことはないでしょうか。 その違いの多くはキャッシュの動作に起因します。Databricks SQLには3つの異なるキャッシュ層があり、 それぞれ動作レイヤー、保持条件、無効化タイミングが異なります。 この記事では、3つのキャッシュ層を正確に理解し、コスト効率の良いクエリ実行を実現する方法を整理します。

3種キャッシュ比較表

観点Result Cache(結果キャッシュ)Disk Cache(データキャッシュ)Materialized View
キャッシュ対象クエリの結果セットリモートストレージのデータファイル事前計算済みの集計結果(テーブル)
動作レイヤークエリプランナー(実行前に判定)ストレージI/O層(SSD)テーブルストレージ(Delta形式)
保持場所Warehouse内部メモリ/メタデータWarehouseノードのローカル SSDクラウドストレージ(永続化)
有効期間24時間(またはデータ変更まで)Warehouse停止まで明示的なDROPまで永続
Warehouse停止時消失消失保持(テーブルとして永続化)
無効化条件基テーブルのデータ変更 / 24時間経過OPTIMIZE / VACUUM / ファイル変更手動リフレッシュまたは自動リフレッシュで更新
Warehouse必要性同一Warehouseでの再実行が必要同一Warehouseノードでのアクセスが必要不要(どのWarehouseからでも読取可能)
ユーザー設定不要(自動)不要(自動)CREATE MATERIALIZED VIEW文が必要

Result Cache の詳細

Result Cacheは、完全に同一のSQLテキストが同一のWarehouseで再実行されたときに、 前回の結果をそのまま返す仕組みです。クエリのコンパイル・最適化・データスキャンをすべてスキップするため、 ヒットした場合のレスポンスは数十ミリ秒レベルです。

ヒット条件

  • SQLテキストが完全一致(ホワイトスペース、大文字小文字の違いも区別される)
  • 基テーブルのデータが変更されていない(Delta Logのバージョンで検知)
  • 非決定性関数(CURRENT_TIMESTAMP、rand、uuid等)を含まない
  • 前回のキャッシュから24時間以内
  • 同一Warehouseでの実行

ヒットしないケース

  • WHERE句のパラメータが毎回異なるアドホッククエリ
  • 基テーブルにINSERT/UPDATE/MERGE/DELETEが行われた後
  • 異なるWarehouseから同じクエリを実行した場合
  • CURRENT_DATE()を含むクエリ(日付が変わるとキャッシュが無効化される)

Disk Cache の詳細

Disk Cacheは、リモートストレージ(S3 / ADLS / GCS)からフェッチしたParquetファイルを WarehouseノードのローカルSSDにキャッシュする仕組みです。 Result Cacheがクエリ結果レベルのキャッシュであるのに対し、Disk Cacheはデータファイルレベルの キャッシュです。

動作の仕組み

  1. クエリが実行されると、必要なParquetファイルがリモートストレージからフェッチされる
  2. フェッチされたファイルがローカルSSDにキャッシュされる
  3. 同じファイルを必要とする次のクエリでは、リモートI/Oを省略してSSDから直接読み取る
  4. SSD容量が上限に達するとLRUでエビクトされる

無効化されるタイミング

  • テーブルに対してOPTIMIZE(ファイルのコンパクション)が実行された
  • VACUUMが実行されて古いファイルが削除された
  • INSERT/MERGE等でDeltaログに新しいバージョンが追加された
  • Warehouseが停止・再起動された

Materialized View の詳細

Materialized Viewは事前にクエリ結果を計算してDeltaテーブルとして保存する仕組みです。 Result CacheやDisk CacheがWarehouseのライフサイクルに依存するのに対し、 Materialized Viewはクラウドストレージに永続化されるため、Warehouseの停止・再起動に影響されません。

-- Materialized Viewの作成
CREATE MATERIALIZED VIEW sales_summary AS
SELECT
  region,
  product_category,
  DATE_TRUNC('month', order_date) AS month,
  COUNT(*) AS order_count,
  SUM(amount) AS total_amount
FROM catalog.schema.orders
GROUP BY region, product_category, DATE_TRUNC('month', order_date);

-- 手動リフレッシュ
REFRESH MATERIALIZED VIEW sales_summary;

-- 自動リフレッシュのスケジュール設定
ALTER MATERIALIZED VIEW sales_summary
SET TBLPROPERTIES (
  'pipelines.autoOptimize.managed' = 'true'
);

Result CacheとMaterialized Viewの使い分け

  • 同じクエリが頻繁に繰り返される → Result Cacheで十分(設定不要)
  • クエリパターンは異なるが同じ集計結果が必要 → Materialized View
  • 基テーブルが頻繁に更新され、最新結果が必要 → Result Cache(データ変更で自動無効化)
  • 基テーブルの更新頻度が低く、重い集計を事前計算したい → Materialized View

キャッシュウォームアップ戦略

Warehouseを停止・再起動するとDisk CacheとResult Cacheの両方が失われます。 朝のダッシュボードアクセスが集中する時間帯に「初回だけ遅い」問題を回避するための戦略です。

戦略方法効果
Auto Stop時間の延長Auto Stopを30分以上に設定短期間のアイドルでWarehouseが停止しない→キャッシュ保持
スケジュールクエリによるウォームアップ朝の業務開始前に主要クエリを自動実行Disk CacheとResult Cacheが事前に温まる
Materialized Viewの活用重い集計をMaterialized Viewに事前計算Warehouse停止に依存しない永続的な高速化
ダッシュボードのスケジュールリフレッシュ業務開始の30分前にリフレッシュをスケジュールResult Cacheが温まった状態でユーザーがアクセス

コスト最適化のポイント

  • Auto Stopの延長はキャッシュに有利だが、アイドルDBUが発生する → ワークロードパターンに応じて最適値を決定
  • 複数の小型Warehouseに分散するとキャッシュが分断される → 可能な限り同一Warehouseに統合
  • OPTIMIZEのスケジュールはダッシュボードの利用時間帯を避ける → 深夜にOPTIMIZE実行後、朝にウォームアップクエリ
  • Materialized Viewのリフレッシュコストとクエリ高速化の効果を比較 → リフレッシュ頻度は基テーブルの更新頻度に合わせる

試験で問われるポイント

  • 「テーブルにINSERTした後、同じSELECTが遅くなった理由」→ Result Cacheが無効化されたため
  • 「Warehouse再起動後にクエリが遅い理由」→ Disk CacheとResult Cacheの両方が消失したため
  • 「OPTIMIZEを実行した後、一時的にクエリが遅くなる原因」→ Disk Cacheが無効化される(ファイルが再構成されるため)
  • 「Warehouseの停止に関係なく高速な集計結果を提供する方法」→ Materialized View
  • 「Result CacheとDisk Cacheの違い」→ Result Cacheは結果セットの再利用、Disk CacheはデータファイルのSSD保持

問題で確認

Data Analyst Associate

問題 1

あるBIチームが毎朝9:00にダッシュボードを確認する。SQL Warehouseは夜間にAuto Stop(10分設定)で停止している。朝のダッシュボード表示が「初回だけ非常に遅い」と報告された。Warehouseのサイズやクエリ自体は適切である。最も効果的な改善策はどれか。

  1. Warehouseのサイズを1段階アップして処理能力を上げる
  2. ダッシュボードのスケジュールリフレッシュを8:30に設定し、Warehouseの起動とキャッシュのウォームアップを業務開始前に完了させる
  3. すべてのテーブルにZ-ORDERを適用してスキャン効率を上げる
  4. Result Cacheの有効期限を48時間に延長する

正解: B

夜間の停止でDisk CacheとResult Cacheの両方が消失しているのが原因です。スケジュールリフレッシュを業務開始前に設定すると、Warehouseの起動→クエリ実行→キャッシュ生成が事前に完了し、9:00の時点ではキャッシュヒットします。サイズアップは初回のI/Oコストを根本解決しません。Z-ORDERはフィルタ効率改善で別の最適化です。Result Cacheの有効期限はユーザーが変更できません。

よくある質問

Result Cacheを明示的にクリアする方法はありますか?

ユーザーが手動でResult Cacheをクリアするコマンドは存在しません。Result Cacheはテーブルデータが更新された時点で自動的に無効化されます。また、Warehouseの再起動でもクリアされます。テスト目的でキャッシュを回避したい場合は、クエリテキストをわずかに変更する(コメント追加など)か、Warehouseを再起動する方法が実務で使われます。

Materialized ViewはSQL Warehouse以外でも使えますか?

Materialized ViewのCREATEとREFRESHはSQL WarehouseまたはDatabricksクラスタ(DBR 14.2以降)で実行可能です。ただし、Materialized Viewの自動リフレッシュ機能はSQL WarehouseまたはDLT(Delta Live Tables)パイプラインで動作します。読み取り(SELECT)は通常のクラスタからも可能です。

Disk Cacheの容量が不足するとどうなりますか?

Disk CacheはLRU(Least Recently Used)方式で管理されます。SSD容量が一杯になると、最も古いキャッシュエントリが自動的にエビクト(追い出し)されます。頻繁にアクセスされるテーブルのキャッシュは保持され、低頻度のテーブルが優先的に追い出されるため、通常は特別な対処は不要です。キャッシュ容量を増やしたい場合はWarehouseのサイズを上げることでSSD容量も増加します。

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

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

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

NicheeLab編集部

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


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

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

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.