Skip to content
Cloud Efficiency Hub

Missing Resource Monitors and Budgets on Snowflake Accounts

The short version

Snowflake consumption is open-ended by default: any role that can use a warehouse can keep it running, and serverless features and AI services consume credits without a warehouse at all.

PointFive Research

Cloud cost research at PointFive

Category
Compute
Reference
CER-0513
Type
Governance Gap

Explanation

Why the waste happens and who it affects.

Without resource monitors or budgets, nothing notifies anyone or stops spend when a warehouse is resized and forgotten, a pipeline loops, a runaway query holds a warehouse open, or a new AI or serverless workload ramps up. The overrun is found when someone reads the usage statement, after the credits are gone.

Snowflake provides two native guardrails that serve different purposes. Resource monitors set a credit quota on warehouses and can notify, suspend warehouses after running queries finish, or suspend immediately and cancel running queries. Budgets set a monthly spending limit on the account or on custom groups of objects, including serverless features and AI services that resource monitors cannot track, and send notifications when the limit is projected to be exceeded. Accounts that have neither, or that have a single monitor with only a notify action that nobody reads, have no spend control beyond manual review.

Billing model

The pricing dimensions that drive this cost.

Warehouse credits
Billed per second while a warehouse runs, with a 60-second minimum per start or resume, at an hourly rate set by warehouse size
Serverless and AI credits
Charged for Snowflake-managed compute such as tasks, pipes, clustering, replication and Cortex features, outside any warehouse
Resource monitor scope
Tracks credits used by warehouses and the cloud services supporting them only; it cannot track serverless features or AI services
Budget scope
A monthly spending limit on compute costs for the account or a custom group of objects, including supported serverless features and AI services

How to detect

5 checks to find it in your estate.

  • Run SHOW RESOURCE MONITORS to check whether an account-level monitor exists, and SHOW WAREHOUSES to find warehouses whose resource_monitor column is empty
  • For existing monitors, review credit_quota, frequency and the notify and suspend thresholds; a monitor with only Notify actions and no suspend threshold does not cap spend
  • Check in Snowsight Admin > Cost management > Budgets whether the account budget is activated, and list custom budgets with SHOW SNOWFLAKE.CORE.BUDGET INSTANCES
  • Compare budgets against the largest non-warehouse consumers in METERING_DAILY_HISTORY by SERVICE_TYPE (for example AI_SERVICES, SERVERLESS_TASK, PIPE, AUTO_CLUSTERING, REPLICATION) to find spend that no budget covers
  • Look back through METERING_DAILY_HISTORY or WAREHOUSE_METERING_HISTORY for past credit spikes that were not caught until after the fact, as a sign that thresholds are missing or too loose

How to fix

5 ways to remove the waste.

  • Create an account-level resource monitor (only ACCOUNTADMIN can create monitors) with a credit quota and Notify thresholds, plus a Notify & Suspend threshold as a backstop, for example CREATE RESOURCE MONITOR ... WITH CREDIT_QUOTA = ... TRIGGERS ON 75 PERCENT DO NOTIFY ON 90 PERCENT DO SUSPEND; Snowflake suggests suspending below 100% because Suspend waits for running queries to finish
  • Assign warehouse-level monitors to high-spend or ad-hoc warehouses with ALTER WAREHOUSE ... SET RESOURCE_MONITOR; each warehouse can have only one monitor, and an account can have only one account-level monitor
  • Use Notify & Suspend Immediately only where cancelling in-flight queries is acceptable, and expect some overrun, since Snowflake notes warehouses can take time to suspend after a threshold is reached
  • Activate the account budget (CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ACTIVATE() and SET_SPENDING_LIMIT) and create custom budgets for serverless and AI workloads and compute pools that resource monitors cannot see
  • Route budget notifications to email, a cloud queue or a webhook that reaches the owning team, and optionally attach stored procedures that act at thresholds, since budgets by themselves only notify; the default budget refresh interval is up to 6.5 hours

Documentation

Vendor references for pricing and configuration.