Snowflake

Multi-cluster Warehouse実践

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

Multi-cluster Warehouseは、Snowflakeのウェアハウスが複数のコンピュートクラスタを動的に起動・停止して 同時実行性(コンカレンシー)をスケールアウトする機能です。 個々のクエリの速度はウェアハウスサイズ(スケールアップ)で制御し、 同時に処理できるクエリの数はMulti-cluster(スケールアウト)で制御するという使い分けが重要です。Enterprise Edition以上で利用可能です。

動作原理

通常のウェアハウスは1つのクラスタで構成されます。 Multi-cluster WarehouseではMIN_CLUSTER_COUNTMAX_CLUSTER_COUNTを設定し、 同時実行クエリがクラスタの処理能力を超えるとSnowflakeが自動的に追加クラスタを起動します。 負荷が減少すると不要なクラスタは自動停止されます。

同時実行クエリが増加した場合の動作:

[クラスタ1] ■■■■ 4クエリ実行中
                    ↓ キューイング検知
[クラスタ1] ■■■■   [クラスタ2] ■■ 追加起動
                    ↓ さらに増加
[クラスタ1] ■■■■   [クラスタ2] ■■■■   [クラスタ3] ■■ 追加起動

負荷が減少した場合:
[クラスタ1] ■■     [クラスタ2] 停止     [クラスタ3] 停止

CREATE WAREHOUSE構文

-- BIダッシュボード向け:レスポンス重視
CREATE WAREHOUSE bi_dashboard_wh
  WAREHOUSE_SIZE = 'MEDIUM'
  MIN_CLUSTER_COUNT = 1
  MAX_CLUSTER_COUNT = 6
  SCALING_POLICY = 'STANDARD'
  AUTO_SUSPEND = 300
  AUTO_RESUME = TRUE
  INITIALLY_SUSPENDED = TRUE;

-- バッチETL向け:コスト重視
CREATE WAREHOUSE batch_etl_wh
  WAREHOUSE_SIZE = 'LARGE'
  MIN_CLUSTER_COUNT = 1
  MAX_CLUSTER_COUNT = 3
  SCALING_POLICY = 'ECONOMY'
  AUTO_SUSPEND = 60
  AUTO_RESUME = TRUE;

-- 常時稼働(MIN = MAX で固定クラスタ数)
CREATE WAREHOUSE always_on_wh
  WAREHOUSE_SIZE = 'SMALL'
  MIN_CLUSTER_COUNT = 3
  MAX_CLUSTER_COUNT = 3
  AUTO_SUSPEND = 0
  AUTO_RESUME = TRUE;

Standard vs Economy 比較表

比較項目StandardEconomy
クラスタ追加の条件キューイング検知後すぐに起動キューイングが約6分以上継続した場合に起動
クラスタ削減の条件2〜3回のチェック連続で負荷低下を確認後に停止6回のチェック連続で負荷低下を確認後に停止
レスポンスタイム短い(即座にスケール)長め(スケールまで待機時間あり)
コスト効率やや高い(積極的にクラスタ追加)高い(必要最小限のクラスタ追加)
推奨ユースケースBIダッシュボード、対話型分析バッチ処理、スケジュールジョブ
SLA重視度高い(ユーザー体感重視)中(多少のキューイング許容)

キューイングの原因と対策

キューイングは、ウェアハウスの全クラスタがビジー状態のときに新しいクエリが待機キューに入る現象です。 ユーザーのレスポンスタイム悪化に直結するため、以下の手順で原因を特定し対処します。

-- キューイングが発生しているクエリの確認
SELECT
  query_id,
  warehouse_name,
  user_name,
  queued_overload_time,
  total_elapsed_time,
  execution_time,
  query_text
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE queued_overload_time > 0
  AND start_time >= DATEADD(HOUR, -24, CURRENT_TIMESTAMP())
ORDER BY queued_overload_time DESC
LIMIT 20;

-- ウェアハウスの負荷パターンを時間帯別に分析
SELECT
  DATE_TRUNC('HOUR', start_time) AS hour_slot,
  warehouse_name,
  COUNT(*) AS query_count,
  AVG(queued_overload_time) / 1000 AS avg_queue_sec,
  MAX(queued_overload_time) / 1000 AS max_queue_sec
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE start_time >= DATEADD(DAY, -7, CURRENT_TIMESTAMP())
  AND warehouse_name = 'BI_DASHBOARD_WH'
GROUP BY 1, 2
ORDER BY hour_slot;

キューイング対策チェックリスト

対策効果コスト影響
MAX_CLUSTER_COUNTを増やす同時実行キャパシティ増加ピーク時のクレジット増加
SCALING_POLICYをSTANDARDに変更クラスタ追加の即応性向上やや増加
ワークロード分離(専用WH)クエリ間の干渉を排除ウェアハウス数分のコスト
Query Acceleration Service大量スキャンクエリの高速化Serverless Credit
クエリの最適化個々のクエリの実行時間短縮なし(開発工数のみ)

運用時のパラメータ変更

-- クラスタ数の変更(即時反映)
ALTER WAREHOUSE bi_dashboard_wh SET
  MIN_CLUSTER_COUNT = 2
  MAX_CLUSTER_COUNT = 10;

