Databricks

Databricks SQL Warehouseチューニング: 同時実行・キャッシュ・サイズ選定

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

SQL Warehouseは「サイズを上げれば速くなる」と思われがちですが、実際にはサイズ・クラスタ数・キャッシュ設定の 3つのレバーを理解しないとコストが膨らむだけで性能が出ません。 この記事では、サイズ選定の考え方から同時実行制御、キャッシュ層の動作、チューニング手順までを体系的に整理します。

SQL Warehouseサイズ選定表

SQL Warehouseのサイズはクラスタのコンピュートリソース量を決定します。 サイズが大きいほど1クエリあたりの処理能力が上がりますが、DBUコストも比例して増加します。

サイズクラスタあたりDBU/h適用シナリオ同時実行目安
2X-Small2ダッシュボードの軽量クエリ、開発・テスト用途2〜4
X-Small4小規模チームの日常クエリ、データ検証4〜8
Small8中規模テーブル(〜数百GB)の集計、レポート8〜12
Medium16大規模テーブルの結合、ETL後の検証10〜16
Large32TBクラスのフルスキャン、複雑なウィンドウ関数12〜20
X-Large64マルチTBの重い分析、広範なJOIN16〜24
2X-Large128全社レベルの大規模集計、BIツール連携20〜30
3X-Large256エクストリームワークロード24〜36
4X-Large512最大規模のリアルタイム分析30〜48

クラスタ数を増やすとスケールアウトで同時実行数を伸ばせますが、各クラスタが個別のDisk Cacheを持つため、 キャッシュヒット率が下がる可能性があります。サイズアップ(スケールアップ)は1クエリの処理能力を上げ、 クラスタ数増加(スケールアウト)は並列クエリ数を上げる、と使い分けます。

同時実行とQuery Queuing対策

SQL Warehouseはリソースが不足するとクエリをキュー(待機列)に入れます。 ダッシュボードのロード時に多数のクエリが同時発行されるとQueuing Timeが支配的になり、 ユーザー体験が大幅に悪化します。

Queuing が発生する典型パターン

  • ダッシュボードの自動リフレッシュで数十〜数百クエリが同時発行される
  • BIツール(Tableau / Power BI)が並列でクエリを投げる
  • ETL完了直後に複数ユーザーがアドホッククエリを実行する

対策の優先順位

  1. スケーリングポリシーを「Optimized」にして需要に応じたクラスタ自動増減を有効にする
  2. ウォームアップ時間を考慮し、Min Clustersを1以上に設定してコールドスタートを回避する
  3. Max Clustersを適切に設定して上限コストを制御する
  4. ダッシュボードのリフレッシュ間隔を適切に設定し、不要な同時実行を減らす
  5. ワークロードの特性に応じてWarehouseを分割する(重いアドホック用 / 軽いダッシュボード用)

Result Cache(結果キャッシュ)

Result Cacheは、まったく同じSQLテキストが再実行されたときに、前回の結果セットをそのまま返す仕組みです。 クエリのコンパイルやデータスキャンを完全にスキップするため、最も高速なキャッシュ層です。

キャッシュ有効条件

  • SQLテキストが完全一致する(ホワイトスペースの違いも不一致扱い)
  • 基になるテーブルのデータが変更されていない(Delta Logで検知)
  • CURRENT_TIMESTAMP()やrand()などの非決定性関数を含まない
  • キャッシュの有効期限(デフォルト24時間)以内である

ダッシュボードのように同じクエリが繰り返し実行されるワークロードでは、Result Cacheが非常に効果的です。 逆に、WHERE句のパラメータが毎回異なるアドホッククエリではヒットしません。

Disk Cache(SSDキャッシュ)

Disk Cacheは、リモートストレージ(S3/ADLS/GCS)から読み込んだデータをWarehouseノードのローカルSSDに キャッシュする仕組みです。2回目以降のクエリでは、ネットワーク越しのI/Oを回避してローカルSSDから データを読み取るため、スキャン速度が大幅に向上します。

  • キャッシュ単位はDeltaテーブルのParquetファイル単位
  • テーブルに対してOPTIMIZEやVACUUMを実行するとファイルが変わるためキャッシュが無効化される
  • Warehouseが停止・再起動するとDisk Cacheは失われる
  • Auto Stopの時間を長めに設定するとキャッシュの恩恵を受けやすいが、アイドルコストとのトレードオフ

Predictive I/O

Predictive I/Oは、Databricksが過去のクエリパターンを学習し、次に必要になりそうなデータを先読みする仕組みです。 テーブル統計情報とクエリ履歴を活用して、フィルタ条件に合致するファイルを事前にフェッチします。

  • Pro / Serverless Warehouseで自動的に有効
  • 特に大規模テーブルに対する範囲フィルタ(日付範囲など)で効果が顕著
  • Disk Cacheと組み合わさると、初回クエリでもキャッシュ済みに近い速度が出る場合がある

IWM(Intelligent Workload Management)

