How to Reduce Snowflake Costs: A Practical Guide

Identify Snowflake cost drivers and evaluate warehouse sizing, query patterns and operating controls against your workload requirements.

By Cloud Data Consulting
How to Reduce Snowflake Costs: A Practical Guide - Cloud Data Consulting

Snowflake’s consumption-based pricing model offers flexibility, but without proper governance, costs can escalate quickly. After optimizing Snowflake environments for dozens of clients, we’ve identified the strategies that consistently deliver the biggest savings.

Understanding Your Snowflake Bill

Understanding your bill
Where the Credits Actually Go
Compute
Storage
60–80% of a typical bill
Storage
Services
Compute
Credits burn per second a warehouse is running — idle time included. Every lever with real leverage lives here.
Storage
Cheaper than compute, but Time Travel and Fail-safe quietly multiply what you think you're storing.
Cloud Services
Metadata operations, query compilation, and access control. Rarely the problem, rarely worth the attention.
Start with WAREHOUSE_METERING_HISTORY — you cannot optimize a bill you haven't attributed.

Before optimizing, you need to understand where your credits are going. Snowflake costs break down into three categories:

  • Compute: Virtual warehouse usage (typically 60-80% of your bill)
  • Storage: Data stored in tables, stages, and Time Travel
  • Cloud Services: Metadata operations, query compilation, access control

Most optimization effort should focus on compute, where the biggest savings live.

The playbook
Seven Levers, In Order of Payoff
1
Biggest win
Right-size warehouses
One size too large doubles the cost of that workload. Scale up only while gains stay linear.
2
Biggest win
Auto-suspend at 1 minute
Choose a workload-appropriate inactivity timeout. A value of zero disables auto-suspend.
3
Optimize queries
Drop SELECT *, cluster large filtered tables, and let result caching do free work.
4
Separate workloads
Loading, transformation, BI, and ad hoc each get their own warehouse — and their own right size.
5
Clone, don't CTAS
Create a recovery copy without duplicating all the data. Storage can grow as the clone and source change.
6
Resource monitors
Track warehouse credits with alerts and suspension thresholds. Review serverless usage separately.
7
Transient for interim data
Permanent tables have 7-day Fail-safe. Transient and temporary tables have none; choose recovery protection deliberately.
Up to 70%
Snowflake cost savings we've seen. Results depend on starting workloads and configuration.

1. Right-Size Your Warehouses

The most common mistake we see is running oversized warehouses. A larger warehouse has a higher credit rate, but total workload cost also depends on how quickly it finishes. Compare execution time and credits consumed before choosing a size.

What to do:

  • Audit warehouse utilization using WAREHOUSE_METERING_HISTORY
  • Look for warehouses consistently using less than 50% of available resources
  • Test smaller sizes — Snowflake makes it easy to resize without downtime
  • Use multi-cluster warehouses for concurrent workloads instead of oversizing

A practical sizing approach: Run your production workload (or equivalent) at each warehouse size, starting small. Measure execution time and cost at each tier. Stop scaling up when you stop seeing linear improvements — that’s your sweet spot.

2. Configure Auto-Suspend and Auto-Resume

Idle warehouses burn credits. Set auto-suspend to the minimum practical value.

Choose settings for the workload:

  • Ad-hoc/BI warehouses: test a short inactivity timeout against query frequency and the value of a warm warehouse cache.
  • ETL and loading warehouses: use a nonzero inactivity timeout, or explicitly suspend after the job completes when no concurrent work needs the warehouse.
  • AUTO_SUSPEND = 0 disables automatic suspension; it does not suspend immediately. Snowflake checks inactivity periodically, so the setting is not a precise job-completion timer.

Review the default 10-minute timeout rather than applying one setting everywhere. Frequent suspension and resumption can trade idle savings for cache loss and minimum billing periods. See Snowflake’s warehouse settings.

Auto-resume is equally important — warehouses should start automatically when queries arrive, eliminating the need for manual intervention.

3. Optimize Your Queries

