Snowflake Adaptive Compute vs Sized Warehouses: When to Switch

Quick answer: Snowflake Adaptive Compute vs warehouse sizing comes down to three gates: Enterprise Edition or higher, a listed region, and a workload that isn't HTAP-heavy, Snowpark-optimized or pinned to X5LARGE/X6LARGE. Clear those and ALTER WAREHOUSE my_wh SET WAREHOUSE_TYPE = 'ADAPTIVE' converts in place with no downtime, and 'STANDARD' rolls it back. The real price is attribution: QUERY_ATTRIBUTION_HISTORY stops carrying your jobs and CREDITS_ATTRIBUTED_COMPUTE_QUERIES goes NULL.

Last updated: August 2026

For a decade the first real decision on a Snowflake account was a T-shirt size, then MIN_CLUSTER_COUNT, MAX_CLUSTER_COUNT, a scaling policy, an auto-suspend value, and the habit of splitting workloads across named warehouses so finance's dashboards couldn't be starved by someone's nightly rebuild. Adaptive Compute deletes all of it: Snowflake picks resources per query and you're left with two dials.


Adaptive Warehouses went GA on AWS on June 16, 2026, initially in six regions, and Snowflake's docs have since added selected Microsoft Azure and Google Cloud regions. Two gates decide this for most readers: the docs make Adaptive Compute available to accounts that are Enterprise Edition (or higher), and only in a published list of regions. If you're on Standard Edition or in AWS Mumbai, this page is a bookmark, not a plan.


This is a decision page, not a feature tour: which workload shapes should move, the create/convert/rollback DDL, and what you give up, mostly the cost-attribution queries your chargeback runs on. It's the 2026 companion to our Snowflake Warehouse Sizing Guide, still correct for accounts that can't switch.


Who can actually turn this on: the edition and region gates


Snowflake's docs are blunt: Adaptive Compute is "Available to accounts that are Enterprise Edition (or higher)" in select AWS, Azure and Google Cloud regions. Vendor recaps sometimes write this as "Enterprise+ accounts," which reads like a new SKU but isn't one; there's no Enterprise+ edition on Snowflake's pricing page. It means Enterprise and above; Standard is out.


Region availability is the gate that actually stops people. It's narrower than Snowflake's overall footprint, and the feature is unavailable in the People's Republic of China.


CloudAvailabilityRegions listed in the docs (Aug 2026)Gap worth checking
AWSGA June 16, 2026 (six regions at launch)About 14, including US East 1 and 2, US West 2, EU West 1, EU Central 1, London, Tokyo, Osaka, Sydney, Sao Paulo, Canada Central, Cape Town and two GovCloud regionsAP South 1 (Mumbai) is absent
AzureAdded after the AWS launchAbout 16, including East US 2, Central US, West US 2, West and North Europe, UK South, Sweden Central, Switzerland North, UAE North, Central India, Japan East, Korea Central, Australia East, Southeast AsiaBroadest of the three; Central India is the only Indian region on any list
Google CloudAdded after the AWS launchSix: us-central1, us-east4, europe-west2, europe-west3, europe-west4, australia-southeast2No US West, no Asian region

Treat that as a snapshot: the list keeps expanding, and the docs are the only current source.


What actually changes when a warehouse becomes adaptive


Conversion is a property change, not a rebuild. The warehouse keeps its name, grants, resource monitor and every reference in your dbt profiles, Airflow connections and BI gateways. A block of config just stops existing.



The structural change most people miss is underneath: all jobs across all Adaptive Warehouses in an account are routed to one shared pool. It's dedicated to your account and unused by standard, interactive or Snowpark-optimized warehouses, but your adaptive warehouses are no longer separate machines.


Snowflake Adaptive Compute vs warehouse sizing: which workloads should move


Most coverage describes the feature and stops. The useful question is which warehouses should stay as they are.


