> Fermenting
← All 50 Days
Day 26 of 50
D2: Account & Governance Week 4
DAY 26

Snowflake Resource Monitors & Credit Calculation Explained

Resource monitors cap and track credit usage on virtual warehouses, and the monitor itself costs nothing to run. That second fact is the answer to official sample question two on the C03 exam. Today also locks in the credit doubling table from XS to 6XL. The per-second billing rule with its 60-second minimum sits alongside it, plus the 10% cloud services allowance. Together they are the math the exam expects you to do in your head.

📘

Today’s Concept

Micro-Concept 1: What a Resource Monitor Is, and Why It Is Free

A resource monitor is an account-level governance object that tracks credit consumption by virtual warehouses. It can send notifications, suspend warehouses after their running queries finish, or suspend them immediately when a credit threshold is reached.

The single most testable fact is what the monitor itself costs. Nothing. The official C03 sample exam asks how an administrator can track compute usage without adding to the bill. The correct answer is that resource monitors track at no additional cost. Any answer that says monitoring credits, notification credits, or trigger-evaluation credits are billed is wrong.

Only ACCOUNTADMIN can create a resource monitor by default. The role can also grant MONITOR and MODIFY on a specific monitor to other roles, but creation itself is reserved. This is the same governance pattern as SECURITYADMIN for network policies from Day 19, just narrower.

Micro-Concept 2: Anatomy of a Resource Monitor

Four pieces define a monitor. The credit quota sets a numeric ceiling for one interval. The frequency sets how often the counter resets. The start timestamp anchors the schedule. The triggers attach actions to threshold percentages of the quota.

SQL
CREATE OR REPLACE RESOURCE MONITOR rm_demo
  WITH CREDIT_QUOTA = 1000
  FREQUENCY = MONTHLY
  START_TIMESTAMP = IMMEDIATELY
  TRIGGERS
    ON 75 PERCENT DO NOTIFY
    ON 100 PERCENT DO SUSPEND
    ON 110 PERCENT DO SUSPEND_IMMEDIATE;

Frequency has five legal values: MONTHLY, DAILY, WEEKLY, YEARLY, and NEVER. Default behaviour without an explicit frequency is monthly reset. NEVER means the quota never resets and the monitor counts cumulatively until you alter it.

Three trigger actions exist. The distinction between them is exam-grade. NOTIFY only sends an email to administrators and any listed users. SUSPEND waits for currently running statements to finish, then suspends the assigned warehouses. SUSPEND_IMMEDIATE cancels the running statements and suspends right away.

Two further details get distractor mileage. Trigger thresholds can exceed 100, so a 110% over-consumption notify is legal syntax. The notification list is also restricted. Any user added must have a verified email on their Snowflake user record, or the create statement fails.

Micro-Concept 3: Account-Level vs Warehouse-Level Scope

A resource monitor lives at one of two scopes. One account-level monitor can exist, set with ALTER ACCOUNT SET RESOURCE_MONITOR = my_monitor. Many warehouse-level monitors can exist, each assigned to one or more warehouses with ALTER WAREHOUSE ... SET RESOURCE_MONITOR = ....

A single warehouse can be assigned to only one warehouse-level monitor at a time. Multiple warehouses can share the same monitor. The two scopes are not exclusive. A warehouse can be subject to its warehouse-level monitor and the account-level monitor at the same time. The first quota hit wins.

A warehouse with no warehouse-level assignment is governed only by the account-level monitor, if one exists. This is the scenario the practice exam loves. If you see three monitors and a warehouse that is not named in any assignment, only the account-level quota applies to it. That ceiling is the answer.

One harder fact catches candidates I have trained. The account-level monitor does not control credit usage by serverless features such as Snowpipe, Automatic Clustering, materialized view refresh, or serverless tasks. Those credits go through the Snowflake-managed compute pool, not through any user-managed warehouse, and resource monitors cannot govern them. To monitor or cap serverless and AI services, use a budget, a separate object introduced for exactly that gap.

Micro-Concept 4: Credit Calculation, Doubling, and the 60-Second Minimum

