Tactic 1 โ Quick Win
Set Auto-Suspend to 60 Seconds on All Warehouses
Saves 20โ35% on compute
Default auto-suspend is 10 minutes. Set to 60 seconds on all warehouses. You lose nothing โ warehouses resume in <1 second. The 60-second minimum billing per resume means any queries that run <60 seconds still cost the same, but idle time drops to near-zero.
ALTER WAREHOUSE my_wh SET AUTO_SUSPEND = 60;
Tactic 2 โ Quick Win
Right-Size Your Warehouses
Saves 30โ50% on compute
An X-Large warehouse costs 16x a Small warehouse. But most analyst queries run just as fast on a Medium. Run your top 20 queries on a Medium warehouse and measure execution time vs. X-Large. If <2x difference, downsize immediately.
SELECT warehouse_name, AVG(execution_time), SUM(credits_used)
FROM snowflake.account_usage.query_history
WHERE start_time > DATEADD(day, -30, CURRENT_TIMESTAMP)
GROUP BY 1 ORDER BY 3 DESC;
Tactic 3 โ Quick Win
Enable Result Cache in BI Tools
Saves 10โ25% on dashboard refreshes
Configure Tableau, Looker, and Metabase to use Snowflake's result cache. In Tableau: set USE_CACHED_RESULT=true at the data source level. In Looker: enable persistent derived tables with caching. Dashboard refreshes that hit cache use 0 credits.
Tactic 4 โ Moderate Effort
Reduce Time Travel Retention
Saves 20โ40% on storage
Snowflake defaults Time Travel to 1 day (Standard) or 90 days (Enterprise). Most teams don't need 90-day recovery. Reduce large tables to 1-7 days where recovery is unrealistic anyway. Enterprise plan = you're paying double storage for 90 days of snapshots on every table.
ALTER TABLE large_events_table SET DATA_RETENTION_TIME_IN_DAYS = 7;
Tactic 5 โ Moderate Effort
Use Warehouse Resource Monitors
Prevents cost spikes (up to 100% overage)
Resource monitors cap credit usage per warehouse per period. Set weekly limits and alert/suspend thresholds. Prevents a runaway ELT job or a complex ad-hoc query from burning $10K in a weekend. Every warehouse should have a resource monitor.
CREATE RESOURCE MONITOR monthly_cap
CREDIT_QUOTA = 5000
TRIGGERS ON 80 PERCENT DO NOTIFY
ON 100 PERCENT DO SUSPEND;
Tactic 6 โ Moderate Effort
Separate Workloads Across Dedicated Warehouses
Saves 15โ30% by right-sizing by workload
ETL jobs and analyst ad-hoc queries have different sizing needs. A shared Large warehouse stays up for 10-minute auto-suspend windows between small queries. Separate them: Small warehouse (auto-suspend 60s) for analysts, X-Large (burst only) for nightly batch. Total credits drop 20โ35%.
Tactic 7 โ Technical Investment
Implement Materialized Views for Heavy Dashboards
Saves 30โ60% on repetitive queries
Heavy dashboard queries (aggregate 12-month data, complex JOINs) often run identically dozens of times per day. Materialized views pre-compute these results and refresh automatically. Query hits the materialized view instead of the raw tables โ 10โ100x less compute per query.
Tactic 8 โ Technical Investment
Prune External Tables and Clone Tables
Saves 10โ30% on storage
Clone tables are a common developer convenience that nobody deletes. Run a storage audit โ you'll often find clone tables from development/testing that are 3โ5x your production data size. Also prune VARIANT/OBJECT columns where JSON was loaded without flattening (JSON in Snowflake is 3โ5x larger than columnar).
Tactic 9 โ Contract Negotiation
Negotiate Annual Capacity Commit vs. Pay-as-you-go
Saves 30โ50% vs. on-demand pricing
Snowflake on-demand is $2โ$4/credit. Annual capacity commit rates are $1.20โ$2/credit (40โ50% cheaper). If you're spending $10K+/month consistently, an annual commit pays back in 60โ90 days. Ask your rep for a capacity commitment based on your last 90 days of actual usage.