Skip to main content
Metrics type: Key MetricsCategory: Nerve Centre

At a glance

An alert that fires when a Snowflake warehouse holds more than 5 queries waiting in its queue for a sustained 10-minute window. Queueing is Snowflake’s pressure-release valve: when more queries arrive than a warehouse can run concurrently, the extra ones wait rather than fail. A little queueing under a burst is normal. Sustained queueing means the warehouse is structurally undersized for its workload, every queued query is a user or dashboard waiting, and the fix is to upsize the warehouse or enable multi-cluster scaling.

Calculation

Snowflake queues a query when its target warehouse has no free slot to run it. There are two flavours of queue time, and the card reads both:
  • QUEUED_OVERLOAD_TIME: the query waited because the warehouse was already running at its concurrency limit. This is the demand-vs-capacity signal and the one that matters here.
  • QUEUED_PROVISIONING_TIME: the query waited while Snowflake spun up additional compute (cold start or cluster add). This is usually brief and expected.
For the live alert the engine measures the instantaneous queue depth per warehouse, the count of queries currently waiting rather than running, and tracks it over the rolling window:
The depth is evaluated per warehouse, not account-wide, because the remedy is per warehouse: upsizing BI_WH does nothing for a queue on TRANSFORM_WH. The 10-minute sustain requirement is deliberate. A scheduled batch kicking off, or a dashboard with twenty panels all firing at once, can spike the queue for a minute and drain naturally. Paging on that would be noise. A queue that stays above 5 for ten minutes is not a burst, it is the warehouse failing to keep up with steady demand, which is exactly the structural problem the card exists to surface. The historic backing numbers (QUEUED_OVERLOAD_TIME summed per query) let you confirm after the fact how much aggregate wait time the queue cost.

Worked example

A platform team runs BI_WH, a Medium warehouse single-cluster, serving a fleet of ecommerce dashboards used by merchandising, ops, and finance. At 09:00 on 05 May 26 the working day starts and everyone opens their boards at once. Snapshot of BI_WH across the 09:00 to 09:10 window: Queue depth held at 11 for the full ten minutes, so the alert fired at 09:06. The picture is unambiguous: the warehouse is pinned at its concurrency limit and a backlog is building rather than draining. The on-call platform engineer acts in order:
  1. Confirm it is overload, not provisioning. The queued queries show QUEUED_OVERLOAD_TIME, not provisioning time, so this is genuine demand exceeding capacity, not a cold start. Confirmed.
  2. Choose the right lever. Two options: scale up (bigger warehouse, more concurrency per cluster) or scale out (enable multi-cluster so Snowflake adds clusters under load and removes them when it drains). For a spiky BI workload that is busy at 09:00 and quiet by 09:30, scale out is the better fit: set BI_WH to multi-cluster with MIN_CLUSTER_COUNT = 1, MAX_CLUSTER_COUNT = 3, SCALING_POLICY = STANDARD.
  3. Apply and watch the drain. After enabling multi-cluster, Snowflake adds a second cluster within seconds, running capacity roughly doubles, and the queue should fall below 5 within a couple of minutes. The card auto-resolves when depth drops under threshold for the window.
  4. Right-size the ceiling, not just the floor. Multi-cluster only adds clusters up to MAX_CLUSTER_COUNT. If the queue returns, raise the max or move the heaviest dashboards to their own warehouse.
The lesson: sustained queueing is a capacity-shape problem, and the right answer depends on the shape. Spiky, predictable load wants multi-cluster scale-out; uniformly heavy load wants a bigger warehouse. The card tells you it is happening; the queue source (overload vs provisioning) tells you which fix applies.

Sibling cards

Reconciling against the source

Where to look in Snowflake:
SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY carries QUEUED_OVERLOAD_TIME and QUEUED_PROVISIONING_TIME per query; sum overload time per warehouse over the window to confirm aggregate wait. SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_LOAD_HISTORY reports AVG_RUNNING and AVG_QUEUED_LOAD per warehouse over 5-minute intervals, the closest native equivalent to this card’s queue depth. Snowsight, Admin to Warehouses to (warehouse) to Warehouse Activity for the managed-service console view of running vs queued load over time.
A representative reconciliation query:
Why our number may legitimately differ from Snowflake’s console: Cross-connector reconciliation:

Known limitations / FAQs

Some queueing is normal. Why page on it at all? Brief queueing during a burst is healthy: it means the warehouse is busy and Snowflake is protecting it from thrashing. The card does not page on a burst. It pages only when depth holds above 5 for a sustained 10 minutes, which is no longer a burst, it is a backlog that will not drain on its own. That is the signal that the warehouse is structurally undersized for its steady demand. Should I scale up (bigger warehouse) or scale out (multi-cluster)? It depends on the load shape. Spiky, predictable load (a 09:00 dashboard rush, a nightly batch) is best served by multi-cluster scale-out: Snowflake adds clusters under load and removes them when the queue drains, so you only pay for the extra compute while it is needed. Uniformly heavy load that runs all day is better served by scaling up to a larger size. The queue source helps: pure QUEUED_OVERLOAD_TIME means concurrency pressure, which multi-cluster fixes directly. The queue cleared by itself before I could act. Did the alert misfire? Possibly not. If the breach held for the full 10-minute window it was a real sustained queue; a workload finishing naturally afterwards does not make the preceding ten minutes of user wait less real. If it cleared inside the window, the sustain guard should have kept the alert quiet, so a fire on a sub-10-minute queue is worth checking against the Alert Rules tab settings. Does queueing cost extra credits? Queued time itself is not billed: a query waiting in the queue is not consuming compute. The cost shows up two ways instead. First, the remedy (upsizing or adding clusters) costs credits while active. Second, sustained queues often coincide with a warehouse running flat-out, which is the credit cost. Cross-check Credits by Warehouse (7d). One warehouse queues constantly but the others are idle. What is the fix? This is a workload-isolation problem. A single warehouse is absorbing demand it cannot handle while capacity sits unused elsewhere. The clean fix is to split the workload: give the heavy consumer (a busy BI tool, a heavy transform) its own appropriately sized warehouse rather than upsizing a shared one. Snowflake’s per-warehouse billing makes this cheap, you only pay for each warehouse while it runs. Provisioning queue keeps showing up on a warehouse that auto-suspends aggressively. Is that this alert? Usually not. Aggressive auto-suspend means the warehouse keeps cold-starting, which shows as QUEUED_PROVISIONING_TIME, not overload. This card focuses on overload queueing. If provisioning wait is your pain, the remedy is the opposite of capacity: lengthen auto-suspend slightly so the warehouse stays warm between closely spaced queries. Check Idle Warehouse Credits Wasted (24h) to balance the trade-off.

Tracked live in Vortex IQ Nerve Centre

Warehouse Queueing Sustained (>5 queries queued) is one of hundreds of KPI pulses Vortex IQ tracks across Snowflake and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.