Workload shapeWhat adaptive does with itStay on sized warehouses if...
Bursty BI and ad hoc analyticsStrong fit. Per-query sizing absorbs the variance instead of paying for peak all day.You need a hard per-hour ceiling more than a better p95.
Steady, predictable ELT batchGood fit. Snowflake names loading pipelines and DML-heavy work.It already runs right-sized at near-full utilisation, so there's little idle to reclaim.
Long single heavy queries (nightly rebuilds, wide MERGEs)Workable, but the XLARGE MAX_QUERY_PERFORMANCE_LEVEL default may sit below what you run today.The query needs X5LARGE or X6LARGE. Those can't be converted.
High-concurrency small queries, app-facingQUERY_THROUGHPUT_MULTIPLIER replaces MAX_CLUSTER_COUNT; admission control queues rather than spinning a cluster.You need very low latency for user-facing queries. Snowflake points those at interactive warehouses.
HTAP / hybrid tablesOccasional HTAP on an otherwise analytical warehouse is fine.HTAP is most of the workload. Snowflake's guidance is a Gen2 standard warehouse.
High-memory Snowpark or single-node MLNot a conversion path.Always. Snowpark-optimized warehouses can't be converted.
Per-team chargeback warehousesNames and per-warehouse credit totals survive, so showback still works.Your chargeback runs on QUERY_ATTRIBUTION_HISTORY or CREDITS_ATTRIBUTED_COMPUTE_QUERIES. Rewrite first, convert second.

A mixed account is fine and probably correct: converting the BI and ELT warehouses while leaving the Snowpark-optimized and HTAP ones sized is a supported end state, not a half-finished job.


The migration DDL: create, convert, bulk-convert


First, snapshot the config you're about to lose. On rollback you'll want the original numbers, not an argument about what reporting_wh was.


SQL - snapshot warehouse config before converting
CREATE TABLE IF NOT EXISTS ops.admin.warehouse_config_snapshot (
    captured_at    TIMESTAMP_LTZ,
    warehouse_name STRING,
    config         VARIANT
);

SHOW WAREHOUSES;

INSERT INTO ops.admin.warehouse_config_snapshot (captured_at, warehouse_name, config)
SELECT
    CURRENT_TIMESTAMP(),
    "name",
    OBJECT_CONSTRUCT(
        'type',              "type",
        'size',              "size",
        'min_cluster_count', "min_cluster_count",
        'max_cluster_count', "max_cluster_count",
        'scaling_policy',    "scaling_policy",
        'auto_suspend',      "auto_suspend",
        'auto_resume',       "auto_resume"
    )
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));

Snowflake supports a dedicated CREATE ADAPTIVE WAREHOUSE command as well as the familiar CREATE WAREHOUSE grammar with WAREHOUSE_TYPE = 'ADAPTIVE'. Both produce the same object; use whichever your provisioning code already speaks.


SQL - create and convert adaptive warehouses
-- New adaptive warehouse on the defaults
-- (MAX_QUERY_PERFORMANCE_LEVEL = XLARGE, QUERY_THROUGHPUT_MULTIPLIER = 2)
CREATE ADAPTIVE WAREHOUSE bi_adaptive_wh;

-- New adaptive warehouse with explicit bounds
CREATE ADAPTIVE WAREHOUSE elt_adaptive_wh
  WITH MAX_QUERY_PERFORMANCE_LEVEL = LARGE
       QUERY_THROUGHPUT_MULTIPLIER = 4;

-- Same object through the standard CREATE WAREHOUSE grammar
CREATE WAREHOUSE elt_adaptive_wh_alt
  WITH WAREHOUSE_TYPE = 'ADAPTIVE'
       MAX_QUERY_PERFORMANCE_LEVEL = LARGE
       QUERY_THROUGHPUT_MULTIPLIER = 4;

-- Convert an existing sized warehouse in place. Online, no downtime.
ALTER WAREHOUSE reporting_wh SET WAREHOUSE_TYPE = 'ADAPTIVE';

-- Retune after conversion
ALTER WAREHOUSE reporting_wh
  SET MAX_QUERY_PERFORMANCE_LEVEL = XLARGE
      QUERY_THROUGHPUT_MULTIPLIER = 6;

On conversion you only change WAREHOUSE_TYPE. Snowflake derives starting values for both adaptive properties from the existing size, MAX_CLUSTER_COUNT, QAS scale factor and hardware generation, aiming to preserve or improve on what the sized warehouse did. Week one is measurement, not tuning.