Warehouse credit consumption is the second half of this day. The credit rate doubles at each size step. The table is one of the most reused fact sources on the exam.

SizeCredits per hour (Gen 1 Standard)Doubling pattern
XS1Base
S2×2
M4×2
L8×2
XL16×2
2XL32×2
3XL64×2
4XL128×2
5XL256×2
6XL512×2

These are Gen 1 Standard rates. Gen 2 warehouses cost more credits per hour on the same size. The premium is roughly 1.35 times the AWS rate, and 1.25 times on Azure. They run faster in exchange. Gen 2 is also capped at 4XL today, with no 5XL or 6XL option. Day 8 covered the Gen 2 distinction; this day is the credit table.

Billing is per-second, with a hard 60-second minimum on each resume. A query that runs for five seconds on a freshly resumed warehouse bills 60 seconds of compute. After the first minute, billing is purely per-second. Suspending and resuming inside the minute does not save credits, because the minute restarts on every resume.

Resizing to a larger size triggers a fresh 60-second charge, but only on the added compute. Resizing a Small to a Medium bills one minute of two additional credits per hour, not a full Medium minute. Resizing down from a 5XL or 6XL briefly bills both sizes while the old one is quiesced.

Micro-Concept 5: Cloud Services Credits and the 10% Allowance

The Cloud Services layer authenticates users, compiles SQL, manages metadata, and serves results from cache. It does consume credits internally. Most accounts never see those credits on the bill, because of one specific allowance.

Cloud services usage is free up to 10% of daily virtual warehouse compute credits. If cloud services credits for a given day are 10% or less of warehouse credits, the bill for cloud services that day is zero. If they exceed 10%, only the excess is billed. The adjustment is calculated daily and never exceeds the actual cloud services usage for that day.

This is why workloads that lean on metadata-only queries can inflate the cloud services share. Repeated SHOW or single-row SELECT statements answered without a warehouse still consume cloud services. If warehouse compute is low on that day, the 10% floor is small and the excess gets billed. A common training session question I see: why did a slow-week account suddenly show a cloud services line item? The warehouses ran fewer credits, so the 10% allowance shrank below the cloud services usage.

For exam purposes, three facts close this concept. Resource monitors track warehouse credits plus the cloud services credits used to support those warehouses, all together in one quota. They do not track serverless features, which Budgets do. And the 10% adjustment applies daily, not monthly, and is not a flat discount.

Cheat Sheet

TopicWhat to rememberExam keyword
Resource monitor costTracks compute usage at no additional cost. Notifications and triggers are also free“No additional cost”
Who creates oneACCOUNTADMIN only. Other roles need granted MONITOR / MODIFY“ACCOUNTADMIN”
Frequency valuesMONTHLY (default), DAILY, WEEKLY, YEARLY, NEVER“Five frequencies”
Trigger actionsNOTIFY (email only), SUSPEND (after current queries), SUSPEND_IMMEDIATE (cancels in flight). Threshold is a % of credit quota; values over 100 are legal“Three actions, >100% OK”
Scope ruleOne account monitor maximum. Many warehouse monitors. One assignment per warehouse“One account, many warehouse”
Unassigned warehouseBounded only by the account-level monitor, if one exists“Account ceiling”
Serverless exclusionResource monitors do not control Snowpipe, Automatic Clustering, MV refresh. Use a Budget“Warehouses only”
Credit doublingXS=1, S=2, M=4, L=8, XL=16, 2XL=32, 3XL=64, 4XL=128, 5XL=256, 6XL=512“Doubles each size”
Billing minimumPer-second after a 60-second minimum on every resume. Resize bills the added credits only“60-second minimum”
Cloud Services allowanceFree up to 10% of daily warehouse credits. Excess only is billed“10% daily”
🎯

Exam Tip

🎯 Exam Tip

Sub-objective 2.3 is short, but it spawns a heavy share of cost questions. The facts are clean and the distractors are easy to dress up.

The sample-Q2 trap. Any option that says resource monitors consume credits, charge for notifications, or require an Enterprise add-on is wrong. The correct framing is that they track compute usage at no additional cost. This is one of the few facts the official C03 sample exam confirms directly, so it is worth knowing in that exact phrasing.

