Multi-cluster Warehouseは、Snowflakeのウェアハウスが複数のコンピュートクラスタを動的に起動・停止して 同時実行性(コンカレンシー)をスケールアウトする機能です。 個々のクエリの速度はウェアハウスサイズ(スケールアップ)で制御し、 同時に処理できるクエリの数はMulti-cluster(スケールアウト)で制御するという使い分けが重要です。Enterprise Edition以上で利用可能です。
通常のウェアハウスは1つのクラスタで構成されます。 Multi-cluster WarehouseではMIN_CLUSTER_COUNTとMAX_CLUSTER_COUNTを設定し、 同時実行クエリがクラスタの処理能力を超えるとSnowflakeが自動的に追加クラスタを起動します。 負荷が減少すると不要なクラスタは自動停止されます。
同時実行クエリが増加した場合の動作:
[クラスタ1] ■■■■ 4クエリ実行中
↓ キューイング検知
[クラスタ1] ■■■■ [クラスタ2] ■■ 追加起動
↓ さらに増加
[クラスタ1] ■■■■ [クラスタ2] ■■■■ [クラスタ3] ■■ 追加起動
負荷が減少した場合:
[クラスタ1] ■■ [クラスタ2] 停止 [クラスタ3] 停止-- 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 | Economy |
|---|---|---|
| クラスタ追加の条件 | キューイング検知後すぐに起動 | キューイングが約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;Performance Optimization
問題 1
Enterprise Editionで、500名のBIアナリストが同時にダッシュボードを使用する環境がある。ピーク時にクエリのキューイングが頻発し、ダッシュボードの応答が遅くなるという報告がある。ただし個々のクエリの実行時間は1〜3秒と十分速い。最も適切な対策はどれか。
正解: 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の分析に基づいて適切な対策を選択する必要があります。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...