Skip to Content
SaaS tokenminningReduce your Snowflake bill

How to reduce your Snowflake bill

Start with the warehouses consuming the most credits, stop paying for avoidable idle time, and remove repeated work. Then test whether a specific workload can run more cheaply on self-hosted open-source software. Moving one expensive reporting job is a smaller decision than replacing the whole warehouse.

Use your effective contract rate when converting credits to money. Lower consumption can extend a prepaid commitment without reducing this month’s cash payment; record both usage savings and the date spending can actually fall.

Find the warehouses to change first

Run this read-only query using a role with access to the relevant Snowflake Account Usage view. It ranks warehouse compute over the previous 30 complete calendar days:

SELECT warehouse_name, SUM(credits_used_compute) AS compute_credits FROM snowflake.account_usage.warehouse_metering_history WHERE start_time >= DATEADD(day, -30, CURRENT_DATE()) AND start_time < CURRENT_DATE() AND warehouse_id > 0 GROUP BY warehouse_name ORDER BY compute_credits DESC;

Expect one row per warehouse name, with the largest compute consumer first. This is a starting point, not a complete invoice: the view separates warehouse compute from cloud services, and its data is delayed. See the view’s columns, access requirements, and latency .

For the top warehouse, inspect when it runs and which jobs use it. Compare billed runtime with actual query activity before deciding whether the problem is idle capacity, expensive queries, or both. Separately inspect serverless features and billed cloud services using Snowflake’s compute cost views . Reconcile storage and transfer charges against the invoice too.

Stop idle runtime and repeated work

For a standard warehouse used by intermittent batch jobs, test a short auto-suspend interval. Replace BATCH_WH with your warehouse identifier and use a role authorized to modify it:

ALTER WAREHOUSE BATCH_WH SET AUTO_SUSPEND = 60 AUTO_RESUME = TRUE;

This sets a 60-second idle threshold; it does not impose a query timeout. Record the existing settings first so you can restore them. This example is not a configuration recommendation for Adaptive or Interactive warehouses.

Frequent suspension has tradeoffs: standard warehouses have a minimum charge when they resume, and suspension discards warehouse cache. Compare credits and completion time over a representative schedule, including cold starts. Snowflake explains the billing and cache considerations .

Next, change the work that wakes the warehouse:

  1. Reduce unnecessary refreshes. Agree on how fresh each output must be. A daily operational report may not need a full rebuild every five minutes.
  2. Batch compatible jobs. Test running small jobs together so long idle gaps can become suspended time. Preserve deadlines and measure contention.
  3. Process changed data. Where the transformation allows it, replace a repeated full rebuild with an incremental update. Test late arrivals, deletions, and a full reconciliation before relying on the new output.
  4. Benchmark warehouse sizes. Run the same workload on candidate sizes with comparable cache conditions. Choose based on credits per successful refresh and its deadline; a smaller warehouse that runs much longer may cost more.

If Dagster submits these jobs, change the schedule at the orchestrator as well. Reducing orchestration costs and reducing warehouse work are separate savings opportunities.

Contain the next spike

Assign a resource monitor to the warehouse and choose notification and suspension thresholds with the workload owner. Decide whether exceeding the budget should wait for running queries or cancel them. Test the behavior on a noncritical workload before applying it to production.

Resource monitors cover warehouses, not all Snowflake services. They do not control serverless or AI-service spending; monitor those with budgets and feature-specific controls. A suspension threshold is also not an exact invoice cap. See Snowflake’s resource monitor behavior and limitations .

Move suitable workloads to self-hosted open source

Choose the alternative by the workload you can remove. Neither option below is a drop-in replacement for every Snowflake feature.

AlternativeWorkload to pilotWhat you must replace or operate
ClickHouseRepeated analytical aggregations over event or product data, especially when several consumers need a database serviceData ingestion, table design, capacity, backups, access controls, and any required replication; validate SQL and connector differences
DuckDBA bounded batch report or transformation over exported files, running on your own workerScheduling, file storage, permissions, recovery, and serving the result; prove memory, disk, and concurrency requirements

ClickHouse’s open-source server  uses Apache 2.0. Start with a copy of one dataset and the actual queries that drive its Snowflake cost. Reproduce row counts, aggregates, and peak concurrency before estimating production capacity.

DuckDB  uses the MIT license and can query formats such as Parquet. It is useful when a job can own its execution process. For an embedded deployment, account for the single-writer-process concurrency model ; a batch benchmark alone does not establish suitability for a shared warehouse.

Prove the saving before cutting over

Run the candidate alongside Snowflake for a representative reporting cycle. Check results, freshness, failed-job recovery, peak load, and restore time. Include export and network charges during the pilot. Identify which Snowflake jobs and resources will actually stop after the move.

Monthly net saving = avoidable Snowflake spending - replacement compute, storage, backups, and network - additional operating hours × internal hourly cost - migration cost / amortization months

For an illustrative workload with 1,500/monthofavoidablespending,1,500/month of avoidable spending, 300/month of replacement infrastructure, four additional operating hours at 100/hour,and100/hour, and 4,800 of migration work spread over 12 months, the net saving is $400/month. These are hypothetical inputs, not a benchmark or hosting quote. If the Snowflake commitment remains payable, model that overlap separately before calling it a cash saving.

Cut over only the proven workload, stop its old schedule, and compare the next complete billing period with the baseline. Keep the original path available for rollback until the new output and recovery procedure are accepted.

Continue with SaaS tokenminning or reducing Salesforce costs.

Last updated on