Read the action verb carefully. SUSPEND waits for in-flight queries to finish. SUSPEND_IMMEDIATE cancels them. If a stem says “kill the running query as soon as the threshold is crossed”, that is SUSPEND_IMMEDIATE, not SUSPEND. The two are the most-swapped distractors here.

Account ceiling versus warehouse cap. A warehouse that is not named in any assignment is governed by the account-level monitor alone. The account quota is the ceiling for that warehouse. If you see a multi-monitor diagram with one orphan warehouse, the answer is the account-level credit quota.

The 60-second minimum is per resume, not per day. A warehouse that resumes 100 times in a day pays 100 minutes of minimum charge, regardless of how short each session was. This is why short, frequent resumes on a small warehouse can outspend a single long-running one.

Serverless is out of scope. If a question describes capping Snowpipe spend or Automatic Clustering spend, the answer is a Budget, not a resource monitor. Resource monitors govern user-managed warehouses only.

🛠️

Hands-On Lab

Type: LAB (guided, fully runnable)  |  Time: ~20 minutes  |  Credits: <0.05  |  Prerequisite: Snowflake trial, lab_xs warehouse from Day 1. Run as ACCOUNTADMIN.
1

Inspect any existing monitors.

SQL
USE ROLE ACCOUNTADMIN;
USE WAREHOUSE lab_xs;

SHOW RESOURCE MONITORS;
👀 Observe: A new trial account starts with no monitors. The result set is empty, or shows a single starter monitor on some trials. There is no parameter to “turn on” monitoring. Monitoring is the act of creating a monitor object.
2

Create a daily monitor with three triggers.

SQL
CREATE OR REPLACE RESOURCE MONITOR cost_lab
  WITH CREDIT_QUOTA = 5
  FREQUENCY = DAILY
  START_TIMESTAMP = IMMEDIATELY
  TRIGGERS
    ON 50 PERCENT DO NOTIFY
    ON 80 PERCENT DO NOTIFY
    ON 100 PERCENT DO SUSPEND;
👀 Observe: The quota is 5 credits, well above anything this lab burns. FREQUENCY = DAILY means the counter resets at 12:00 AM UTC. The three triggers are the standard pattern: notify early, notify again, then hard-suspend at 100%. Change the last action to SUSPEND_IMMEDIATE and the same alert would cancel in-flight queries instead of waiting.
3

Assign the monitor to lab_xs.

SQL
ALTER WAREHOUSE lab_xs SET RESOURCE_MONITOR = cost_lab;

SHOW RESOURCE MONITORS;
SHOW WAREHOUSES LIKE 'lab_xs';
👀 Observe: SHOW RESOURCE MONITORS now includes cost_lab with its credit quota and used credits so far. SHOW WAREHOUSES shows the resource_monitor column populated for lab_xs. A warehouse can only carry one warehouse-level monitor, so a second ALTER ... SET RESOURCE_MONITOR would replace the assignment, not stack it.
4

Read the actual credit usage from ACCOUNT_USAGE.

SQL
SELECT
  WAREHOUSE_NAME,
  START_TIME,
  CREDITS_USED_COMPUTE,
  CREDITS_USED_CLOUD_SERVICES,
  CREDITS_USED
FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
WHERE START_TIME > DATEADD('day', -7, CURRENT_TIMESTAMP())
ORDER BY START_TIME DESC
LIMIT 20;
👀 Observe: CREDITS_USED is the sum of CREDITS_USED_COMPUTE and CREDITS_USED_CLOUD_SERVICES, before the daily 10% cloud services adjustment. This is the same data resource monitors track against their quota. ACCOUNT_USAGE views run with up to a few hours of latency, so very recent runs may not appear yet. Day 27 covers ACCOUNT_USAGE in full.
5

Glance at storage usage.

SQL
SELECT
  USAGE_DATE,
  STORAGE_BYTES,
  STAGE_BYTES,
  FAILSAFE_BYTES