For fleets, SYSTEM$BULK_UPDATE_WH takes a property name, a new value, a JSON filter over warehouse properties and an execution mode; the docs also describe a tag filter, though the published examples use the four-argument form below. Run DRY_RUN first; the filter matches more than you expect.


SQL - bulk conversion with a dry run first
-- Nothing changes; you get the list of candidate warehouses
SELECT SYSTEM$BULK_UPDATE_WH(
  'WAREHOUSE_TYPE',
  'ADAPTIVE',
  '{"WAREHOUSE_TYPE": "STANDARD"}',
  'DRY_RUN'
);

-- Only after you have read and agreed with the dry-run output
SELECT SYSTEM$BULK_UPDATE_WH(
  'WAREHOUSE_TYPE',
  'ADAPTIVE',
  '{"WAREHOUSE_TYPE": "STANDARD"}',
  'ACTIVE'
);

Rollback works, and there's a window where you pay for both


The reversal is symmetric and documented, which is the best reason to treat this as low risk: set WAREHOUSE_TYPE back to 'STANDARD'. Conversion either way is online, with no downtime and no interruption to running queries.


SQL - roll an adaptive warehouse back to sized
-- Adaptive back to standard, online
ALTER WAREHOUSE reporting_wh SET WAREHOUSE_TYPE = 'STANDARD';

-- Adaptive properties stop applying. Restore the sized config explicitly
-- from the snapshot you took before migrating.
ALTER WAREHOUSE reporting_wh SET
    WAREHOUSE_SIZE    = 'LARGE'
    MIN_CLUSTER_COUNT = 1
    MAX_CLUSTER_COUNT = 3
    SCALING_POLICY    = 'STANDARD'
    AUTO_SUSPEND      = 60
    AUTO_RESUME       = TRUE;

SHOW WAREHOUSES LIKE 'REPORTING_WH';

The cost trap. During conversion, running queries finish on the old compute while new queries start on the new, and Snowflake's docs say plainly that while both are alive you are charged for both. Rolling back is worse: going adaptive to standard, the warehouse does not automatically suspend during that overlap. Flip mid-batch with a 40-minute MERGE in flight and you pay double for 40 minutes, then keep paying for an un-suspended standard warehouse. Convert in a quiet window.


Two conversion paths don't exist yet in either direction: X5LARGE and X6LARGE, and Snowpark-optimized or interactive warehouses.


What you give up: the cost attribution queries that used to work


This is the part that costs real days. Adaptive Warehouses bill per query, so per-query credits are better than before. But they arrive in a different view, and two objects your FinOps queries use go quiet.


ACCOUNT_USAGE objectBehaviour on Adaptive WarehousesWhat to do
WAREHOUSE_METERING_HISTORYStill resolves per warehouse; hourly CREDITS_USED and CREDITS_USED_COMPUTE are populated. CREDITS_ATTRIBUTED_COMPUTE_QUERIES is NULL.Keep for warehouse totals. Delete any idle-cost maths on the attributed column.
QUERY_ATTRIBUTION_HISTORYExcludes jobs executed by Adaptive Warehouses.Replace with QUERY_METERING_HISTORY. A rewrite, not a column swap.
QUERY_METERING_HISTORYPer-query credits, 365 days, latency up to 1 hour. Carries warehouse name, user, role and query tag.The new spine of your chargeback model.
QUERY_HISTORYWAREHOUSE_TYPE is the reliable discriminator for adaptive jobs. There is no fixed T-shirt size behind an adaptive query, so a per-query size no longer describes what actually ran.Fix anything grouping by warehouse size or costing from size times seconds; filter on WAREHOUSE_TYPE instead.
ORGANIZATION_USAGE.QUERY_METERING_HISTORYComing soon at the time of writing.Org-wide per-query chargeback stays account-by-account until it lands.
QAS credit columnsFolded into compute credits, with no separate column.Any report trending QAS spend separately will flatline. Retire it.

Here's Snowflake's documented idle-cost query, and why it stops meaning anything.


