第1章 Snowflake AI Data Cloudの特徴とアーキテクチャ / 想定学習時間:30〜40分 / 最終確認:2026年8月

1-5. 仮想ウェアハウス

🎯 この節の学習目標

1. サイズとクレジット消費:1段階上がるごとに倍

仮想ウェアハウスのサイズは XS(X-Small)から 6XL まであり、1段階上がるごとにクレジット消費(クレジット/時)が倍になります。同時に、クラスタ内の計算資源も倍になるため、多くのクエリでは処理性能も向上します。

サイズXSSMLXL2XL3XL4XL6XL
クレジット/時1248163264128512

サイズの変更(ALTER WAREHOUSE)は即時に反映されます。ただし、実行中のクエリは元のサイズのまま完了し、新しいサイズはキュー(待機)中のクエリと以降の新規クエリから適用されます。

💡 具体例:ウェアハウスの作成とサイズ変更

-- ウェアハウスの作成:自動停止・自動再開を設定
CREATE WAREHOUSE etl_wh
  WAREHOUSE_SIZE = 'MEDIUM'
  AUTO_SUSPEND = 60            -- 60秒アイドルで自動停止
  AUTO_RESUME = TRUE           -- クエリが来たら自動再開
  INITIALLY_SUSPENDED = TRUE;  -- 作成直後は停止状態で待機

-- サイズ変更は即時(実行中クエリは影響なし、キュー中から新サイズ)
ALTER WAREHOUSE etl_wh SET WAREHOUSE_SIZE = 'LARGE';

INITIALLY_SUSPENDED = TRUE を付けると、作成した瞬間からクレジットを消費することなく、最初のクエリが来るまで停止状態で待機させられます。

2. AUTO_SUSPEND / AUTO_RESUME と課金

1-2 で学んだとおり、ウェアハウスは起動している間、稼働時間に応じて課金(秒課金・起動ごとに最低60秒)され、停止中は課金されません。コスト管理の基本は次の2つのパラメータです。

パラメータ働き
AUTO_SUSPEND指定した秒数の間クエリが実行されない(アイドル)と、ウェアハウスを自動停止する
AUTO_RESUME停止中のウェアハウスに新しいクエリが届いたとき、自動的に再開する
INITIALLY_SUSPENDED作成直後のウェアハウスを起動せず、停止状態から始める

📝 試験のポイント

「使っていない時間の課金を防ぐには AUTO_SUSPEND、ユーザーの手間なく再び使えるようにするには AUTO_RESUME」という組み合わせが基本です。ただし、起動のたびに最低60秒課金が発生するため、AUTO_SUSPEND を極端に短くして起動・停止を頻発させると、かえって割高になったり、後述のキャッシュが失われて性能が落ちたりする点も問われることがあります。

3. スケールアップ vs スケールアウト:最重要の判断軸

ウェアハウスの性能対策には2つの方向があり、どちらを選ぶべきかの判断が、この節で最も問われやすい論点です。

スケールアップスケールアウト
操作ウェアハウスのサイズを上げる(M → L など)マルチクラスタウェアハウスでクラスタ数を増やす
解決する問題個々のクエリが複雑・重くて遅い(大量データの結合・集計など)同時実行クエリが多くてキュー(待ち行列)が発生する
効かない問題同時実行数の不足(1つのクエリが速くなっても待ち行列は残る)単発の重いクエリ(クラスタを増やしても1クエリは1クラスタで実行される)
性能の問題が起きたクエリが遅い / 待たされる
原因はどちらか?
単発のクエリが複雑で遅い→ スケールアップ(サイズを上げる)
同時実行が多くキューが発生→ スケールアウト(マルチクラスタ)

図:性能問題の切り分け。「1つのクエリの重さ」ならサイズアップ、「本数の多さ」ならマルチクラスタ

📝 試験のポイント

シナリオ問題では「朝の時間帯にユーザーが集中し、クエリがキューに溜まる」→ スケールアウト(マルチクラスタ)、「月次の大規模集計クエリが1本だけ遅い」→ スケールアップ(サイズ変更)が定石です。「同時実行」「キュー」「多数のユーザー」という言葉が出たらスケールアウト、「複雑なクエリ」「大量データの処理」ならスケールアップ、とキーワードで判断できるようにしておきましょう。

4. マルチクラスタウェアハウス(Enterprise 以上)

マルチクラスタウェアハウスは、同じサイズのクラスタを複数持てるウェアハウスで、Enterprise エディション以上で利用できます(1-2参照)。MIN_CLUSTER_COUNT / MAX_CLUSTER_COUNT の設定によって、2つのモードに分かれます。

モード設定動作
Auto-scale モードMIN < MAX(例:MIN=1, MAX=4)負荷に応じてクラスタ数を MIN〜MAX の範囲で自動増減する
Maximized モードMIN = MAX(例:MIN=3, MAX=3)起動中は常に MAX 数のクラスタを維持する。常時高負荷が見込まれる場合向け

Auto-scale モードでは、クラスタを追加する積極性をスケーリングポリシーで制御します。

ポリシークラスタ追加の条件特徴
Standard(既定)クエリのキューイングが発生すると即座にクラスタを追加する待ち時間の最小化を優先。性能重視
Economy追加したクラスタを6分以上稼働させるだけの負荷が見込まれる場合のみ追加するクラスタの起動を抑えてクレジットを節約。コスト優先(キューは発生しやすくなる)

