Snowflake Warehouse Sizing Guide

Snowflake Warehouse Sizing: How to Pick the Right Size Without Guessing

Celestinfo Software Solutions Pvt. Ltd. Feb 06, 2025

Last updated: February 2025

Quick answer: Start with X-Small (1 credit/hour) for ad-hoc queries and Small for ETL. Check the query profile for spilling - if queries spill to remote storage, size up. Set auto-suspend to 60 seconds, not the default 600. Use separate warehouses per workload type, and set up resource monitors before your bill surprises you.

How Warehouse Sizes Work


Snowflake warehouse sizes follow a simple doubling pattern. Each step up doubles the number of compute nodes and the per-hour credit cost:


SizeCredits/HourServers (Nodes)Typical Use
X-Small (XS)11Ad-hoc queries, development, testing
Small (S)22Light ETL, small BI dashboards
Medium (M)44Production ETL, moderate analytics
Large (L)88Heavy transformations, complex joins
X-Large (XL)1616Large-scale data processing
2X-Large3232Very large datasets, data science workloads
3X-Large6464Enterprise batch processing
4X-Large128128Maximum single-query parallelism

The dollar cost per credit varies by edition. On-demand Standard Edition runs roughly $2/credit. Enterprise is about $3/credit. Business Critical is around $4/credit. Check your contract for exact pricing.


The Auto-Suspend Trap


The default auto-suspend is 600 seconds (10 minutes). That means your warehouse stays running - and burning credits - for 10 minutes after the last query finishes. If your analysts run a query every 15 minutes, the warehouse barely ever suspends.


Set it to 60 seconds for interactive workloads. Snowflake bills per-second with a 60-second minimum, so there's no penalty for resuming frequently. The resume typically takes 1-2 seconds for cached warehouses.


SQL
-- Fix the default auto-suspend
ALTER WAREHOUSE bi_wh SET
  AUTO_SUSPEND = 60
  AUTO_RESUME = TRUE;

AUTO_RESUME = TRUE is on by default, but verify it. If it's off, queries queue until someone manually resumes the warehouse.


When to Size Up vs Scale Out


This is the core decision. Snowflake gives you two levers: make the warehouse bigger (size up) or add more clusters (scale out with multi-cluster warehouses).


Size Up When...


Scale Out (Multi-Cluster) When...


SQL - Multi-Cluster Warehouse
ALTER WAREHOUSE bi_wh SET
  MIN_CLUSTER_COUNT = 1
  MAX_CLUSTER_COUNT = 3
  SCALING_POLICY = 'STANDARD';
-- STANDARD: starts new cluster when queries queue
-- ECONOMY: waits longer before scaling (saves credits, adds latency)

Identifying Spilling: The Key Signal


Spilling is the single most reliable indicator that your warehouse is undersized for a specific query. When a query's intermediate results exceed available memory, Snowflake "spills" data to disk:



Check spilling for recent queries:

SQL
SELECT query_id, query_text, warehouse_size,
       bytes_spilled_to_local_storage,
       bytes_spilled_to_remote_storage,
       total_elapsed_time / 1000 AS elapsed_sec
FROM snowflake.account_usage.query_history
WHERE start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
  AND bytes_spilled_to_remote_storage > 0
ORDER BY bytes_spilled_to_remote_storage DESC
LIMIT 20;

Dedicated Warehouses Per Workload


Don't share a single warehouse between ETL, BI, and ad-hoc queries. Here's why: your 3 AM ETL job starts a Large warehouse and takes 45 minutes. At 8 AM, an analyst runs a dashboard refresh on the same warehouse. The analyst's query either queues behind ETL or competes for resources with it.


A better setup for most teams:


WarehouseSizeAuto-SuspendPurpose
ETL_WHMedium60sScheduled pipeline runs (dbt, tasks, stored procedures)
BI_WHSmall, multi-cluster (1-3)120sDashboard queries, Tableau/Power BI refresh
ADHOC_WHX-Small60sAnalyst exploration, ad-hoc SQL
ML_WHLarge60sData science notebooks, model training queries

Analyzing Actual Usage with WAREHOUSE_METERING_HISTORY


