Suspend and Resume Snowflake Warehouses on a Schedule
AUTO_SUSPEND handles idle time, a cron task handles the hard stop, and AUTO_RESUME brings the warehouse back when the first query arrives.
A Snowflake virtual warehouse bills credits only while its compute resources are running, per second after a one-minute minimum each time it starts. Suspending it removes all compute nodes; databases, tables and stages are storage and are not touched. This guide sets the idle timeout, adds a scheduled suspend for the evening, and shows how to confirm the state.
Privileges
To suspend, resume or change a warehouse, the role needs OPERATE (suspend and resume) and MODIFY (change properties) on it, or the account-level MANAGE WAREHOUSES privilege, which Snowflake defines as equivalent to MODIFY, MONITOR and OPERATE on every warehouse.
GRANT OPERATE, MODIFY ON WAREHOUSE analytics_dev_wh TO ROLE platform_ops;1. Set a sensible AUTO_SUSPEND
AUTO_SUSPEND is in seconds. The default is 600. Snowflake’s suspend process polls roughly every 30 seconds, so use multiples of 30. A value of 0 or NULL means the warehouse never suspends, which Snowflake warns can consume significant credits.
ALTER WAREHOUSE analytics_dev_wh SET AUTO_SUSPEND = 300 AUTO_RESUME = TRUE;With AUTO_RESUME = TRUE, the warehouse resumes when a new query is submitted, so there is usually no need to schedule a morning start at all.
2. Suspend on a timetable
Auto-suspend never fires while something keeps querying: a BI dashboard on a refresh loop, a monitoring probe. A scheduled suspend is the backstop. Snowflake tasks accept a cron schedule with a time zone:
CREATE TASK ops.suspend_dev_wh_evening SCHEDULE = 'USING CRON 0 20 * * 1-5 Europe/London' AS ALTER WAREHOUSE analytics_dev_wh SUSPEND;
ALTER TASK ops.suspend_dev_wh_evening RESUME;New tasks are created suspended, hence the ALTER TASK ... RESUME. The owning role needs EXECUTE TASK on the account, plus EXECUTE MANAGED TASK if the task uses serverless compute (no WAREHOUSE = clause) or USAGE on the warehouse that runs it. Make sure the task does not run on the warehouse it is suspending.
If AUTO_RESUME is FALSE on a warehouse, add a matching morning task with ALTER WAREHOUSE analytics_dev_wh RESUME IF SUSPENDED;. The IF SUSPENDED clause stops the statement failing when the warehouse is already running.
3. What happens to running queries
Suspending is allowed at any time. Snowflake shuts idle compute down immediately, lets compute that is still executing statements finish them, and only then marks the warehouse Suspended (the resources in between are in “quiesce” mode). Suspend also drops the warehouse cache, so the first queries after resuming can be slower until it rebuilds. There is no benefit to suspending within the first 60 seconds after a start, because that minute is already billed.
4. Verify
SHOW WAREHOUSES LIKE 'analytics_dev_wh';The state column reads SUSPENDED, STARTED or RESIZING, and running and queued show the statement counts. Task outcomes are in the task history.
ZopNight for Snowflake
ZopNight connects Snowflake as a standalone account using a key-pair JWT or a personal access token, discovers warehouses alongside databases, tables and resource monitors, and can suspend and resume warehouses on the same cron schedules, groups and overrides it uses for cloud resources. Its Snowflake recommendations cover idle warehouses, resizing, auto-suspend and resource-monitor guardrails. See Snowflake warehouse scheduling and the Snowflake cost optimization guide.