Inefficient queries waste compute. Focus on the highest-impact improvements:

  • Avoid SELECT *: Only query the columns you need. Snowflake’s columnar storage benefits enormously from column pruning.
  • Use clustering keys on large tables queried with predictable filters
  • Leverage result caching: Repeated identical queries are free when results are cached
  • Minimize data scanning with proper partition pruning and micro-partition alignment

4. Separate Workloads by Warehouse

Don’t run everything on one warehouse. Separate workloads to right-size each:

  • Loading warehouse: Sized for the load, with a nonzero inactivity timeout or explicit post-job suspension
  • Transformation warehouse: Medium, scaled for dbt/ELT jobs
  • BI warehouse: Medium with multi-cluster for concurrent users
  • Ad-hoc warehouse: Small with generous timeouts

5. Use Zero-Copy Clones, Not CTAS Backups

The expensive anti-pattern
Backing Up a Table Before Every ETL Run
Avoid CTAS backup
CREATE TABLE my_table_backup AS
SELECT * FROM my_table;
ComputeFull table scan, every run
StorageA second physical copy
On billion-row tablesThousands per month
Use instead Zero-copy clone
CREATE TABLE my_table_backup
CLONE my_table;
ComputeNo initial data copy
StorageShares micro-partitions
Point-in-time recoveryRecovery copy; storage can grow
We've seen clients run CTAS on multi-billion row tables before every ETL job. Switching to clones eliminated thousands of dollars of monthly waste and shortened the run.

One of the most expensive anti-patterns we see: using CREATE TABLE AS SELECT (CTAS) to create backup copies of tables before ETL runs. This wastes both compute and storage.

Instead, use zero-copy clones:

  • CREATE TABLE my_table_backup CLONE my_table; creates a clone without initially copying the table’s data
  • Clones initially share micro-partitions; subsequent changes and retained historical data can add storage costs. See Snowflake’s storage considerations
  • Perfect for point-in-time recovery if an ETL job goes wrong
  • We’ve seen customers running CTAS on multi-billion row tables before every ETL run — switching to clones eliminated thousands of dollars in monthly waste

6. Govern Credit Usage with Resource Monitors

Set up resource monitors to prevent runaway costs:

  • Create monitors per warehouse and per account — granular monitoring catches issues faster than account-level-only alerts
  • Set warning thresholds at 75% and 90% of budget
  • Configure suspension thresholds to limit warehouse usage; monitoring delays and other charges mean these are not an exact account-wide spending cap
  • Review and adjust monthly

Resource monitors cover warehouse usage, not all serverless or AI service charges. Review those separately. See resource monitor limitations.

7. Optimize Storage Costs

Storage is cheaper than compute, but can still surprise you:

  • Permanent tables have a fixed 7-day Fail-safe period — it is not adjustable. Transient and temporary tables have no Fail-safe, so use them only where their more limited recovery protection fits the data.
  • Use transient tables for intermediate processing — staging tables, ETL intermediates, and any table where the data can be recreated from source
  • Make schemas transient if your tool doesn’t support creating transient tables directly — all tables created in a transient schema inherit the transient property
  • Watch out for Dynamic Tables doing full refreshes — if a Dynamic Table isn’t transient, every full refresh generates new micro-partitions that accumulate 7 days of Fail-safe storage. On large tables, this can create enormous hidden storage costs. The chart below shows a real client environment where storage spiked from 512GB to over 2TB in just one week due to this issue:

Dynamic Table Fail-safe storage explosion

  • Reduce Time Travel retention to 1 day for non-critical and staging tables
  • Drop unused tables and temporary objects regularly

What We’ve Seen in Practice

Across our 20+ Snowflake client engagements, we’ve seen cost reductions of up to 70% using these strategies as part of data warehouse modernization projects. Savings depend on the starting workloads and configuration. The biggest wins usually come from warehouse right-sizing and auto-suspend configuration — changes that can take hours to implement and save thousands per month.

Need Help Optimizing Your Snowflake Costs?

Whether you’re optimizing an existing deployment or planning a cloud migration, we offer Snowflake cost optimization assessments that identify specific savings opportunities in your environment. Schedule a discovery call to discuss your Snowflake spending.

Share: