A Multi-cluster Warehouse is a Snowflake warehouse that dynamically starts and stops multiple compute clusters to scale out concurrency. The mental model is simple: control individual query speed with warehouse size (scale up), and control the number of queries that can run concurrently with Multi-cluster (scale out). The feature requires Enterprise Edition or higher.
A normal warehouse consists of a single cluster. With a Multi-cluster Warehouse, you set MIN_CLUSTER_COUNT and MAX_CLUSTER_COUNT, and Snowflake automatically launches additional clusters when concurrent queries exceed the existing capacity. When load decreases, unused clusters are shut down automatically.
What happens as concurrent queries increase:
[Cluster 1] #### 4 queries running
v queuing detected
[Cluster 1] #### [Cluster 2] ## started
v load increases further
[Cluster 1] #### [Cluster 2] #### [Cluster 3] ## started
When the load falls:
[Cluster 1] ## [Cluster 2] stopped [Cluster 3] stopped-- For BI dashboards: prioritise responsiveness
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;
-- For batch ETL: prioritise cost
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;
-- Always on (MIN = MAX pins the cluster count)
CREATE WAREHOUSE always_on_wh
WAREHOUSE_SIZE = 'SMALL'
MIN_CLUSTER_COUNT = 3
MAX_CLUSTER_COUNT = 3
AUTO_SUSPEND = 0
AUTO_RESUME = TRUE;| Aspect | Standard | Economy |
|---|---|---|
| When clusters are added | Started immediately when queuing is detected | Started only after queuing persists for ~6 minutes |
| When clusters are shut down | Stopped after 2-3 consecutive checks confirm reduced load | Stopped after 6 consecutive checks confirm reduced load |
| Response time | Short (scales immediately) | Longer (waits before scaling) |
| Cost efficiency | Higher (aggressively adds clusters) | Best (adds only the minimum needed) |
| Recommended use cases | BI dashboards, interactive analytics | Batch processing, scheduled jobs |
| SLA sensitivity | High (user-experience focused) | Medium (some queuing acceptable) |
Queuing happens when every cluster in the warehouse is busy and new queries are forced to wait in line. It translates directly into degraded user response times, so use the following steps to identify and fix the root cause.
-- Find queries that are being queued
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;
-- Analyse the warehouse load pattern by hour of day
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;| Action | Effect | Cost impact |
|---|---|---|
| Increase MAX_CLUSTER_COUNT | Adds concurrency capacity | More credits consumed at peak |
| Switch SCALING_POLICY to STANDARD | Faster response when adding clusters | Slight increase |
| Workload isolation (dedicated warehouses) | Eliminates cross-workload interference | Cost scales with number of warehouses |
| Query Acceleration Service | Speeds up large-scan queries | Serverless Credit |
| Query optimization | Shortens individual query runtime | None (developer effort only) |
-- Change the cluster count (takes effect immediately)
ALTER WAREHOUSE bi_dashboard_wh SET
MIN_CLUSTER_COUNT = 2
MAX_CLUSTER_COUNT = 10;
-- Change the scaling policy
ALTER WAREHOUSE bi_dashboard_wh SET
SCALING_POLICY = 'ECONOMY';
-- Change the warehouse size (takes effect on the next query)
ALTER WAREHOUSE bi_dashboard_wh SET
WAREHOUSE_SIZE = 'LARGE';-- Warehouse load history (cluster activity)
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;
-- Credit consumption over time
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
Question 1
On Enterprise Edition, 500 BI analysts use the same dashboards concurrently. At peak times, queries queue frequently and dashboard response is slow. Individual queries, however, complete in 1-3 seconds. Which is the most appropriate remediation?
Correct answer: B
Individual queries already complete in 1-3 seconds, so the issue is insufficient concurrency causing queuing — a scale-out problem. Increasing MAX_CLUSTER_COUNT raises the number of queries that can run in parallel and eliminates queuing. SCALING_POLICY = STANDARD ensures new clusters spin up as soon as queuing is detected. A (scale up) is the fix for slow individual queries, which is not the situation here. C (always on) does not address queuing unless you also raise the cluster count. D (Clustering Keys) improves partition pruning and is unrelated to concurrency issues.
When should I use Standard vs Economy scaling policy?
Standard spins up additional clusters as soon as queries start queuing, making it ideal for latency-sensitive workloads such as BI dashboards and interactive analytics. Economy only adds a cluster after queuing has persisted for a while, which suits cost-optimized batch processing and scheduled jobs. Snowflake's official docs note that Economy uses roughly 6 minutes of continued queuing as the threshold for adding a cluster.
Does a large MAX_CLUSTER_COUNT setting increase cost?
The MAX_CLUSTER_COUNT value itself does not increase cost. Credits are only charged for the time clusters are actually running. With MAX_CLUSTER_COUNT = 10, only 1-2 clusters will actually start if concurrency is low. That said, many clusters could spin up simultaneously during peak load, so it is recommended to set credit-consumption caps with Resource Monitors to prevent runaway cost.
How is a Multi-cluster Warehouse different from scaling up the warehouse size?
Increasing warehouse size (XS to S to M to L) is scaling up, which makes individual queries faster. It helps when single queries are slow due to large scans or complex joins. A Multi-cluster Warehouse is scaling out, which increases the number of queries that can run concurrently. It helps when individual queries are fast but many users are competing for the warehouse and causing queuing. The two solve different problems, so you should analyze Query Profile and QUERY_HISTORY to pick the right one.
Practice with certification-focused question sets
Try free questionsNicheeLab Editorial Team
NicheeLab editorial team focused on data engineering and cloud certification learning. Content is structured around practical study needs and official exam domains.
Snowflake Certifications: All 11 Exams Explained (2026)
Every SnowPro certification — Associate, Core, Specialty, Ad...
Snowflake Exam Difficulty Ranking: All 11 Certs Compared (2026)
All 11 SnowPro exams ranked by difficulty with study-time es...
Snowflake Study Guide: Fastest Pass Route by Exam (2026)
How to pass SnowPro certifications efficiently — official ma...
SnowPro Core (COF-C03): Complete Exam Guide (2026)
Pass the SnowPro Core exam — six domains, scope, sample ques...
SnowPro Associate Platform (SOL-C01): Complete Guide (2026)
The entry-level SnowPro Associate exam — scope, weighting, s...