FROM SNOWFLAKE.ACCOUNT_USAGE.STORAGE_USAGE
ORDER BY USAGE_DATE DESC
LIMIT 7;
👀 Observe: Storage is billed separately from compute and is not controlled by resource monitors. STORAGE_BYTES is the active data total, STAGE_BYTES is staged files, and FAILSAFE_BYTES is the seven-day recovery copy from Day 11. The day10_orders table from Day 10 contributes to STORAGE_BYTES here and remains untouched.
6

Raise the quota with ALTER, then clean up.

SQL
-- Show that ALTER replaces triggers, it does not append
ALTER RESOURCE MONITOR cost_lab SET CREDIT_QUOTA = 10
  TRIGGERS
    ON 90 PERCENT DO NOTIFY
    ON 100 PERCENT DO SUSPEND_IMMEDIATE;

SHOW RESOURCE MONITORS;

-- Cleanup
ALTER WAREHOUSE lab_xs UNSET RESOURCE_MONITOR;
DROP RESOURCE MONITOR IF EXISTS cost_lab;
👀 Observe: The 50% and 80% triggers from step 2 are gone, replaced by the new pair. The TRIGGERS clause on ALTER is not additive: it overwrites the entire trigger set. Cleanup removes the assignment first, then drops the monitor. The lab_xs warehouse stays, ready for Day 27.
❄️

Snowflake Documentation

🔗

External References

Practice Questions

Options:

A. Resource Monitors, which track compute usage at no additional cost
B. The Snowsight cost dashboard, which charges a small per-account monitoring fee
C. ACCOUNT_USAGE views, which require an Enterprise governance add-on to query
D. Snowflake Trail, which is billed per emitted event

✅ Answer: A

Why A: Resource monitors cap and track virtual warehouse credit usage and consume no credits themselves. This is the framing the official C03 sample exam uses to confirm the “no additional cost” point.

Why not B: Snowsight dashboards are free to view, and there is no per-account monitoring fee. The “small fee” is the trap.

Why not C: ACCOUNT_USAGE views are available to all editions when granted by ACCOUNTADMIN. There is no Enterprise add-on. Re-read Day 5 if missed.

Why not D: Snowflake Trail is the observability product for tracing and logs from Day 22. It can incur its own costs. It is not a credit-monitoring tool. Re-read Day 22 if missed.

Options:

A. 0
B. 1500
C. 3500
D. 5000

✅ Answer: D

Why D: Warehouse 2 is not named in any warehouse-level assignment. Only the account-level monitor applies to it, and that monitor’s quota is 5000. The account ceiling is the answer for any warehouse not explicitly assigned to a warehouse-level monitor.

Why not A: Zero would mean the warehouse is suspended at the start of the interval. Nothing in the setup forces that.

Why not B: 1500 looks like the sum of 1000 and 500 or some other combination. The other monitors do not subtract from Warehouse 2’s ceiling, because Warehouse 2 is not assigned to them.

Why not C: 3500 also mixes the unrelated quotas. RM 2 (1000) and RM 3 (2500) constrain Warehouses 3, 4, and 5 only, not Warehouse 2.

Options:

A. NOTIFY
B. SUSPEND
C. SUSPEND_IMMEDIATE
D. DROP_WAREHOUSE
E. ROLLBACK_QUERIES

✅ Answer: A, B, and C

Why A: NOTIFY sends an email to account administrators and any listed users with verified email addresses. No warehouse state changes.

Why B: SUSPEND waits for currently running statements to finish, then suspends all warehouses assigned to the monitor.

Why C: SUSPEND_IMMEDIATE cancels in-flight statements and suspends the warehouses right away. The difference from SUSPEND is exam-grade.

Why not D: Resource monitors never drop warehouses. Suspension is reversible; dropping is not.

Why not E: There is no rollback action. Cancelled queries from SUSPEND_IMMEDIATE are aborted. Any DML they ran is rolled back by the transaction system, not by the monitor.

Options:

A. 5 seconds, since billing is fully per-second
B. 30 seconds, the metering interval for cloud services
C. 60 seconds, because of the 60-second minimum on every resume
D. 3600 seconds, since warehouse credits are quoted per hour

