At a glance
How full each warehouse is, expressed as the share of its concurrency capacity currently in use: running queries divided by the warehouse’s maximum concurrency level. A gauge near 100% means the warehouse is at the edge of what it can run at once, so the next query queues instead of starting. Sustained saturation is the clearest live signal that a warehouse needs to be upsized (more compute per cluster) or made multi-cluster (more clusters to absorb concurrency). For a platform team it answers, in one glance: which warehouse is about to start making everyone wait?
Calculation
Saturation is concurrency utilisation, not CPU utilisation. Snowflake admits a bounded number of queries to run simultaneously on a warehouse; that ceiling isMAX_CONCURRENCY_LEVEL (default 8) per cluster. Per warehouse, over the rolling minute:
running_queries reaches MAX_CONCURRENCY_LEVEL, saturation pins at 100% and new queries enter the queue (visible as QUEUED_OVERLOAD_TIME in QUERY_HISTORY). The 1-minute smoothing prevents a brief burst from tripping the > 90% alert; only sustained saturation flags.
Worked example
A platform team runs Snowflake behind an Adobe Commerce store’s reporting layer. The reporting warehouseBI_WH is a Medium, single-cluster, MAX_CONCURRENCY_LEVEL = 8. Snapshot at 09 Jun 26, 09:05 UTC, during the Monday morning dashboard rush.
The headline gauge reads 100% on
BI_WH, well past the 90% trigger, so the card is red.
What is happening: every Monday at 09:00 the whole analytics team opens their dashboards at once. BI_WH admits 8 queries, the 9th onwards queue. Analysts experience this as dashboards that “hang” for 10 to 40 seconds before painting. The warehouse is not slow, it is full: each individual query runs fine, but there are more concurrent queries than concurrency slots.
The fix is concurrency, not size. Upsizing BI_WH from Medium to Large would give each query more compute (faster individual runtime) but MAX_CONCURRENCY_LEVEL stays 8, so the 9th query still queues. The right lever is multi-cluster:
- Saturation is a concurrency problem, so the cure is usually more clusters, not a bigger warehouse. Upsizing helps single slow queries; multi-cluster helps too many queries at once.
- Read the gauge with the queue card. Sustained 100% saturation and rising Avg Query Queue Depth per Warehouse together confirm real queueing, not just a healthy busy warehouse.
- Multi-cluster on ECONOMY mode is cheap insurance. It only adds clusters when concurrency demands it and scales back when the rush passes, so you pay for the surge, not for keeping it warm all day.
Sibling cards
Reconciling against the source
Where to look in Snowflake:Snowsight → Admin → Warehouses shows each warehouse’s live load, running and queued query counts, and cluster count.Why our number may legitimately differ from Snowflake’s own view:SHOW PARAMETERS LIKE 'MAX_CONCURRENCY_LEVEL' IN WAREHOUSE <name>;confirms the concurrency ceiling. QuerySNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_LOAD_HISTORY(columnsAVG_RUNNING,AVG_QUEUED_LOAD,AVG_QUEUED_PROVISIONING) for the historical load profile.SHOW WAREHOUSES;reveals current state, size, andMIN/MAX_CLUSTER_COUNT.
Cross-connector reconciliation: if Snowflake QPS Spike vs Ecom Order Rate shows a query surge with no matching order spike, the saturation may be driven by a dashboard storm or a runaway scheduled job rather than genuine business load.
Known limitations / FAQs
Is 100% saturation always bad? No. A warehouse running at 100% with no meaningful queue is simply well-utilised, which is efficient. The concern is sustained 100% with queries piling into the queue, because that is when users feel the wait. Always read this gauge with Avg Query Queue Depth per Warehouse. My warehouse is saturated. Should I make it bigger? Usually not for saturation alone. Warehouse size (X-Small to 6X-Large) gives each query more compute; it does not raiseMAX_CONCURRENCY_LEVEL, which is what saturation measures. To absorb more concurrent queries, convert to multi-cluster (raise MAX_CLUSTER_COUNT) so Snowflake adds clusters during surges. Upsize only if individual queries are also slow.
What is the difference between saturation and CPU utilisation?
Saturation here is concurrency utilisation: how many of the warehouse’s query slots are in use. It is not a CPU or memory percentage. A warehouse can be 100% saturated (all 8 slots busy) while each query is light, or 25% saturated while two heavy queries hammer the compute. Snowflake does not expose raw CPU per warehouse, so concurrency is the meaningful saturation signal.
Why does the gauge sometimes read just over 100%?
Snowflake can briefly admit additional lightweight queries beyond the nominal MAX_CONCURRENCY_LEVEL under certain conditions, and there is a small timing window when a cluster is spinning up or down. We surface the real ratio, so transient readings slightly above 100% are expected and harmless.
Does multi-cluster scaling make saturation disappear?
It moves the ceiling. A multi-cluster warehouse adds clusters during a surge, multiplying capacity, so saturation drops as long as you have not hit MAX_CLUSTER_COUNT. If you are pinned at max clusters and still saturated, you genuinely need a higher cluster cap or workload separation.
Why the 90% trigger and not 100%?
Because 90% sustained is the early-warning point: it means you are one or two queries away from queueing on the next surge. Waiting for 100% means waiting until users are already feeling lag. Adjust the threshold per warehouse in the Alert Rules tab to match how bursty that workload is.
Should every warehouse be multi-cluster as a precaution?
No. Multi-cluster suits warehouses with spiky concurrency (interactive BI, analyst pools). For steady, serialised pipelines (ELT, ingest) where queries run one or two at a time, a single cluster is cheaper and never saturates. Match the topology to the workload shape, which Credits by Warehouse (7d) helps you reason about.