SQL - the idle-cost query that silently returns NULL
-- Standard warehouses: works. Adaptive warehouses: idle_cost is NULL,
-- because CREDITS_ATTRIBUTED_COMPUTE_QUERIES is not populated for them.
SELECT
    warehouse_name,
    SUM(credits_used_compute)
      - SUM(credits_attributed_compute_queries) AS idle_cost
FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
WHERE start_time >= DATEADD('days', -10, CURRENT_DATE())
  AND end_time < CURRENT_DATE()
GROUP BY warehouse_name;

The replacement is cleaner: per-query credits arrive with the query tag and role attached, so chargeback by team no longer needs a warehouse-per-team convention.


SQL - chargeback rebuilt on QUERY_METERING_HISTORY
SELECT
    warehouse_name,
    role_name,
    query_tag,
    DATE_TRUNC('day', query_metering_hour)  AS usage_day,
    COUNT(DISTINCT query_id)                AS queries,
    SUM(credits_used_compute)               AS credits_compute,
    SUM(credits_used_cloud_services)        AS credits_cloud_services,
    SUM(credits_used)                       AS credits_total
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_METERING_HISTORY
WHERE query_metering_hour >= DATEADD('day', -30, CURRENT_DATE())
GROUP BY ALL
ORDER BY credits_total DESC;

One caveat: at publication the QUERY_METERING_HISTORY reference page carries a narrower availability note than the Adaptive Compute page it belongs to. Row-count it in your own region first.


What you give up: warehouse-level isolation


Sized warehouses gave you physical isolation for free: if a Tableau extract went sideways on MARKETING_WH, the worst case was a bigger bill and a queue there. Adaptive warehouses route into one account-level pool, so isolation becomes a policy question. The replacements are still per-warehouse.



If your isolation model was really a political model, that a named warehouse gave a team a number they owned, that survives. What doesn't is the assumption that a bad query on one warehouse can't affect latency on another.


Tuning the two dials you have left


MAX_QUERY_PERFORMANCE_LEVEL is not a size. Snowflake is explicit that it doesn't map to a specific compute configuration; it's a ceiling, and the system only pushes toward it on high confidence. Raising it doesn't guarantee spend, it grants permission to spend.


The cost trap is on the other dial. Setting QUERY_THROUGHPUT_MULTIPLIER = 0 to "fix queuing" doesn't raise the cap, it removes it: zero means unlimited throughput, and the warehouse will use as much burst capacity as is available. On a Monday-morning dashboard stampede that's the last thing you want. Raise the integer and watch instead.


Diagnose with WAREHOUSE_LOAD_HISTORY, which Snowflake points at for exactly this decision. Queuing means raise QUERY_THROUGHPUT_MULTIPLIER. Slow queries with no queuing means raise MAX_QUERY_PERFORMANCE_LEVEL. Getting those backwards is the most common way to spend more and go no faster.


Snowflake's performance numbers, and how to run your own comparison


Snowflake has published a price-performance figure for Adaptive Compute. It's a vendor benchmark on a vendor workload, so here it is with attribution rather than as a claim about your account.



TPC-DS rewards engines that are good at large joins over clean, evenly distributed data, which isn't what most accounts look like at 09:00 on a Tuesday. Conversion is online and reversible, so your own comparison is cheap: convert one warehouse, leave it a full business cycle, compare.


SQL - before/after latency and queuing for one warehouse
SELECT
    q.warehouse_name,
    q.warehouse_type                              AS wh_mode,
    q.end_time::DATE                              AS ds,
    COUNT(*)                                      AS queries,
    AVG(q.total_elapsed_time)                     AS avg_total_ms,
    AVG(q.execution_time)                         AS avg_exec_ms,
    AVG(q.queued_overload_time)                   AS avg_queued_overload_ms,
    APPROX_PERCENTILE(q.total_elapsed_time, 0.95) AS p95_total_ms
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY q
WHERE q.start_time >= DATEADD('day', -30, CURRENT_DATE())
  AND q.warehouse_name = 'REPORTING_WH'
GROUP BY ALL
ORDER BY ds;