✅ Answer: C

Why C: Snowflake bills warehouses per second after a hard 60-second minimum every time a warehouse starts or resumes. A 5-second run still bills the full minute, because the minimum starts over on each resume.

Why not A: Per-second billing only applies after the first minute. Inside the minute, the floor is fixed.

Why not B: 30 seconds is not a metering interval anywhere in Snowflake billing.

Why not D: The hourly credit numbers are reference rates only. Actual billing is per-second with the one-minute minimum, not hourly.

Options:

A. Cloud services usage is free for a given day as long as it stays at or below 10% of that day’s virtual warehouse compute credits
B. Resource monitors automatically suspend serverless features such as Snowpipe and Automatic Clustering when the credit quota is reached
C. A resource monitor controls credit usage by user-managed virtual warehouses only; serverless features are not governed by it
D. Each notification action sent by a trigger consumes one credit
E. The 10% cloud services adjustment is applied as a flat discount on every account every day, regardless of usage

✅ Answer: A and C

Why A: Cloud services credits below the 10% daily threshold are not billed. If cloud services credits exceed 10% of warehouse credits on a given day, only the excess is billed. The adjustment is daily, not monthly.

Why C: Resource monitors apply to user-managed warehouses only. Serverless features like Snowpipe, Automatic Clustering, and materialized view refresh run on Snowflake-managed compute and are governed by Budgets, not by resource monitors.

Why not B: This is the most common trap on this topic. Resource monitors cannot suspend or cap serverless features. A Budget is the correct object for that.

Why not D: Notifications are free. The whole point of sample question two is that resource monitors and their triggers add nothing to the bill.

Why not E: The adjustment is not a flat 10% discount. It only zero-rates cloud services credits up to the daily 10% floor, and never exceeds the actual cloud services usage on that day.

📝 Recap

Today you learned: Resource monitors are account-level objects that track virtual warehouse credit consumption. They notify or suspend warehouses at threshold percentages of a credit quota. The monitor itself costs nothing to run, which is the direct answer to official C03 sample question two. Only ACCOUNTADMIN creates them. A monitor has four parts. A credit quota sets the ceiling. A frequency from MONTHLY, DAILY, WEEKLY, YEARLY, NEVER sets the reset cycle. A start timestamp anchors the schedule. Triggers pair a threshold percentage with an action.

The three trigger actions are NOTIFY, SUSPEND, and SUSPEND_IMMEDIATE. The difference between SUSPEND and SUSPEND_IMMEDIATE is what happens to running queries: SUSPEND waits for them to finish; SUSPEND_IMMEDIATE cancels them. One account-level monitor and many warehouse-level monitors can coexist. A warehouse with no warehouse-level assignment is governed only by the account ceiling. Resource monitors do not control serverless features like Snowpipe or Automatic Clustering; Budgets cover that case.

Credit calculation rests on three numbers. Warehouse credit usage per hour doubles at each size, from 1 at XS up to 512 at 6XL. Billing is per-second with a 60-second minimum each time a warehouse resumes. Cloud Services credits are free up to 10% of daily warehouse compute credits. Only the excess is billed when that threshold is crossed.

Tomorrow (Day 27): ACCOUNT_USAGE Deep Dive and Query Attribution. You will see the full set of SNOWFLAKE.ACCOUNT_USAGE views and the 45-minute to 3-hour latency range. The new Query Attribution feature also lands tomorrow, assigning query cost to users, roles, and warehouses. It closes sub-objective 2.3.

Abhay Krishnan

Abhay Krishnan

Senior Data & AI Consultant
Connect on LinkedIn

With over five years of data engineering experience at EY and Infosys, Abhay Krishnan specializes in building scalable data pipelines and cloud warehousing solutions. He is a certified SnowPro Core professional, alongside credentials in AWS and Azure. Abhay created this 50-day track to solve a problem he faced firsthand: the lack of a structured, free resource for Snowflake certification prep. Follow him on LinkedIn for more data engineering insights.