Snowflake Adaptive Warehouse is in Public Preview. The Routing Problem Just Got Harder

By Amir Peres
April 20, 2026 | 5 min read

Snowflake pushed Adaptive Warehouse into public preview this month. The pitch on launch day sounds appealing: no more guessing warehouse size, no more multi-cluster tuning, no more managing suspend and resume. Snowflake picks the compute. You write SQL.

It’s a real architectural shift – arguably the most substantial change to Snowflake’s compute model since multi-cluster warehouses arrived. It’s also not going to simplify anything for most teams running production data workloads.

Here’s what actually changes, what the new knobs do, and why – for almost everyone – picking the right warehouse got harder this week, not easier.

What Adaptive Warehouse actually is

Adaptive Compute is a new warehouse type in Snowflake.
First, the execution model. Queries from every adaptive warehouse in your account get routed into a shared compute pool. The pool is dedicated to your account – not shared across Snowflake tenants – and it’s distinct from the pools serving Standard, Snowpark-Optimized, or Interactive warehouses. You can still run multiple adaptive warehouses for chargeback, workload grouping, or governance, but under the hood they draw from the same resources. Snowflake decides how much of that pool each query gets, up to the limits you set.

The classic warehouse knobs (WAREHOUSE_SIZE, MIN_CLUSTER_COUNT, MAX_CLUSTER_COUNT, SCALING_POLICY) no longer apply. In their place, Adaptive introduces two new ones:

  • MAX_QUERY_PERFORMANCE_LEVEL (default: XLARGE). The upper bound on how much compute a single query can pull. Expressed as t-shirt sizes from XSMALL to X4LARGE. Think of it as the ceiling for any individual statement. Set it low to protect against runaway spend on a single query; set it high to give heavy queries room to finish fast.
  • QUERY_THROUGHPUT_MULTIPLIER (default: 2). A scale factor on the system-computed base capacity. A value of 0 means unlimited burst. This controls how many queries can run concurrently at the max performance level. Higher values reduce queuing under load; lower values cap instantaneous spend.

Second, the billing model. Adaptive bills per query, not per warehouse-second. You don’t pay to create an adaptive warehouse – you pay for the compute each query actually consumes. All queries still roll up to the warehouse for chargeback, so existing showback models survive. But conceptually, it’s a different pricing paradigm.

Standard warehouses use a rental model: you pay for the warehouse being up, regardless of whether every second of that uptime is producing useful work. A warehouse running one query and spending the rest of the minute idle still bills for the minute. Adaptive flips this: compute follows the query, and billing follows the compute.

That’s the shift the launch posts are all about. The question is what it means for your bill.

The fine print matters

Before you convert anything, a few things are worth knowing.

Enterprise Edition or higher is required. Standard Edition customers can’t use Adaptive at all. Public preview is in three regions only – US West 2, EU West 1, AP Northeast 1 – with broader rollout still to come.

Not every warehouse can be converted. X5Large and X6Large warehouses can’t move to or from Adaptive in either direction. More significantly, Snowpark-Optimized and Interactive warehouses can’t be converted to Adaptive either. That last one matters: if your heavy ML and Java/Python workloads run on Snowpark-Optimized – and for memory-constrained workloads, they should – Adaptive is simply not available for them.

Query-level cost visibility isn’t available in ACCOUNT_USAGE views during public preview – Snowflake says it’s planned for GA. Per-query execution data (runtime, bytes scanned, queuing) is still available via QUERY_HISTORY and WAREHOUSE_LOAD_HISTORY, so you can infer relative cost from execution patterns. But you can’t get a direct dollar figure per query from the metering views, which is what makes informed tuning of MAX_QUERY_PERFORMANCE_LEVEL and QUERY_THROUGHPUT_MULTIPLIER harder during preview than it will be at GA.

None of this is a deal-breaker. It’s a reminder that public preview is still preview, and that production adoption should lag the hype cycle.

How Adaptive differs from Gen-2

A lot of teams will look at Adaptive and ask the reasonable question: “We just moved workloads to Gen-2 for better performance. How is this different?”

The answer is that Gen-2 and Adaptive are solving different problems.

Gen-2 is a hardware-and-engine upgrade to Standard warehouses. Same rental billing model, same knobs, just faster memory, better I/O, and more efficient execution. A Gen-2 Medium running the same dbt pipeline as a Gen-1 Medium will finish faster – often 30–60% faster – and cost more per credit to do so. The net cost win depends on the workload: you often benefit from downsizing (Gen-2 Small replaces Gen-1 Medium), but without active right-sizing you’re paying more for the same work.

Adaptive is a change to the pricing and dispatch model. It doesn’t materially change the underlying hardware. It changes who decides what size to run a query on (Snowflake, not you) and how you pay (per query, not per second).

Practically: Gen-2 makes a given workload faster. Adaptive makes your compute elastic at query granularity. A well-architected Snowflake account in late 2026 will use both – Gen-2 for steady, predictable workloads where the per-second model is cheaper, and Adaptive for spiky, unpredictable workloads where elasticity is worth the premium.

Where Adaptive Warehouse genuinely wins

There are workload shapes where Adaptive is the best compute primitive Snowflake has ever offered.

Bursty concurrency. When a spike hits – a customer-facing application with unpredictable load, a scheduled job fanning out hundreds of parallel statements – Adaptive scales nearly instantaneously. No multi-cluster warm-up lag, no queuing cliff while new clusters spin up. If you care about P99 latency on a spiky workload more than cost per query, Adaptive deserves a serious look.

Variable, unpredictable load. Workloads that don’t fit into a neat sizing plan – where one hour looks like light BI and the next looks like a heavy aggregation pass – benefit from per-query right-sizing more than from being forced into a fixed t-shirt size. With Standard, you pick a size that handles the worst-case query and pay for it during the easy hours too. Adaptive decouples those.

Workloads where you were always over-provisioning. If your MAX_CLUSTER_COUNT is 10 “just in case” and you rarely hit it, the per-query billing model recovers the headroom tax. You stop paying for warm clusters you aren’t using.

Shared pools across teams. If several teams share infrastructure but have different load profiles, Adaptive’s account-level compute pool can smooth their combined utilization. One team’s spike fills the pool while another team’s lull leaves it empty. In a fixed-size warehouse, that empty time would still be billed.

Where it won’t reduce your bill

For everything else – and “everything else” is most production workloads – switching an existing warehouse to Adaptive and walking away is unlikely to save you money.

Sustained, predictable workloads lose the per-query advantage. Per-query billing shines when there’s idle time between queries. If your warehouse is pegged 20 hours a day running a dbt-like pipeline at known concurrency, Standard billing on a correctly-sized Gen-2 warehouse is usually cheaper. Adaptive is a premium compute tier; the flexibility costs money, and on workloads that don’t need flexibility, you’re paying for an option you’re not exercising.

Sparse workloads can cost more, not less. Intuition says a warehouse with two queries this month should cost you two queries’ worth of compute. In practice, there are still system-level billing minimums and overheads that don’t collapse cleanly for very sparse traffic. A handful of short queries spread across multiple adaptive warehouses at 15-second intervals is more expensive than running them on Standard warehouses, even though the query count is identical. The per-query model has a floor.

The two new knobs are not self-tuning. MAX_QUERY_PERFORMANCE_LEVEL set too low queues your heavy queries and hurts latency. Set too high, a single runaway query can burn through budget before a resource monitor catches it. QUERY_THROUGHPUT_MULTIPLIER behaves non-linearly – too high costs money, but sometimes too low costs more than unlimited, because queries get delayed into pricier execution paths. You still need to classify workloads, pick a configuration profile, and measure.

Snowflake’s own documentation acknowledges this. It lists three distinct configuration patterns – latency-sensitive, cost-sensitive high-throughput, tightly budgeted – and tells you to pick the one that matches your workload. Which is another way of saying: you still need to know what your workload is before you configure the thing that’s supposed to save you from knowing.

The real problem: the decision space just got bigger

This is the part that matters.

Before Adaptive, a Snowflake admin picking a warehouse was already choosing across three types:

  • Standard Gen-1 – cheap, predictable, well-understood.
  • Standard Gen-2 – faster hardware, better memory and I/O, higher per-credit cost, wins on dbt, BI, and large analytics.
  • Snowpark-Optimized – for memory-heavy ML and Java/Python workloads.

Plus t-shirt sizing (XSMALL through 6XLARGE, with Gen-2 capping at 4XLARGE and Snowpark-Optimized at its own ceiling). Plus multi-cluster settings. Plus scaling policies. Plus auto-suspend. Per workload. Per team. Sometimes per time-of-day.

Adaptive Warehouse adds a fourth type with two new knobs. It doesn’t eliminate a single decision you had before. It adds several:

  • Should this workload run on Adaptive at all, or on Gen-1, Gen-2, or Snowpark-Optimized?
  • If Adaptive, what’s the right MAX_QUERY_PERFORMANCE_LEVEL?
  • What’s the right QUERY_THROUGHPUT_MULTIPLIER?
  • Do I convert an existing warehouse, or create a new one and migrate queries?
  • Do I group workloads on a shared adaptive warehouse or isolate them across multiple?

And these are no longer once-per-warehouse decisions. The per-query pricing model is explicit about this – it assumes different queries have different optimal configurations. Your long-running nightly ETL and your ad-hoc BI dashboard now have not only different optimal sizes but different optimal warehouse types.

These aren’t one-time decisions either. Workload characteristics drift. A query that was ideal for Gen-2 last quarter might belong on Adaptive this quarter after someone added a concurrency-sensitive AI agent pipeline on top of it. A Snowpark ML job that graduated from experimental to production might move from a small Snowpark-Optimized warehouse to a larger one. Nobody should be making these choices by hand, per workload, per quarter.

And this is where the launch framing falls apart. “Snowflake handles it automatically” is true for a narrow slice of the decision – Snowflake now decides the per-query size within an adaptive warehouse. Everything else – which workloads to put on Adaptive, how to configure it, what to leave on Gen-2, what stays on Snowpark-Optimized – is still the customer’s problem. And the customer now has more moving parts to reason about, not fewer.

How Yuki routes across all four warehouse types

Yuki’s Contextual Execution Layer now treats Adaptive Warehouse as a first-class execution target, alongside Standard Gen-1, Standard Gen-2, and Snowpark-Optimized.

Every query – whether it comes from an AI agent, an ETL pipeline, a Snowpark ML job, or a customer-facing application – gets routed in real time to the warehouse type, size, and configuration that fits it best. The routing decisions are driven by measured execution patterns, not static rules or workload tags. Yuki looks at how each query actually behaves: memory footprint, I/O profile, concurrency signature, latency sensitivity, credits consumed per unit of work. Then it picks the execution target.

Concretely, that looks like this in production:

A burst of agent queries hitting a retrieval endpoint gets routed to an Adaptive warehouse with a tuned QUERY_THROUGHPUT_MULTIPLIER – burst response without paying Adaptive’s premium on the rest of the workload. When the burst subsides, the agent’s lower-concurrency queries continue to route to Adaptive while heavier analytical jobs divert elsewhere.

A dbt run on a known schedule stays on an appropriately-sized Gen-2 warehouse, where per-second billing is cheaper and the workload’s predictability pays off.

A memory-heavy Snowpark ML training job gets routed to Snowpark-Optimized, because Adaptive can’t run it. The routing logic knows Snowpark-Optimized is the only option for this class of query and places it there without manual configuration.

A customer-facing application with strict P99 SLAs and unpredictable concurrency gets routed to Adaptive – because that’s exactly the workload shape Adaptive was built for, and the alternative (a heavily over-provisioned multi-cluster warehouse) is more expensive at steady state.

When something changes – a new agent comes online, a pipeline doubles in volume, a dashboard suddenly has 10× concurrent users – Yuki re-routes automatically. No manual testing of which warehouse type wins. No quarterly re-evaluation cycle. No one on the data engineering team needing to understand the difference between MAX_QUERY_PERFORMANCE_LEVEL values and running their own benchmark before deciding.

That’s what a contextual execution layer actually does: not replace the warehouse picker, but remove the need for anyone to look at it.

The takeaway

Adaptive Warehouse is a useful new primitive. For burst concurrency and variable workloads, it’s genuinely the best compute option Snowflake has shipped. For sustained, well-understood workloads, it’s an expensive way to not change your bill.

The harder truth: it’s not a replacement for picking the right warehouse for every query. It’s another option to pick from, with new constraints (Enterprise tier, region limits, no Snowpark), new knobs, and a fundamentally different billing model that rewards only specific workload shapes.

That’s the real promise of Adaptive Warehouse – not self-tuning compute, but smarter routing. And that’s what Yuki automates.

By Amir Peres
Amir Peres is CTO and Co-Founder of Yuki, where he drives technical vision for automated Snowflake cost optimization. With 12+ years in data architecture, ML, and large-scale infrastructure, he previously led engineering at Lightico (building GDPR-compliant multi-region data lakes) and Payoneer (ML product development). Amir specializes in scalable, secure, cost-efficient data systems that maximize ROI while reducing manual effort. He has presented at Data TLV Summit 2025 and appeared on the Jon Myer podcast. Find more of his insights on LinkedIn.

Table of Contents

Free cost analysis

Take 5 minutes to learn how much money you can save on your Snowflake account.

By clicking Submit you’re confirming that you agree with our Terms and Conditions.

Follow us on LinkedIn

Related posts

Free cost analysis

Take 5 minutes to learn how much money you can save on your Snowflake account.

By clicking Submit you’re confirming that you agree with our Terms and Conditions.

Skip to content