If you're reading this, your Snowflake bill probably looks like this: it grew. Then it grew again. Then your CFO sent you a Slack message with a screenshot of last quarter's spend and a single question mark.
Here's the truth nobody tells you: most Snowflake accounts waste 25–40% of their credits. Not because the platform is expensive — it's brilliantly priced — but because the defaults reward you for easy, not for cheap.
After auditing dozens of Snowflake accounts, I've seen the same 7 patterns drain budgets over and over. Here's the playbook.
Pattern 1: The 24/7 Warehouse Nobody Asked For
The waste: A warehouse left running all night because someone forgot to set AUTO_SUSPEND.
A Medium warehouse left always-on burns ~$600/day in credits even if nobody queries it. Multiply by 30 days and a few warehouses and you have a 5-figure monthly leak.
The fix (1 SQL statement):
ALTER WAREHOUSE ANALYTICS_WH SET AUTO_SUSPEND = 60;
Expected savings: 20–40% of warehouse credits.
Pattern 2: Auto-Suspend Set to 5+ Minutes
Imagine this query pattern:
- Query at 9:00 AM (runs 30 seconds)
- Query at 9:08 AM (runs 30 seconds)
- Query at 9:18 AM (runs 30 seconds)
With a 10-minute auto-suspend, your warehouse is "active" for the entire 18 minutes even though you only queried for 1.5 minutes total.
The fix:
ALTER WAREHOUSE BI_WH SET AUTO_SUSPEND = 60;
Expected savings: 10–25% on warehouses with bursty query patterns.
Pattern 3: The X-Large Warehouse Running Tiny Queries
The waste: Snowflake credits scale 2x per size tier. An X-Large warehouse costs 16x more per hour than an X-Small. If 75% of your queries finish in under 10 seconds, you're absurdly over-provisioned.
Diagnostic SQL (run this — it's eye-opening):
SELECT
warehouse_name,
warehouse_size,
COUNT(*) AS query_count,
AVG(execution_time)/1000 AS avg_seconds,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY execution_time) / 1000 AS median_seconds,
SUM(credits_used_cloud_services) AS credits
FROM snowflake.account_usage.query_history
WHERE start_time > DATEADD(day, -30, CURRENT_TIMESTAMP())
GROUP BY 1, 2
ORDER BY credits DESC;
If your median query is under 10 seconds on a Large or X-Large, you're paying for capacity you don't use.
Expected savings: 30–50% on warehouse credits.
Pattern 4: 90-Day Time Travel on Dev Schemas
The waste: Time Travel multiplies your storage cost by retention days. 90 days on dev/staging? You're paying full storage prices for data nobody will ever restore.
The fix:
-- Drop dev/staging time-travel to 1 day
ALTER SCHEMA DEV_DB.STAGING SET DATA_RETENTION_TIME_IN_DAYS = 1;
-- Production tables that truly need recovery: keep 7-30 days
ALTER TABLE PROD_DB.ORDERS SET DATA_RETENTION_TIME_IN_DAYS = 7;
Expected savings: 40–80% on storage costs in dev/staging environments.
Pattern 5: Multi-Cluster Always-On
The fix: Configure auto-scale, not always-on.
ALTER WAREHOUSE BI_WH SET
MIN_CLUSTER_COUNT = 1,
MAX_CLUSTER_COUNT = 4,
SCALING_POLICY = 'STANDARD';
Expected savings: 20–60% on multi-cluster warehouses.
Pattern 6: The Forgotten Resource Monitor
A runaway query at 2 AM can torch $10K before anyone notices.
The fix:
CREATE OR REPLACE RESOURCE MONITOR BI_WH_MONTHLY
WITH CREDIT_QUOTA = 5000
FREQUENCY = MONTHLY
TRIGGERS
ON 75 PERCENT DO NOTIFY
ON 90 PERCENT DO SUSPEND
ON 100 PERCENT DO SUSPEND_IMMEDIATE;
ALTER WAREHOUSE BI_WH SET RESOURCE_MONITOR = BI_WH_MONTHLY;
This single guardrail has saved teams 5-figure incident bills.
Pattern 7: Nobody Reviews the Bill
The most expensive Snowflake accounts I've seen aren't the ones with bad config — they're the ones where nobody owns cost.
The fix: Make Snowflake cost visible weekly.
- Set a weekly Slack alert on warehouse-level spend
- Post the top 5 spending warehouses to a #finops channel every Monday
- Assign a single owner per warehouse
Expected savings: 10–20% just from awareness alone.
TL;DR
| Pattern | Avg savings | Time to fix |
|---|
| 1. Always-on warehouses | 20–40% | 1 SQL statement |
| 2. Long auto-suspend | 10–25% | 1 SQL statement |
| 3. Over-provisioned size | 30–50% | 1 week test |
| 4. Long time-travel | 40–80% on storage | 1 SQL statement per schema |
| 5. Multi-cluster always-on | 20–60% | 1 SQL statement |
| 6. No resource monitors | Caps incident risk | 10 minutes |
| 7. No weekly review | 10–20% | 1 hour to set up |
The cheapest Snowflake account isn't the one with the smallest warehouse. It's the one with the tightest feedback loop.
Take 60 seconds to find out where you stand: Run the free Snowflake Cost Health Score.