IWMはPro / Serverless Warehouseで使える機能で、Warehouse内のリソースをクエリ単位で動的に配分します。 従来のClassic Warehouseでは固定スロットにクエリを割り当てていましたが、IWMでは小さなクエリに少ないリソースを、 大きなクエリに多くのリソースを自動配分します。

観点Classic WarehousePro / Serverless(IWM有効)
リソース配分固定スロットクエリサイズに応じた動的配分
小クエリの扱い大クエリと同じスロットを消費少ないリソースで即座に完了
Queuing発生スロット満杯で頻発リソース効率化で低減
設定手動(同時実行数の設定)自動(管理者の設定不要)

チューニング手順 5ステップ

以下は実務でSQL Warehouseのパフォーマンスを改善するための推奨手順です。

ステップ1: ワークロードの分類

まずクエリを「ダッシュボード用(繰り返し同じクエリ)」「アドホック(毎回異なるクエリ)」 「ETL検証(重い結合・集計)」に分類します。特性が大きく異なるワークロードは別のWarehouseに分離します。

ステップ2: 適正サイズの初期選定

Query Profileでスキャンデータ量と実行時間を確認し、上記のサイズ選定表を目安に初期サイズを決定します。 迷ったら小さめから始めて段階的にサイズアップするのが安全です。

ステップ3: スケーリング設定

Scaling PolicyをOptimizedに設定し、Min Clustersを1(コールドスタート回避)、 Max Clustersをピーク時の同時実行数に基づいて設定します。

ステップ4: キャッシュ効率の最大化

Auto Stop時間を10分程度に設定してDisk Cacheの保持時間を確保しつつ、アイドルコストとのバランスを取ります。 ダッシュボード用WarehouseではResult Cacheのヒット率を監視し、非決定性関数の排除やクエリテキストの統一を検討します。

ステップ5: 監視と継続改善

Query HistoryでQueuing Time、Execution Time、Rows Scannedを定期的に確認します。 Queuing Timeが全体の10%を超える場合はクラスタ数の追加、Execution Timeが長い場合はサイズアップ、 Rows Scannedが過大な場合はクエリ最適化(パーティショニング、Z-ORDER、フィルタ追加)を検討します。

試験で問われるポイント

  • 「Result CacheとDisk Cacheの違いは何か」→ Result Cacheは結果セットの再利用、Disk CacheはデータファイルのSSDキャッシュ
  • 「Queuing Timeが長い場合の対処法」→ クラスタ数の追加(スケールアウト)が最優先
  • 「テーブルにOPTIMIZEを実行した後、クエリが遅くなった原因」→ Disk Cacheが無効化されたため
  • 「Warehouseのサイズを上げるべきか、クラスタ数を増やすべきか」→ 1クエリが遅い場合はサイズアップ、同時実行で待ちが出る場合はクラスタ追加

問題で確認

Data Analyst Associate

問題 1

ある企業のDatabricks SQL Warehouseで、ダッシュボードの表示に30秒以上かかるとユーザーからクレームが入った。Query Historyを確認したところ、個々のクエリの実行時間は2〜3秒だが、Queuing Timeが25秒を超えている。最も効果的な改善策はどれか。

  1. Warehouseのサイズを2段階アップする(例: Small → Large)
  2. Max Clustersを増やしてスケールアウトを可能にする
  3. すべてのクエリにCACHE SELECTを追加する
  4. Auto Stop時間を60分に延長してDisk Cacheを温存する

正解: B

クエリ自体の実行時間は2〜3秒と短く、ボトルネックはQueuing Time(リソース待ち)です。サイズアップは1クエリの処理能力を上げますがキュー解消には効果が薄く、Max Clustersを増やしてスケールアウトすることで並列処理能力が上がり、Queuing Timeが短縮されます。CACHE SELECTという構文は存在せず、Auto Stop延長はDisk Cache保持には有効ですがQueuing Timeとは無関係です。

よくある質問

SQL Warehouseのサイズを後から変更するとクエリに影響しますか?

サイズ変更はWarehouseの再起動を伴います。実行中のクエリがある場合はキューに入り、再起動完了後に再実行されます。ダウンタイムを避けたい場合は、ピーク前にサイズ変更を完了させるか、別のWarehouseにトラフィックを逃がす設計が実務では使われます。

Serverless SQL WarehouseとClassic SQL Warehouseのキャッシュ動作に違いはありますか?

Result Cache(結果キャッシュ)はどちらでも同じ動作です。Disk Cache(SSDキャッシュ)はClassicではローカルSSDに保持されますが、Serverlessではマネージドなキャッシュ層が自動管理され、ユーザーがSSDサイズを意識する必要はありません。Predictive I/Oの恩恵はServerlessの方が受けやすい傾向があります。

IWM(Intelligent Workload Management)とQuery Queuingの関係は?

IWMはWarehouse内のリソースをクエリの優先度やサイズに応じて動的に配分する仕組みで、Pro/Serverless Warehouseで利用できます。Query Queuingはリソースが不足したときにクエリを待機させる動作です。IWMが有効だとリソース配分が最適化されるため、キューイング発生頻度は下がりますが、極端な高負荷では依然としてキューイングは発生します。

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

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.