Back to Blog
Tutorial

Snowflake Cost Control: Size Your Warehouses Before the Bill Does It for You

SkyTrainings Team•Editorial Team
15 October 2026
5 min read

The first Snowflake invoice that makes a manager call a meeting is rarely caused by a huge query. It is usually a warehouse somebody resized to Large for a demo, never resized back, and left running over a long weekend while nobody looked at a dashboard.


Snowflake charges for compute in credits, and compute lives in virtual warehouses. Storage is a separate and usually smaller line. So cost control is mostly a question of how your warehouses are sized, how long they stay awake, and who is allowed to start them.


How a Warehouse Spends Credits


A warehouse costs credits only while it is running. Billing is per second, with a 60-second minimum each time it resumes. Size sets the rate: every step up, from X-Small to Small to Medium and on, doubles the credits burned per hour.


Warehouse size and credit rate

1

Credit per hour on X-Small

4

Credits per hour on Medium

16

Credits per hour on Large


That doubling is the part worth memorizing. A Large warehouse running for one hour costs as much as sixteen X-Small hours. Going up a size is a decision about money, and it only pays off if the query finishes in roughly half the time. Often it does for big scans and joins. For a small dashboard query that already returns in two seconds, it just doubles the cost for the same answer.


Five Settings That Do Most of the Work


Before any clever tuning, get the boring settings right. Most accounts that overspend have at least three of these wrong.


A cost-control checklist for one warehouse
  1. 1

    Start small

    Create it at X-Small and size up only on evidence

  2. 2

    Auto-suspend

    Set it to a minute or two, not an hour

  3. 3

    Auto-resume

    Leave it on so users never notice the sleep

  4. 4

    Separate by workload

    One warehouse for loading, one for BI, one for ad hoc

  5. 5

    Add a resource monitor

    Cap the credits and get notified before the cap


Auto-suspend deserves the most attention. An idle warehouse still bills until it suspends, so a ten-minute timeout on a warehouse that serves one query an hour means paying for nine minutes of nothing each time. Dropping it to 60 seconds is usually safe because resume takes a second or two.


There is one honest trade-off. A suspended warehouse loses its local data cache, so the next query reads from storage again and may feel slower. For a BI warehouse hit constantly all day, a slightly longer timeout can be cheaper in practice than constant cold starts. For a nightly load job, suspend immediately.


Splitting warehouses by workload matters for a second reason: you can see who spent what. When the loading team, the analysts and the data scientists all share one warehouse, the credit graph tells you nothing. Give each its own and the graph becomes an answer.


Find What Is Burning Credits


You do not need a third-party tool to start. Snowflake exposes usage through views in the SNOWFLAKE.ACCOUNT_USAGE schema. Two are worth bookmarking.


WAREHOUSE_METERING_HISTORY shows credits consumed per warehouse per hour. Group it by day and warehouse, and the expensive one is obvious within a minute. Then open QUERY_HISTORY and filter to that warehouse and period. Sort by total elapsed time, and look at the queries that ran longest or scanned the most data. A single report that scans a whole table every fifteen minutes will stand out immediately.


These views are populated with a delay, so a query you ran five minutes ago may not appear yet. Check again later before concluding something is missing.


Cheap Wins Inside the Queries


Once the warehouse settings are sane, look at what runs on them.


  • Repeated identical queries can be answered from the result cache, which holds results for 24 hours if the underlying data has not changed. A dashboard that refreshes the same query all morning may cost nothing after the first run.
  • Selecting only the columns you need matters, because Snowflake stores data by column. A SELECT star on a wide table reads far more than the report needs.
  • Filtering on a date or key column lets Snowflake skip micro-partitions it can prove are irrelevant. Wrapping that column in a function can stop the skipping.

  • None of this requires changing infrastructure. It is a code review, and it is usually the cheapest hour of work in the whole project.


    Put a Ceiling on It


    A resource monitor sets a credit quota for an account or for specific warehouses over a period. You can have it send a notification at, say, 75 percent and suspend the warehouse at 100 percent. Create one per warehouse for non-production work first. A runaway test job hitting a hard cap is an annoyance. The same job with no cap is an invoice.


    Keep one rule of thumb for the whole account: nothing should be able to spend unlimited credits without a person having chosen that.


    Sizing up versus fixing the query
    01

    Size up

    Worth it when a big scan or join takes minutes

    02

    Fix the query

    Worth it when a small query is just badly written

    03

    Split warehouses

    Worth it when teams block or bill each other

    04

    Resource monitor

    Worth it always, as a safety net


    Next Step


    Warehouse behaviour, query optimization and cost management are part of the performance module in the Snowflake Training course at SkyTrainings, which runs 2.5 months and includes real-world projects.

    SnowflakeCost OptimizationVirtual WarehousesData WarehousingPerformance