Pair that with daily credits from WAREHOUSE_METERING_HISTORY and you have the only benchmark that matters: credits per unit of work, before and after, over the same weekday mix. If queued_overload_time climbs after conversion, your throughput multiplier is the problem, not the feature.


A migration sequence that finance will sign off on



Step two is the one people skip. Nothing errors when attribution goes NULL: the dashboard renders, the numbers quietly get smaller, and somebody notices six weeks later in a quarterly review.


Does warehouse sizing still matter in 2026?


Yes, for more accounts than the launch coverage suggests. Snowflake Adaptive Compute vs warehouse sizing only has a new answer if you're on Enterprise Edition or higher, in a listed region, and off the exclusion list. Everyone else is still picking a size, a cluster count and a scaling policy. And even after migrating, sizing judgement is the mental model behind MAX_QUERY_PERFORMANCE_LEVEL, which is expressed in T-shirt sizes for a reason.


On the other side of either gate, our Snowflake Warehouse Sizing Guide is still the working document, and the Snowflake Cost Optimization Guide covers the levers that apply whatever the warehouse type. Adaptive Compute makes compute allocation somebody else's problem. It does not make a full table scan cheaper.


Pranay Vatsal, Founder & CEO

Pranay Vatsal is the Founder & CEO of CelestInfo with deep expertise in Snowflake, data architecture, and building production-grade data systems for global enterprises.

Related Articles

Frequently Asked Questions

Q: Is Snowflake Adaptive Compute available on Standard Edition?

No. Snowflake's documentation makes Adaptive Compute available to accounts that are Enterprise Edition (or higher), so Enterprise, Business Critical and VPS qualify and Standard does not. Vendor recaps sometimes write this as "Enterprise+ accounts," which means Enterprise and above rather than a separate edition; there is no Enterprise+ SKU on Snowflake's pricing page.

Q: Can you convert an Adaptive Warehouse back to a sized warehouse?

Yes. ALTER WAREHOUSE my_wh SET WAREHOUSE_TYPE = 'STANDARD'; reverses it, online and with no downtime. Adaptive properties stop applying, so set WAREHOUSE_SIZE, cluster counts and auto-suspend back explicitly. During the overlap you are charged for both sets of compute, and the warehouse does not auto-suspend while rolling back.

Q: Does WAREHOUSE_METERING_HISTORY still work with Adaptive Warehouses?

Yes for warehouse-level totals: hourly CREDITS_USED, CREDITS_USED_COMPUTE and CREDITS_USED_CLOUD_SERVICES still resolve per warehouse. The exception is CREDITS_ATTRIBUTED_COMPUTE_QUERIES, which is NULL for Adaptive Warehouses, so the standard idle-cost calculation breaks. For per-query credits use QUERY_METERING_HISTORY, since QUERY_ATTRIBUTION_HISTORY excludes adaptive jobs entirely.

Q: Which regions support Snowflake Adaptive Compute?

As of August 2026 Snowflake's docs list roughly 14 AWS regions, 16 Azure regions and six Google Cloud regions across the Americas, Europe, the Middle East and Asia Pacific; it went GA on AWS in six regions in June 2026 and has expanded since. AWS Mumbai is absent, and Azure Central India is the only Indian region on any list. It is unavailable in the People's Republic of China, and the docs are the only current source.

Q: Can you still set warehouse size and multi-cluster settings on an Adaptive Warehouse?

No. Snowflake's docs state that WAREHOUSE_SIZE, MIN_CLUSTER_COUNT, MAX_CLUSTER_COUNT and SCALING_POLICY can't be set on an Adaptive Warehouse. You aren't charged for creating one; charges start when the first query runs. You control behaviour with MAX_QUERY_PERFORMANCE_LEVEL, QUERY_THROUGHPUT_MULTIPLIER, statement timeouts, budgets and resource monitors.

Q: Is Adaptive Compute cheaper than sized warehouses?

It depends how much idle and over-provisioning you carry today. Snowflake reports 1.2x better price-performance than Gen2 standard warehouses on the TPC-DS 10TB Concurrency Benchmark, but that is a vendor benchmark. Accounts running bursty workloads on peak-sized warehouses gain most; a batch warehouse already near full utilisation has little idle left to reclaim.