The 3 AM Story Nobody Tells You
It's 3 AM in your data center. Nobody's running queries. Your analysts are asleep. Your dashboards stopped refreshing at midnight.
But your Snowflake bill is still ticking up — at $0.12 per credit-second.
If you have a Medium warehouse left "running" overnight, that's $208 burned every 8 hours of idle time. Multiply by 30 nights and you've quietly spent $6,240/month on absolutely nothing.
This is the #1 silent waste pattern in Snowflake. And it's almost always invisible until someone audits the account.
How It Happens
Snowflake bills based on active warehouse time, not query time. A warehouse is "active" until it auto-suspends. The default auto-suspend is 600 seconds (10 minutes) — and many teams crank it to 30+ minutes "to avoid cold starts."
So when your last analyst runs a query at 6:47 PM and goes home, your warehouse stays "active" until 6:57 PM. Then it suspends. Usually.
But here's the trap: if any workload — a CI pipeline, a Tableau scheduled refresh, a Looker auto-job — touches that warehouse at 11:30 PM, the timer resets. And if that auto-job runs every hour all night...
Your warehouse never actually suspends. It runs 24/7, billing every credit-second, while your office is empty.
How to Diagnose This in 60 Seconds
Run this SQL in your Snowflake account (read-only — totally safe):
SELECT
warehouse_name,
COUNT(*) AS sessions,
SUM(credits_used) AS total_credits,
ROUND(SUM(credits_used) * 4, 2) AS estimated_dollars,
ROUND(SUM(credits_used) / 24, 2) AS avg_credits_per_hour
FROM snowflake.account_usage.warehouse_metering_history
WHERE start_time > DATEADD(day, -7, CURRENT_TIMESTAMP())
AND HOUR(start_time) BETWEEN 22 AND 6
GROUP BY 1
ORDER BY total_credits DESC;
If you see warehouses with significant overnight credit consumption and no batch ETL workload, you've found gold.
The Fix (One SQL Statement Per Warehouse)
ALTER WAREHOUSE BI_WH SET AUTO_SUSPEND = 60;
That's it. Set every non-mission-critical warehouse to auto-suspend after 60 seconds of idle.
For dashboards with sub-second SLA needs, consider:
- Result caching (Snowflake caches identical query results for 24 hours by default — it's free)
- Materialized views for common aggregations
- A dedicated tiny warehouse (X-Small) just for cached lookups
"But What About My ETL Pipeline?"
| Workload type | Auto-suspend setting |
|---|
| Interactive analysts (BI, ad-hoc) | 60s |
| Scheduled dashboards | 60–300s |
| Batch ETL (Airflow, dbt) | 60s — let warehouse spin up per job |
| ML training | 60s — these are long-running anyway |
| Real-time / sub-second BI | 300–600s, but consider caching first |
There's almost no workload that genuinely needs 30+ minute auto-suspend.
Stop the Bleeding Tonight
Run our free Snowflake Cost Health Score to find out if your account has this problem. 60 seconds. No signup. No credentials shared.
You'll get a grade (A–F), an estimated $-amount being wasted monthly, and the top 3 fixes specific to your setup.