How do you configure a Snowflake multi-cluster warehouse, and what does SCALING_POLICY = 'ECONOMY' change?
answer
- two different dials for two different problems
- same size, more copies of it
- min equal to max behaves differently
- one policy hurries, one waits for work
basics
~20 sA Snowflake multi-cluster warehouse sets MIN_CLUSTER_COUNT and MAX_CLUSTER_COUNT so extra same-size clusters start when queries queue and shut down as load falls. SCALING_POLICY 'STANDARD' favours starting clusters quickly; 'ECONOMY' waits for enough load to keep one busy.
solid answer
~50 sA multi-cluster warehouse (Enterprise Edition or higher) runs several **identically sized** clusters behind one warehouse name. You set `MIN_CLUSTER_COUNT` and `MAX_CLUSTER_COUNT`. When they differ, the warehouse is in **auto-scale** mode: it starts with the minimum and adds clusters as queries queue, shutting them down again as load drops, with each running cluster billed at the size's credit rate. When they are equal and above one, it is in **maximized** mode: every cluster starts on resume and runs until the warehouse suspends — used for a known, constant heavy concurrency load. `SCALING_POLICY = 'STANDARD'` (the default) favours minimizing queueing: it starts an additional cluster as soon as queries queue. `'ECONOMY'` favours credit efficiency: it starts one only when there is enough queued load to keep it busy for several minutes, and it is slower to shut clusters down — so queries wait longer during a burst.
code
sql · 12 lines-- auto-scale: one cluster normally, up to five during the morning burst
CREATE WAREHOUSE bi_wh
WAREHOUSE_SIZE = 'MEDIUM'
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 5
SCALING_POLICY = 'STANDARD'
AUTO_SUSPEND = 300;
-- maximized: all three clusters up for a known, sustained peak
ALTER WAREHOUSE bi_wh SET
MIN_CLUSTER_COUNT = 3,
MAX_CLUSTER_COUNT = 3;go deeper
Know that a Snowflake warehouse can run more than one cluster of the same size, and that this is about serving more concurrent queries rather than speeding up one.
Explain MIN_CLUSTER_COUNT versus MAX_CLUSTER_COUNT, auto-scale versus maximized mode, and how the STANDARD and ECONOMY scaling policies trade queue time against credits.
Demonstrate the diagnosis: distinguish queued time from execution time in query history, pick the right dial, and cap the worst-case credit rate deliberately.
Own the concurrency budget across teams — which workloads get elastic clusters, what MAX_CLUSTER_COUNT ceilings are defensible, and how queue-time SLAs are stated and monitored.
## Scale up versus scale out Snowflake gives you two independent dials on a warehouse: - **`WAREHOUSE_SIZE`** — how much compute one cluster has. This is *scale up*, and it makes an individual query faster. - **`MIN_CLUSTER_COUNT` / `MAX_CLUSTER_COUNT`** — how many identical clusters the warehouse may run. This is *scale out*, and it lets more queries run at the same time. A multi-cluster warehouse is the second dial. All clusters are the same size; Snowflake routes each incoming query to a cluster. Multi-cluster warehouses require Enterprise Edition or higher. ## The two modes **Auto-scale mode** — `MIN_CLUSTER_COUNT` < `MAX_CLUSTER_COUNT`: ```sql CREATE WAREHOUSE bi_wh WAREHOUSE_SIZE = 'MEDIUM' MIN_CLUSTER_COUNT = 1 MAX_CLUSTER_COUNT = 5 SCALING_POLICY = 'STANDARD' AUTO_SUSPEND = 300; ``` The warehouse runs one Medium cluster normally; when concurrent demand exceeds what the running clusters can serve, Snowflake starts another, up to five. As load falls, extra clusters shut down. You pay per running cluster: five Medium clusters bill five times a Medium's rate for as long as all five are up. This is the shape almost every dashboard workload wants. **Maximized mode** — `MIN_CLUSTER_COUNT` = `MAX_CLUSTER_COUNT` > 1: every cluster starts when the warehouse resumes and runs until it suspends. There is no ramp-up delay and no scaling decision, which suits a predictable, sustained concurrency load (a fixed nightly reporting burst, a known peak window) where you would rather not wait for clusters to spin up. ## What SCALING_POLICY controls The policy tunes how eagerly clusters start and how reluctantly they stop. - **`STANDARD`** (default) — optimises for minimizing queueing. An additional cluster is started as soon as a query is queued, or the system detects one more query than the running clusters can take. Shutdown happens after a small number of consecutive one-minute checks showing the least-loaded cluster's work could be redistributed. - **`ECONOMY`** — optimises for saving credits. Snowflake starts an additional cluster only when it estimates there is enough queued load to keep that cluster busy for at least about six minutes, and it requires more consecutive checks before shutting one down. The consequence is direct: **during a burst, queries queue longer.** So the choice is a latency-versus-credits knob. Interactive dashboards where a human is waiting want `STANDARD`. A batch or internal-reporting warehouse where a couple of minutes of queueing is invisible is a legitimate `ECONOMY` candidate. ## Diagnosing which dial to turn The interview scenario is almost always "queries are slow in the morning — what do you do?" The discriminating evidence: - **Individual queries are fast, but wall-clock time from the user's perspective is long, and query history shows time spent queued.** That is a concurrency problem. Add clusters. - **A single query, run alone on an idle warehouse, is still slow — long scan time, or spilling to local and remote storage.** That is a per-query compute problem. Increase the size. Misdiagnosing costs real money in both directions: sizing up a queueing warehouse multiplies the credit rate without touching the queue, and adding clusters to a warehouse whose single query spills just gives you several equally slow clusters. `MAX_CONCURRENCY_LEVEL` (8 by default) is the related per-cluster property: it bounds how many statements one cluster runs at once before queueing. Raising it lets more queries share a cluster's resources — each getting less — and lowering it pushes work into the queue, or, on a multi-cluster warehouse, triggers another cluster sooner. It is a blunt instrument; most teams leave it alone and use cluster count instead. ## Cost control A multi-cluster warehouse's ceiling is `MAX_CLUSTER_COUNT` × the size's credit rate. That is the number to reason about when someone proposes `MAX_CLUSTER_COUNT = 10` on an X-Large: the worst hour is 160 credits. `MAX_CLUSTER_COUNT` is itself a budget lever — pick a number you are willing to pay for during a runaway burst, and back it with a resource monitor. ## Interview framing State the two dials and what each fixes, name the two modes and how the count settings select between them, then explain the scaling policy as a latency-versus-credits tradeoff with a concrete consequence (`ECONOMY` means users wait during bursts). Candidates who describe multi-cluster as "making queries faster" have missed the point entirely.
- When would you deliberately use maximized mode instead of auto-scale on a Snowflake multi-cluster warehouse?When the concurrency peak is known and sustained, and the ramp-up delay of auto-scale is unacceptable — a fixed reporting window, or a heavy load-test hour. Setting MIN_CLUSTER_COUNT equal to MAX_CLUSTER_COUNT starts every cluster the moment the warehouse resumes, so no query waits for a cluster to spin up. You pay for all clusters the whole time it runs.
- Queries on a Medium warehouse are queueing every morning. Why is moving to Large the wrong first fix?Queueing means more queries arrived than the running clusters can admit; a bigger cluster finishes each query faster but does not raise admitted concurrency much, and it doubles the credit rate. The right lever is more clusters — set MAX_CLUSTER_COUNT above one so Snowflake adds capacity during the burst and releases it afterwards.
- What is the worst-case credit rate of a multi-cluster warehouse, and how do you bound it?MAX_CLUSTER_COUNT multiplied by the size's per-hour credit rate: ten clusters of an X-Large is 160 credits an hour. Bound it by choosing a MAX_CLUSTER_COUNT you are willing to pay for during a runaway burst, and back it with a resource monitor that suspends the warehouse at a credit quota.
saying these in an interview costs you the question
- Thinking extra clusters make an individual query run faster
- Believing clusters in a multi-cluster warehouse can differ in size
- Treating ECONOMY as free savings with no queueing cost
- Setting MAX_CLUSTER_COUNT high without pricing the worst-case hour
- Fixing morning query queues by increasing warehouse size