はじめに:同時実行クエリが詰まる問題、ありませんか?
こんにちは!朝9時、業務が始まった瞬間に多くのユーザーが一斉にBIツールでクエリを投げて、ダッシュボードがなかなか開かない…そんな経験はありませんか?Snowflakeでは1台のウェアハウスで同時に処理できるクエリ数に限りがあり、それを超えると「キュー(順番待ち)」が発生してしまいます。
そんなときに頼りになるのが、今回紹介する マルチクラスタウェアハウス(Multi-cluster Warehouse) です。ウェアハウスを自動で複数台に増やして、同時実行クエリをサクサクさばいてくれる便利な機能ですよ。

マルチクラスタウェアハウスとは?
通常のウェアハウスは「サイズ(XS, S, M…)」を大きくすることで 1つのクエリを速くする(スケールアップ) ことができます。一方マルチクラスタウェアハウスは、同じサイズのクラスタを複数並べて、たくさんのクエリを同時にさばく(スケールアウト) ための仕組みです。
たとえばサイズMのクラスタを最大5つまで自動で増やせる設定にしておけば、混雑時には自動で2台目、3台目…と立ち上がり、空いてきたら自動で停止して節約してくれます。
2つのモード
- 最大化モード(Maximized):
MIN_CLUSTER_COUNTとMAX_CLUSTER_COUNTを同じ値に設定。常に指定数のクラスタが起動。一定の高負荷が続くワークロード向け。 - 自動スケールモード(Auto-scale): 最小と最大に差をつける。負荷に応じて自動で増減し、コスト効率が良い。一般的にはこちらがおすすめ。
作成・変更してみよう(SQL例)
Snowsightのワークシートから、以下のように作成できます。Enterprise Edition以上で利用可能なので注意してくださいね。
-- 自動スケールするマルチクラスタウェアハウスを作成
CREATE OR REPLACE WAREHOUSE BI_WH
WITH WAREHOUSE_SIZE = 'MEDIUM'
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 5
SCALING_POLICY = 'STANDARD'
AUTO_SUSPEND = 300
AUTO_RESUME = TRUE;
-- 既存ウェアハウスを後から変更
ALTER WAREHOUSE BI_WH SET
MIN_CLUSTER_COUNT = 2
MAX_CLUSTER_COUNT = 8;
SCALING_POLICYの選び方
- STANDARD(標準): クエリのキューを検知すると、すぐに新しいクラスタを起動。ユーザー体験を最優先したいときに。
- ECONOMY(節約): 既存クラスタが今後6分間で処理しきれないと判断したときだけ起動。コストを優先したいバッチ用に。

ユースケースと注意点
マルチクラスタが活きるのは BIダッシュボードや社内分析ツール のように、大勢が同時にクエリを投げる場面です。逆に「重い1本のクエリを速くしたい」場合はクラスタ数を増やしても効果がなく、サイズを大きくするのが正解です。
また、課金は起動しているクラスタごとに発生します。MAXを大きくしすぎるとコストが膨らむ可能性があるので、まずはMAX=2〜3から始めて様子を見るのがおすすめです。同時実行性能を最大限引き出すには、Snowflakeのキャッシュの仕組みを理解してウェアハウスキャッシュを活用したり、クエリプロファイルでボトルネックを特定しておくとさらに効果的ですよ。
まとめ
マルチクラスタウェアハウスは「同時実行クエリ数を増やす」ための切り札です。MIN_CLUSTER_COUNT / MAX_CLUSTER_COUNT / SCALING_POLICY の3つを覚えれば、コストとレスポンスのバランスを自由に調整できます。混雑する時間帯のダッシュボードがもたつくな…と感じたら、ぜひ試してみてください!
参考リンク
関連記事
- Snowflakeの3つのキャッシュの違い|リザルト・ウェアハウス・メタデータをやさしく解説 – ウェアハウスキャッシュと組み合わせて同時実行性能をさらに引き上げる。
- Snowflakeクエリプロファイル入門|遅いクエリのボトルネックを見抜く方法 – クラスタを増やす前にまずクエリ自体を見直したいときに。
- Snowflakeクラスタリングキー入門|大規模テーブルを高速化する仕組み – 大規模テーブルのプルーニングを効かせて1クエリあたりの負荷を軽減。
- SEARCH OPTIMIZATIONで爆速化!Snowflakeイテレーティブテーブル活用術 – ポイント検索系の高速化でウェアハウス負荷を下げる選択肢。

