The Complete Guide to Snowflake Cost Optimization in 2026

Key Takeaways
- Snowflake cost optimization is an ongoing, continuous exercise. It’s not a one-time fix. Data cloud workloads are constantly shifting, and configurations that were efficient last quarter could be wasteful this quarter.
- Cost and performance are not mutually exclusive. The right optimization approach can reduce credit spend without impacting query performance.
- Manual optimization has a ceiling that autonomous AI doesn’t. Workloads change 24 hours a day. Which means the teams that achieve the most consistent, verifiable savings are the ones that have removed humans’ slow reaction time from the equation entirely.
Nearly every company now uses AI (whether generative or agentic) in at least one business function. That much, practically everyone knows.
What’s less obvious is the effect of this widespread AI adoption on data workloads. As AI tools use larger models, run more inference, and orchestrate more tools, they consume more and more data. Which, for a usage-based data platform like Snowflake, makes it that much easier to overspend.
So are you stuck with the dilemma of compromising performance to save on costs? Is there a way to scale up your AI tooling (and other cloud-based workloads) without increasing your data spend?
Yes, there is. And in this article, we’ll explain why. We’ll also walk through various approaches to Snowflake cost optimization, the pros and cons of each, and how to choose the right approach for your business.
Table of Contents
- Key Takeaways
- Who This Guide is For
- How Does Snowflake Pricing Work?
- Why Are Snowflake Costs Unpredictable?
- Why Snowflake Cost and Performance Aren’t Mutually Exclusive
- What Are Snowflake’s Built-In Optimization Capabilities?
- What Are the Best Methods for Optimizing Snowflake Costs?
- Top Mistakes to Avoid When Optimizing Snowflake Costs
- Autonomous Snowflake Cost Optimization: The Agentic Solution
- Comparing Snowflake Optimization Tools
- Final Thoughts on Snowflake Cost Optimization
- Snowflake Cost Optimization FAQs
Who This Guide is For
- CTOs, VPs of Engineering, and Heads of Platform. If Snowflake spend is growing faster than your team can manage it, this article has proven tips and tactics on how to control costs without adding headcount or slowing down your initiatives.
- Heads of Data and Directors of Analytics. If manual tuning is consuming time your team doesn’t have, and you’re caught between delivering data products and babysitting infrastructure, this article provides several actionable tips on warehouse optimization and continuous workload intelligence.
- FinOps teams and CFOs. If you’re dealing with month-to-month variance you can’t explain, capacity commitments that keep missing, or a Snowflake bill that no one can fully account for, this article includes key information to help you decipher your Snowflake bill and work to get costs under control.
How Does Snowflake Pricing Work?
Snowflake pricing is calculated across three dimensions: storage, compute, and data transfer. Each area has its own pricing structure:
| Storage | – Charged per terabyte, per month – Includes primary tables, Time Travel snapshots, clones, staged files, and materialized views – Cost varies based on your Snowflake Edition |
| Compute | – Measured by credits consumed by virtual warehouses – Warehouses range in size from XS to 6XL, with each subsequent size consuming 2X the credits of the previous – 60-second minimum warehouse activation duration, regardless of how fast a query runs – On-demand credit rates are higher than Capacity (pre-purchased) credits – Per credit rate varies based on your Snowflake Edition |
| Data Transfer | – Free on ingress but billed on egress – Egress cost compounds when data is transferred across regions or cloud providers – Cost does not vary based on your Snowflake Edition |
Here a few other Snowflake features that can impact the price:
- Warehouses auto-suspend after a designated period. Once a warehouse is suspended, its cache is cleared; this means subsequent queries run “from scratch” and can’t rely on previous memory (i.e., consume more credits).
- Serverless features like Snowflake Snowpipe, search optimization, and materialized views do not auto-suspend. They run continuously and consume credits until explicitly disabled.
- Cloud services are free for up to 10% of daily compute usage. In our experience, most users do not exceed this threshold. But when they do, excessive schema changes or cloning operations are the most common culprits.
READ MORE: Keebo’s Comprehensive Guide to Snowflake Pricing (2026)
Why Are Snowflake Costs Unpredictable?
There’s no single reason why Snowflake costs are unpredictable. Rather, it’s the result of several factors. The most common are the scope of modern data workloads, Snowflake’s complex pricing model, and data teams’ own operational limitations.
Data Workload Scope
Modern enterprises use a lot of data. Depending on how the organization is structured, they can have dozens and even hundreds of warehouses running concurrently. This often translates into thousands of queries every day. Snowflake itself calculates an average of 6.3B queries executed daily across the platform.
What’s more, data workloads are inconsistent and fluctuate based on usage, and these changes happen 24/7. Which means that even if a database admin could theoretically stay on top of all the fluctuations to your workloads (that’s a big if!), they can’t do it while they’re sleeping.
Snowflake Pricing Model
As you probably caught onto in that discussion of Snowflake pricing, it’s a complex model with several moving parts. All these elements mean you’re probably going to see your bill fluctuate from month to month. There’s no way to avoid this. The best you can do is keep tabs on your usage, which requires continuous visibility into the whole platform.
Operational Limitations
On top of the technical limitations, many data teams make poor decisions that make it harder to keep tabs on how much you’re spending before the bill comes in. Here are a few:
- Relying on overprovisioned warehouses as the default; i.e., picking a “safe” size and never revisiting it
- Not attributing spend at the workload, team, or query level, thereby limiting visibility into where your spend is going
- Performing manual optimizations, which means optimization is periodic at best
- Implementing static provisioning rules that don’t adapt to changing workloads
Why Snowflake Cost and Performance Aren’t Mutually Exclusive
There’s an assumption that high Snowflake performance and low costs are mutually exclusive; that to get the performance you want, you have to pay for it. This is true in some cases, but not always. And we should know, because we’ve helped clients save on Snowflake without hurting their performance, like we did for Allbirds, Costco Travel, and others.
Here’s a brief illustration to show how this could potentially work out:
Let’s say you have a warehouse that handles its typical workload at XS size. But then you get a sudden influx of queries that, if you stay at XS, cause the workload to run for hours. If you can upsize to a M, you’ll spend 4X the number of credits, but you could potentially run that workload in just 10% of the time. Which means, all told, you save a significant number of credits.
This is a very basic scenario, but it should illustrate that cost and performance do not have to come at each other’s expense. In fact, with the right solution, you can optimize both.
What Are Snowflake’s Built-In Optimization Capabilities?
The good news is that Snowflake offers some built-in optimization capabilities that can help you. These tools offer a good starting point for monitoring cost and usage, putting controls into place, and making manual adjustments.
Visibility
- Usage and metering data. Snowflake provides some credit consumption data (usage date/time, service type, credits used, etc.) across accounts, warehouses, and workloads.
- Query-level insights. You can identify expensive queries and long-running jobs based on specific patterns like no filter on a table scan, JOINS with no JOIN condition, etc.
- Warehouse utilization metrics. Snowflake provides insight into each warehouse’s query load (the average number of queries running or queued in a given interval) to help you spot overprovisioned compute or idle capacity.
- Cost attribution with tags. Tagging lets you assign spend to teams, projects, environments, or business units, making it easier to allocate costs internally.
- Budgets and alerts. Snowflake supports budget-style controls so you can monitor spend against predetermined thresholds and get notified when usage is trending too high.
Control
- Warehouse sizing. You can choose warehouse sizes to balance speed against cost, scaling up only when workloads justify it.
- Auto-suspend and auto-resume. Warehouses can shut down automatically when idle and restart when needed, reducing waste from unused compute.
- Multi-cluster warehouses. These help handle concurrency more efficiently by adding clusters only when demand requires it, rather than permanently oversizing a warehouse.
- Resource monitors. These provide hard or soft limits on consumption and can trigger alerts or suspend warehouses when spending exceeds a threshold.
- Workload isolation. Separating ETL, BI, and ad hoc workloads into different warehouses makes spend easier to control and prevents one workload from inflating costs for others.
Performance
- Materialized views. These precompute and store results for frequently used query patterns, which can reduce repeated compute work and speed up reads.
- Auto clustering. Snowflake can maintain clustered data organization automatically, improving pruning and query efficiency for large tables.
- Search optimization service. This is useful for point lookups and selective filters, especially when queries need to find small subsets of very large tables quickly.
- Caching. Snowflake uses caching layers that can reduce compute spend when queries repeat or when data is already available in cached form.
- Query acceleration features. Snowflake offers managed performance features that can reduce the time and compute needed for certain queries, especially when workloads are uneven.
What Are the Best Methods for Optimizing Snowflake Costs?
Once you have a handle on Snowflake’s built-in optimization capabilities, you can take the next step and exert more control over your warehouses and queries. Here are some of the tactics you can implement to control costs without compromising on performance.
Warehouse Optimization
Snowflake warehouse optimization is the practice of adjusting warehouse size and auto-suspend settings to match actual workload demand.
Warehouse Rightsizing
Adjusting warehouse size can have a significant impact on cost, since Snowflake consumes credits based on how big the warehouse is.
Since most organizations want to protect their performance, they’ll often set their warehouse size based on the most resource-heavy queries they anticipate receiving. However, those large queries and workloads are relatively rare, and the warehouse doesn’t actually need to run at that size 24/7—just when those resource-heavy queries come in.
One solution is to run the warehouse at a smaller baseline—say, a Medium—and only scale it up when a high-demand query comes in, and down when it finishes executing. But there’s an issue: it’s impossible to predict when high-demand queries will happen. By the time a human engineer notices it, even if they can implement the optimization, you’ve already burned through more credits than necessary. And, of course, this only works when your engineers are on the clock; when they’re sleeping or off the clock, they miss it entirely.
That’s why Keebo recommends automated Snowflake optimization. By letting an autonomous, agentic AI system make these changes in real time, you can maximize your savings beyond what any human (or team of humans) can achieve.
Auto-Suspend
There’s one more warehouse optimization we need to mention, and that’s auto-suspend. Essentially, this stops running the warehouse after a set duration of inactivity. Because when the warehouse is inactive, it’s not consuming credits.
A few things to keep in mind:
- Snowflake charges for a minimum of 60 seconds of runtime, regardless of how long a warehouse actually runs. So a 10-second query would keep the warehouse running for a minimum of 60 seconds.
- Warehouses only retain active memory while running; once you suspend it, that memory is erased. Because warehouses use memory to run successive queries faster, if you have a series of queries on the same dataset that happen within a few minutes of each other, suspending the warehouse in between those queries can increase query duration and, thus, become more costly.
- Snowflake calculates suspension parameters in increments of 30 seconds (after 60 seconds); to fine-tune your suspension parameters, you need to use a tool like Keebo’s proactive suspension offering.
Query Optimization
While warehouse optimization streamlines the resources used to run your queries, query optimization streamlines the queries themselves. Here are some tips for writing queries to be less resource-intensive while still pulling the same information.
Anyone who has been in the database business knows that SELECT * queries, or asking the database to return every column in a table, is asking for trouble.
Snowflake is a column-store database, which means retrieving a subset of columns will dramatically improve performance, especially if your table has a lot of columns. An example of this Snowflake query optimization technique would be not to pull the city, region, and country of a customer when you could do the job with just the postal code.
A nested query, or sometimes called a query within a query, is an entire query embedded as part of an operation. Snowflake query optimizers are not very effective in optimizing nested queries. Consider this example (written in pseudo-code for simplicity, instead of proper SQL):
SELECT A FROM T1 WHERE T1.B > ANY (SELECT T2.B FROM T2 WHERE T1.A = T2.A)
In this example, you see a classic illustration of how subqueries are used: to compare the value of the first table with all values of the second table and return a row if there is a match with any value. A subquery isn’t needed for this and the same result could be achieved using the DISTINCT statement:
SELECT DISTINCT A FROM T1 JOIN T2 ON T1.A = T2.A WHERE T1.B > T2.B
This is one of the most common mistakes while optimizing Snowflake queries and is very similar to a nested query, and IN or EXISTS are often found with nested queries. Consider this example, again in pseudo code:
SELECT A FROM T1 WHERE T1.B NOT IN (SELECT T2.B FROM T2 WHERE T1.B = T2.B)
As with the previous example, the goal here is to compare tables and return matching rows. Anytime you see IN or EXISTS you can probably avoid the subquery altogether for a simpler LEFT JOIN:
SELECT A FROM T1 LEFT JOIN T2 ON T1.B = T2.B WHERE T2.B IS NULL
Most DBAs don’t realize you can join tables based on inequalities. When this happens, you’ll see the join condition with such operators as <=, >=, != and so on. The most common use for these non-standard joins is to list or count unique pairs of items.
But these joins are one of the hardest to optimize for any data warehouse, so it is worth it to look for an alternative. Consider this example:
SELECT T1.A, COUNT(DISTINCT T2.A) FROM T T1 JOIN T T2 ON T1.A <= T2.A GROUP BY T1.key, T1.A ORDER BY T1.A DESC
The following query achieves the same thing but more efficiently:
SELECT A, DENSE_RANK() OVER (ORDER BY A DESC) FROM T
When you are looking for top-K results, where K is a small constant, using MIN or MAX is more efficient than RANK. This is because RANK requires sorting where MIN and MAX can be done with a simple scan and thus often benefit from partition-based pruning.
Consider this example:
SELECT max(A) AS secondA FROM (SELECT RANK() OVER (ORDER BY A DESC) AS A_rank, A FROM T) WHERE A_rank = 2
This query achieves the same result but more efficiently:
SELECT MAX(A) AS secondA FROM T WHERE A < (SELECT MAX(A) FROM T)
Along the same lines as avoiding SELECT *, most data engineers know that Snowflake optimizers are more likely to have success with standard ANSI joins. Looking for the JOIN operator is the indicator that you are using ANSI joins.
Table Optimization
Table optimization focuses on improving how tables are structured and managed. This reduces the amount of data scanned during queries, as poorly organized tables force queries to scan more data (and consume more credits).
A few of the most impactful table optimization practices include:
- Clustering keys. Define sort order on high-cardinality filter columns (like customer_ID or dates) so Snowflake can skip irrelevant micro-partitions during queries.
- File sizing. Target 100-250 MB uncompressed files per bulk load to maximize parallelism.
- Load strategies. Use batch/bulk loads instead of single-row inserts to reduce cloud services overhead.
- Cleanup. Remove old staged files and drop unused zero-copy clones to prevent storage bloat
Data Optimization
Data optimization involves making decisions at the physical, logical, and external level to affect ingestion, query performance, and Snowflake compute costs. It involves optimizing the actual data format, types, and access patterns to minimize storage.
Key data optimization practices include:
- Flattening JSON into VARIANT columns; this can reduce storage requirements by 300-500%
- Partitioning Parquet files by data for efficient pruning
- Leveraging result cache (24-hours), local disk cache, and metadata cache to avoid recomputation
Storage Cost Optimization (Data Lifecycle Management)
Another option for reducing your Snowflake costs is to reduce the amount of data you store, as well as using cheaper storage tiers for historical or cold data. Since storage can account for between 20-30% of your Snowflake bill, the savings potential here is not insignificant:
- Shorten Time Travel retention to one day (or zero for transient tables) to cut Time Travel storage costs
- Implement automated retention policies for dev or sandbox environments (e.g., seven days)
- Query ACCESS_HISTORY and STORAGE_USAGE to find tables that have received no queries within the last 90+ days and remove them
Ongoing Workload Intelligence
Although Snowflake provides some observability features, you can get much more granular with advanced FinOps and observability tools like Keebo. Our own workload intelligence tool continuously analyzes query, compute, and storage activity to identify inefficiencies, optimize performance, and reduce warehouse costs.
Keebo’s patented autonomous AI algorithm functions in a three-step loop:
- Analyze. Continuously evaluates resource utilization patterns using performance metadata only (no raw data access).
- Discover. Detects inefficiencies like unused resources, inefficient queries, and performance bottlenecks.
- Optimize. Delivers prioritized, actionable recommendations that teams can implement with confidence.
Learn more about Keebo Workload Intelligence.
Top Mistakes to Avoid When Optimizing Snowflake Costs
Here are some of the most common mistakes Snowflake users make when they try to optimize Snowflake costs:
- Defaulting to a “safe” warehouse size and never revisiting it. Since every size increment doubles the credit rate, a Medium warehouse doing the job that an XS warehouse can handle costs 4X for the same work.
- Setting auto-suspend thresholds too aggressively. A warehouse that suspends every 30 seconds loses its cache, meaning every subsequent query has to pull from cold storage, and the cost of doing so often exceeds your savings.
- Treating optimization as a one-time exercise rather than a continuous one. Workloads change, and a configuration that was efficient last quarter may be wasteful this quarter.
- Enabling serverless features and forgetting about them. Unlike warehouses, serverless features like materialized views, search optimization, Snowpipe don’t auto-suspend and will run up credits indefinitely.
- Relying on native Snowflake monitoring tools without the bandwidth to act on what they show. Observability without execution is just a dashboard and saves you nothing.
- Miscalculating capacity commitments. This involves either underestimating Capacity overages (which are billed at on-demand rates and often erase your Capacity discounts); or overestimating, meaning you pay for credits at Capacity that you never use.
- Missing cross-region data transfer costs. Egress charges are easy to overlook but compound quickly at scale, especially for multi-region or multi-cloud architectures.
- Assuming that spending less automatically means slower performance. The real goal is matching resources to actual workload demand, not just cutting spend.
Autonomous Snowflake Cost Optimization: The Agentic Solution
Autonomous Snowflake cost optimization through agentic AI solutions is the best way to maximize your savings.
If you think about it, you really only have three options when it comes to implementing the solutions mentioned above:
- Configure your warehouses based on a snapshot of your usage and leave them there (we mentioned above why that’s a problem)
- Expand your observability capabilities (whether native Snowflake features or third-party tools) that warn you when you’ve either incurred costs or are about to
- Let autonomous, agentic AI solutions do the work for you and optimize Snowflake costs and performance while your engineers and data teams work on other, more valuable tasks
The last option obviously has the potential to save you the most, but does it actually deliver on its promises? And, more importantly, does it deliver without hurting your performance? Since Keebo is the leading autonomous Snowflake cost optimization solution, we are uniquely qualified to answer both these questions.
To the first question, we know this works because we’ve documented it: our clients see an average verified savings of 27%. To the second question, Keebo is designed with five layers of performance protection, including guardrails that enforce the SLA boundaries you define upfront. Keebo only operates within those parameters, and never exceeds them.
Comparing Snowflake Optimization Tools
Now let’s get practical. Here’s a breakdown of various Snowflake optimization tools on the market so you can decide which is best for your specific situation.
Keebo
Keebo is the only tool in this set that executes autonomously to optimize Snowflake costs and performance without needing a human approving each change. Its agentic proactive suspension algorithm anticipates idle time rather than reacting to it, and a layered protection system keeps SLAs intact while the algorithm works; teams can tune how aggressively it optimizes.
One of the other major benefits of Keebo is the ability to verify savings vs. project them. Since you pay based on what you save, this offer you the confidence that your Keebo investment always generates a positive return.
SELECT (by DoiT)
SELECT is built for FinOps-led teams that need to understand and attribute spend. Its cost attribution, anomaly detection, and cost lineage are the strongest in this comparison, and platform coverage spans Snowflake, Databricks, and BigQuery in preview.
However, executing on those insights often requires manual human intervention. While SELECT does have some automated features, it does not have true autonomy. The system follows a set of human rules rather than adapting on its own.
Read our full Keebo vs. SELECT comparison.
Capital One Slingshot
Slingshot is an observability product with a Snowflake-specific focus, and its query analysis is genuinely strong. But it performs no autonomous optimization of any kind: no rightsizing, no auto-suspend, no cluster adjustments. Every insight it surfaces becomes a ticket for someone on the data team to work.
Read our full Keebo vs. Capital One Slingshot comparison.
Espresso AI
Espresso AI is the closest competitor to Keebo on autonomy: it handles auto-suspend, downsizing (in preview), and multi-cluster optimization without human intervention.
The differences are in what surrounds the automation. There are no SLA protections layered underneath the optimization, and no audit logs to show what changed. Reported savings are based on projections rather than verified against platform metadata.
For teams that need to explain a change to a platform owner or auditor, the black-box design is a real constraint.
Read our full Keebo vs. Espresso comparison.
Final Thoughts on Snowflake Cost Optimization
As your data cloud workloads increase, whether as part of growing AI usage, scaling your business, or a combination of the two, controlling Snowflake costs is always going to be critical.
But it’s not a one-time exercise. Data workloads are constantly changing, which means the most cost-effective state changes too, especially when the goal is to control costs without sacrificing performance.
Keebo is the leading autonomous agentic AI solution that works 24/7 to help you save on Snowflake. We can get you set up in 30 minutes, and you can pay based on how much you save.
Snowflake Cost Optimization FAQs
What Is Snowflake Cost Optimization?
Snowflake cost optimization is the practice of reducing unnecessary Snowflake spend while maintaining the query performance your teams depend on. Because Snowflake bills across multiple independent dimensions, costs accumulate from several directions at once. Effective optimization addresses all of these continuously, not as a one-time audit.
What Causes Snowflake Queries to Run Slow?
There are multiple potential reasons why Snowflake queries run slow. Most Snowflake customers look only at TOTAL_ELAPSED_TIME in their QUERY_HISTORY view to identify the cause of performance lags; however, this can be misleading, and only indicates a symptom and not the cause. To find the root cause of slow queries, you need to look at the following fields in your QUERY_HISTORY view:
- COMPILATION_TIME. If this is high, it typically indicates overly complicated queries, such as nested queries.
- EXECUTION_TIME. If this is high, it indicates expensive (long-running) queries. You need to either optimize these queries or scale-up to a larger warehouse.
- QUEUED_PROVISIONING_TIME. Ideally, this number is 0. Many non-zero instances indicate the cluster is being suspended too frequently. Increase your “auto suspend” interval.
- QUEUED_OVERLOAD_TIME. This is often the key to understanding TOTAL_ELAPSED_TIME. If a lot of fast queries are waiting behind slower queries, you will see considerable overload. To address this, you should ideally scale-out. If not that, then separate the slow queries and fast queries into separate warehouses.
How Does Using Snowflake’s Gen2 Warehouses Impact the Need for Cost Optimization?
Snowflake’s Gen2 warehouses deliver superior performance (up to 2.1X faster for core analytics) using upgraded hardware: Graviton3 CPUs, DDR5 memory, and larger L2 cache. However, they come with a higher credit cost per hour. Autonomous optimizations like Keebo are critical with Snowflake Gen2 because Gen2’s 1.35X higher credit rate demands faster, precise auto-suspend tuning to avoid idle waste; Gen2’s 2.1X performance gains are only realized when queries are optimized (which humans can’t do in real-time); and Gen2’s dynamic workload patterns require minute-by-minute automated tuning that reactive alerts and manual processes can’t provide.



