Skip to content
METRIC OAK

New: the 3-week Data Platform Assessment: fixed fee, priced roadmap. See what's included →

How-to

How to set up Snowflake resource monitors: a step-by-step guide

How to set up Snowflake resource monitors to cap warehouse credit spend: account versus warehouse monitors, choosing quotas from metering history, NOTIFY and SUSPEND thresholds, SQL examples, finding unmonitored warehouses, and what monitors do not cover.

Hemant Walchale

Hemant Walchale
· 4 min read

Snowflake bills by the second, which is great until a warehouse is sized up for one heavy job and nobody sizes it back down. Resource monitors put a ceiling on warehouse credits per day, week or month, and warn you well before you reach it. They take minutes to create; the work is choosing sensible quotas and making sure every warehouse is covered.

A Snowflake resource monitor with a monthly credit quota of 1,000 on a production warehouse, 680 credits used, and triggers at 50 percent notify, 75 percent notify, 90 percent suspend and 100 percent suspend immediately. An account monitor covers all warehouses as a safety net; warehouse monitors set a budget per team or workload. Monitors cover warehouses only; serverless features need a budget.

How resource monitors work

  • Credit quota: credits allowed per interval. Usage resets at the start of each interval.
  • Schedule: by default monthly from creation; you can set FREQUENCY (daily, weekly, monthly, yearly or never) with a START_TIMESTAMP.
  • Actions at a percentage of the quota, which can go above 100%:
    • NOTIFY: alert only (up to five per monitor).
    • SUSPEND: suspend assigned warehouses once running statements finish.
    • SUSPEND_IMMEDIATE: suspend now and cancel running statements.
  • Levels: one account monitor covering all warehouses, plus any number of warehouse monitors. Each warehouse can belong to only one warehouse monitor.
  • Only ACCOUNTADMIN can create monitors, but it can grant MONITOR or MODIFY on a monitor to other roles.

Step 1: Pick quotas from real usage

Look at the last three months of credits per warehouse before choosing numbers:

SELECT warehouse_name,
       DATE_TRUNC('month', start_time) AS month,
       SUM(credits_used) AS credits
FROM snowflake.account_usage.warehouse_metering_history
WHERE start_time >= DATEADD(month, -3, CURRENT_DATE)
GROUP BY 1, 2
ORDER BY 1, 2;

Set each warehouse’s quota at its normal monthly usage plus headroom (for example 20 to 30%), so the monitor flags real anomalies and not normal growth.

Step 2: Create a warehouse monitor

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE RESOURCE MONITOR rm_prod_etl
  WITH CREDIT_QUOTA = 1000
       FREQUENCY = MONTHLY
       START_TIMESTAMP = IMMEDIATELY
  TRIGGERS ON 50 PERCENT DO NOTIFY
           ON 75 PERCENT DO NOTIFY
           ON 90 PERCENT DO SUSPEND
           ON 100 PERCENT DO SUSPEND_IMMEDIATE;

ALTER WAREHOUSE wh_prod_etl SET RESOURCE_MONITOR = rm_prod_etl;

A monitor does nothing until it is assigned. For production pipelines that must finish, you may prefer NOTIFY only, plus an on-call process, over automatic suspension. Decide that with the pipeline owner, not after the first outage.

Step 3: Add an account-level safety net

CREATE OR REPLACE RESOURCE MONITOR rm_account
  WITH CREDIT_QUOTA = 5000
  TRIGGERS ON 80 PERCENT DO NOTIFY
           ON 100 PERCENT DO NOTIFY
           ON 110 PERCENT DO SUSPEND;

ALTER ACCOUNT SET RESOURCE_MONITOR = rm_account;

Set it above the sum of normal usage. Its job is to catch the warehouse nobody assigned and the month something went badly wrong.

Step 4: Make sure notifications arrive

Notifications are off until enabled. Account administrators need notifications turned on and a verified email address. Non-admin users can receive email for warehouse monitors only (up to five users per monitor), each with a verified email.

Step 5: Find warehouses without a monitor

SHOW WAREHOUSES;
SELECT "name", "size"
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE "resource_monitor" = 'null';

Run this regularly, or as a scheduled check, because new warehouses do not get a monitor automatically.

Step 6: Cover what monitors cannot

Resource monitors only see warehouses. Use budgets for serverless features (Snowpipe, automatic clustering, materialized views, search optimization) and to alert on spend across groups of objects. And remember a monitor caps spend; it does not make queries cheaper. Pair it with warehouse right-sizing, auto-suspend settings and query tuning.

The short version

Size quotas from three months of metering history, create a monitor per important warehouse with NOTIFY at 50 and 75% and suspension near 90 to 100%, add an account-level safety net, turn on notifications, check regularly for unmonitored warehouses, and use budgets for serverless costs. Our cloud data cost optimization service sets these up alongside right-sizing.

Related: Snowflake pricing explained, where data platform costs hide, how to set up Databricks compute policies and how to size a Microsoft Fabric capacity.

Sources

Further reading from other practitioners

Not sure where your own platform stands? Take the free 3-minute data platform scorecard, or see how we work on Snowflake. Unfamiliar terms are explained in the data engineering glossary.

Frequently asked questions

What is a Snowflake resource monitor?

A resource monitor tracks the credits used by warehouses, including the cloud services that support them, against a credit quota for a period such as a month. At thresholds you choose, it can notify administrators, suspend warehouses after running queries finish, or suspend them immediately and cancel running queries.

Do resource monitors cover serverless features?

No. Resource monitors only track warehouses. Serverless features such as Snowpipe, automatic clustering and materialized view maintenance are not controlled by them; use Snowflake budgets to track and alert on those.

Should a resource monitor suspend at 100 percent?

Set suspension a little below the limit you actually care about. Monitors are not exact, and warehouses can keep consuming credits briefly after a threshold is reached, so Snowflake suggests thresholds such as 90 percent when you need strict control.

Have 30 minutes? Get a senior architect’s view of your data platform.

No sales deck. You talk to the engineer who would lead the work.

Book an architecture review