SQL
SELECT warehouse_name,
       DATE_TRUNC('day', start_time) AS day,
       SUM(credits_used) AS total_credits,
       SUM(credits_used_compute) AS compute_credits,
       SUM(credits_used_cloud_services) AS cloud_credits
FROM snowflake.account_usage.warehouse_metering_history
WHERE start_time > DATEADD('month', -1, CURRENT_TIMESTAMP())
GROUP BY warehouse_name, day
ORDER BY day DESC, total_credits DESC;

Run this monthly. If a warehouse consistently uses less than 1 credit/day, consider downsizing. If it's burning 50+ credits/day, check whether the queries could be optimized before resizing.


Resource Monitors: Your Safety Net


Resource monitors cap credit consumption with actions at defined thresholds. Set them up before you need them, not after a $15,000 surprise.


SQL
-- Create a resource monitor with email alerts and auto-suspend
CREATE RESOURCE MONITOR etl_monitor
  WITH CREDIT_QUOTA = 500
  FREQUENCY = MONTHLY
  START_TIMESTAMP = IMMEDIATELY
  TRIGGERS
    ON 75 PERCENT DO NOTIFY
    ON 90 PERCENT DO NOTIFY
    ON 100 PERCENT DO SUSPEND;

-- Assign to a warehouse
ALTER WAREHOUSE etl_wh SET RESOURCE_MONITOR = etl_monitor;

A Sizing Decision Tree


Follow this path for each workload type:


  1. Start at X-Small. Run your representative queries. If most complete in under 10 seconds, stay here.
  2. Check the query profile. Look at the Query Profile tab in Snowflake's UI. If you see no spilling and no queuing, you're sized correctly.
  3. If queries are slow (30+ seconds) and spill to local storage: Try Small. Re-run the same queries.
  4. If queries spill to remote storage at Small: Move to Medium. Remote spilling is the definitive "too small" signal.
  5. If individual queries are fast but users experience queuing: Don't size up. Enable multi-cluster scaling instead.
  6. If a query doesn't speed up when you size up: The query isn't parallelizable. Optimize the SQL instead (better filters, fewer joins, clustering keys).

The critical gotcha: doubling the warehouse size doesn't halve query time. It depends entirely on how parallelizable the query is. A full table scan on a partitioned table scales nearly linearly. A single-row lookup or a recursive CTE won't speed up at all, regardless of warehouse size.


Key Takeaways



Frequently Asked Questions

Q: How much does each Snowflake warehouse size cost?

Warehouse sizes double in cost at each tier: X-Small = 1 credit/hour, Small = 2, Medium = 4, Large = 8, X-Large = 16, 2X-Large = 32, and so on. The dollar cost per credit depends on your Snowflake edition and contract (typically $2-4 per credit on-demand).

Q: What should I set auto-suspend to in Snowflake?

For interactive workloads, set auto-suspend to 60-120 seconds (1-2 minutes). The default 600 seconds (10 minutes) wastes credits since warehouses are billed per-second with a 60-second minimum. For ETL warehouses that run scheduled jobs, 60 seconds is sufficient.

Q: What does query spilling mean in Snowflake?

Spilling occurs when a query's intermediate results exceed the warehouse's available memory and must be written to local SSD (local spill) or remote storage (remote spill). Remote spilling is significantly slower. If you see remote spilling, your warehouse is undersized for that query.

Q: Does doubling warehouse size halve query time?

Not necessarily. Doubling the warehouse provides twice the compute resources, but the speedup depends on how parallelizable the query is. Highly parallel scans may see near-2x improvement. Sequential operations like single-row lookups or non-parallelizable sorts won't benefit much.

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

Burning Questions
About CelestInfo

Simple answers to make things clear.

Our AI insights are continuously trained on large datasets and validated by experts to ensure high accuracy.

Absolutely. CelestInfo supports integration with a wide range of industry-standard software and tools.

We implement enterprise-grade encryption, access controls, and regular audits to ensure your data is safe.

Insights are updated in real-time as new data becomes available.

We offer 24/7 support via chat, email, and dedicated account managers.

Still have questions?

Ready? Let's Talk!

Get expert insights and answers tailored to your business requirements and transformation.