-- スケーリングポリシーの変更
ALTER WAREHOUSE bi_dashboard_wh SET
  SCALING_POLICY = 'ECONOMY';

-- ウェアハウスサイズの変更(次のクエリ実行時に反映)
ALTER WAREHOUSE bi_dashboard_wh SET
  WAREHOUSE_SIZE = 'LARGE';

モニタリング

-- ウェアハウスの負荷履歴(クラスタ稼働状況)
SELECT
  start_time,
  end_time,
  warehouse_name,
  avg_running,
  avg_queued_load,
  avg_queued_provisioning,
  avg_blocked
FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_LOAD_HISTORY
WHERE start_time >= DATEADD(DAY, -7, CURRENT_TIMESTAMP())
  AND warehouse_name = 'BI_DASHBOARD_WH'
ORDER BY start_time DESC;

-- クレジット消費の推移
SELECT
  start_time::DATE AS usage_date,
  warehouse_name,
  SUM(credits_used) AS total_credits,
  SUM(credits_used_compute) AS compute_credits,
  SUM(credits_used_cloud_services) AS cloud_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
WHERE start_time >= DATEADD(MONTH, -1, CURRENT_TIMESTAMP())
  AND warehouse_name = 'BI_DASHBOARD_WH'
GROUP BY 1, 2
ORDER BY usage_date DESC;

設計パターン

  • BI層とETL層のウェアハウス分離:インタラクティブクエリ(Standard / 高MAX_CLUSTER_COUNT)とバッチETL(Economy / 大サイズ)を別ウェアハウスにすることで相互干渉を排除する
  • MIN_CLUSTER_COUNT = 1 でコスト最適化:アイドル時に1クラスタだけ稼働させ、AUTO_SUSPENDで完全停止も可能にする
  • 固定クラスタ数(MIN = MAX)で予測可能なコスト:ピーク時のクレジット消費を予測したい場合に有効。ただし負荷変動への柔軟性は失われる
  • Resource Monitorとの併用:MAX_CLUSTER_COUNTを大きく設定しつつ、Resource Monitorでクレジット上限を設定して予算超過を防ぐ

問題で確認

Performance Optimization

問題 1

Enterprise Editionで、500名のBIアナリストが同時にダッシュボードを使用する環境がある。ピーク時にクエリのキューイングが頻発し、ダッシュボードの応答が遅くなるという報告がある。ただし個々のクエリの実行時間は1〜3秒と十分速い。最も適切な対策はどれか。

  1. ウェアハウスサイズをX-SMALLからX-LARGEに拡大する
  2. MAX_CLUSTER_COUNTを増やし、SCALING_POLICYをSTANDARDに設定する
  3. AUTO_SUSPENDを0に設定してウェアハウスを常時稼働にする
  4. Clustering Keysを全テーブルに追加してクエリ性能を向上させる

正解: B

個々のクエリは1〜3秒と十分速く、問題は同時実行性(コンカレンシー)不足によるキューイングです。これはスケールアウトの問題であり、MAX_CLUSTER_COUNTを増やすことで同時に実行できるクエリ数が増え、キューイングが解消されます。SCALING_POLICY = STANDARDにすることでキューイング検知後すぐにクラスタが追加されます。Aのスケールアップは個々のクエリが遅い場合の対策で、今回は該当しません。Cの常時稼働はクラスタ数を増やさない限りキューイングの解決にはなりません。DのClustering Keysはパーティションプルーニングの改善であり、同時実行性の問題とは無関係です。

よくある質問

StandardモードとEconomyモードはどのように使い分けますか?

Standardモードはクエリがキューイングされると即座に追加クラスタを起動するため、レスポンスタイム重視のワークロード(BIダッシュボード、インタラクティブ分析)に適しています。Economyモードはキューイングが一定時間続いた場合にのみクラスタを追加するため、コスト最適化が優先されるバッチ処理やスケジュールジョブに適しています。Snowflakeの公式ドキュメントでは、Economyモードはクラスタ追加の判断に少なくとも6分間のキューイング継続を閾値としています。

MAX_CLUSTER_COUNTを大きく設定するとコストが増えますか?

MAX_CLUSTER_COUNTの値自体はコストに影響しません。実際にクラスタが起動している時間に対してのみクレジットが課金されます。MAX_CLUSTER_COUNT = 10に設定しても、同時実行が少なければ1〜2クラスタしか起動しません。ただし、ピーク時に多数のクラスタが同時起動する可能性があるため、Resource Monitorでクレジット消費の上限を設定してコストの暴走を防ぐことが推奨されます。

Multi-cluster WarehouseとWarehouseサイズの拡大(スケールアップ)はどう違いますか?

Warehouseサイズの拡大(XS→S→M→L)はスケールアップであり、単一クエリの処理速度を向上させます。大量データのスキャンや複雑なJOINなど、個々のクエリが遅い場合に有効です。Multi-cluster Warehouseはスケールアウトであり、同時に実行するクエリの数(同時実行性)を向上させます。個々のクエリは速いが、多数のユーザーが同時アクセスしてキューイングが発生する場合に有効です。両者は異なる問題を解決するため、Query ProfileとQUERY_HISTORYの分析に基づいて適切な対策を選択する必要があります。

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

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.