💡 具体例:マルチクラスタウェアハウスの作成

-- Auto-scaleモード:1〜4クラスタで自動増減、コスト優先ポリシー
CREATE WAREHOUSE bi_wh
  WAREHOUSE_SIZE = 'MEDIUM'
  MIN_CLUSTER_COUNT = 1
  MAX_CLUSTER_COUNT = 4
  SCALING_POLICY = 'ECONOMY'
  AUTO_SUSPEND = 300
  AUTO_RESUME = TRUE;

-- Maximizedモード:常に3クラスタを維持(MIN = MAX)
ALTER WAREHOUSE bi_wh SET
  MIN_CLUSTER_COUNT = 3
  MAX_CLUSTER_COUNT = 3;

5. キューイングとタイムアウト

ウェアハウスの処理能力を超えるクエリが届くと、あふれた分はキュー(待ち行列)に入り、リソースが空くのを待ちます。キューの多発は「そのウェアハウスに対して同時実行が多すぎる」というサインであり、マルチクラスタ化(スケールアウト)や、ワークロードを別ウェアハウスへ分離する検討材料になります。

また、クエリの実行時間を制御するパラメータとして STATEMENT_TIMEOUT_IN_SECONDS(この秒数を超えたクエリを打ち切る)や STATEMENT_QUEUED_TIMEOUT_IN_SECONDS(キューでの待機がこの秒数を超えたクエリを取り消す)があります。暴走クエリによるクレジットの浪費を防ぐ仕組みとして押さえておきましょう。

✅ この節のまとめ

練習問題

問1. Mediumサイズ(4クレジット/時)のウェアハウスを2サイズ上げて X-Large にした場合、クレジット/時はいくつになるか。

  1. 6
  2. 8
  3. 16
  4. 32
解答と解説を見る

正解:C

クレジット消費は1段階ごとに倍になるため、M(4)→ L(8)→ XL(16)で、X-Large は16クレジット/時です。Aのように段階ごとに一定量を足す(線形に増える)のではなく、倍々で増える点がポイントです。Bは1段階(L)の値、Dは3段階(2XL)の値です。XS=1 を起点に「XS, S, M, L, XL, … = 1, 2, 4, 8, 16, …」と並べられるようにしておきましょう。

問2. 実行中のクエリがあるウェアハウスのサイズを Large に変更した。このときの動作として正しいものはどれか。

  1. 実行中のクエリは中断され、新サイズで最初から再実行される
  2. サイズ変更は実行中のクエリがすべて完了するまで保留される
  3. サイズ変更は即時に有効になるが、実行中のクエリは影響を受けず、キュー中および新規のクエリから新サイズで実行される
  4. サイズ変更にはウェアハウスの削除と再作成が必要である
解答と解説を見る

正解:C

サイズ変更は即時に反映されますが、すでに実行中のクエリは元のリソースのまま完了し、新しいサイズはキューで待機中のクエリと以降の新規クエリに適用されます。Aのような強制中断は起きません。Bは「変更自体が保留される」という点が誤りです。Dは誤りで、ALTER WAREHOUSE ... SET WAREHOUSE_SIZE で動的に変更できます。

問3. 業務時間中に多数のアナリストが同時にクエリを実行し、キューイングが多発している。個々のクエリは軽量である。最も適切な対策はどれか。

  1. ウェアハウスのサイズを XS から 4XL に上げる(スケールアップ)
  2. マルチクラスタウェアハウスを構成し、負荷に応じてクラスタ数を増やす(スケールアウト)
  3. AUTO_SUSPEND を1秒に設定する
  4. STATEMENT_TIMEOUT_IN_SECONDS を短くしてクエリを打ち切る
解答と解説を見る

正解:B

「同時実行が多い・キューが発生・個々のクエリは軽い」はスケールアウト(マルチクラスタ)の典型シナリオです。Aのスケールアップは個々の複雑なクエリを速くする対策で、同時実行数の問題の直接の解決策にはなりません。Cはコスト管理の設定であり、むしろ起動・停止の頻発を招きます。Dはクエリを打ち切るだけで、ユーザーの業務を妨げてしまいます。

問4. マルチクラスタウェアハウスに関する説明として正しいものはどれか(2つ選べ)。

  1. MIN_CLUSTER_COUNT = MAX_CLUSTER_COUNT と設定すると Maximized モードになり、起動中は常にその数のクラスタを維持する
  2. Economy ポリシーは、キューイングが発生すると即座にクラスタを追加する
  3. Standard ポリシーは、キューイングが発生すると即座にクラスタを追加し、待ち時間の最小化を優先する
  4. マルチクラスタウェアハウスは Standard エディションでも利用できる
解答と解説を見る

正解:A・C

MIN = MAX なら Maximized モード(常に固定数のクラスタ)、MIN < MAX なら Auto-scale モードです。また、Standard ポリシーはキュー発生で即クラスタを追加する性能重視の既定ポリシーです。Bは Standard と Economy の説明が逆で、Economy は「6分以上稼働させるだけの負荷が見込まれる場合のみ追加する」コスト優先のポリシーです。Dは誤りで、マルチクラスタウェアハウスは Enterprise エディション以上の機能です(エディションについては 1-2 参照)。