
Ian WhitestoneMonday, July 13, 2026
Databricks cost optimization comes down to five habits: know where your cost actually comes from (the DBU rate plus a separate cloud infrastructure bill), eliminate idle compute with auto-termination and timeouts, right-size compute by defaulting to serverless and reserving classic compute for your most expensive workloads, rethink workflows around run frequency and incremental processing, and lock in storage and governance settings so the wins don't erode over time. Real numbers from the webinar: an unmonitored GPU cluster added $4,000 to a $20,000 monthly bill before anyone noticed, and cutting one job's run frequency from 472 times a day to once an hour saved 95% of its cost, about $19,000 a year.
Databricks gives data teams an unusual amount of freedom. You can run the same pipeline as an interactive cluster, a scheduled job, or a serverless job, on classic compute or serverless, with a dozen different node types and scaling configurations in between. That flexibility is exactly what makes cost control hard. More options mean more ways to misconfigure something, and Databricks bills don't always make it obvious when that's happened.
That was the starting point for a recent webinar hosted by Ian Whitestone, co-founder of SELECT, and Olivier Soucy, a Databricks consultant who spent years building data platforms from scratch, including a stint as head of data at a crypto exchange where he built a Databricks environment from the ground up. Soucy now runs his own consulting practice focused on Databricks cost and performance, and he used the session to walk through five concrete strategies for getting Databricks spend under control, each backed by real numbers from client engagements.
Here's a recap of what he covered.
Before optimizing anything, you need to know what you're paying for, and Databricks makes that harder than it should be. Cost comes from two separate places: the Databricks Unit (DBU) rate charged by Databricks itself, and the underlying cloud compute charged by AWS, Azure, or GCP for the instances Databricks provisions.
The DBU rate alone can be misleading. Soucy walked through a single ETL pipeline priced three different ways: run as an interactive cluster, it costs 55 cents per DBU; run as a job on classic compute, 30 cents per DBU; run as a job on serverless, 45 cents per DBU. Looking at DBU price alone, serverless looks like the expensive option. But classic compute also carries a separate cloud infrastructure bill that serverless doesn't, so the full picture often looks very different once both costs are combined.
Most teams never combine them. Soucy said it plainly when Whitestone asked whether customers track DBU and cloud infrastructure cost together at the job level: they typically don't, because different teams own each side. A Databricks team monitors system tables and workflows; a cloud team looks at the AWS or Azure bill and treats Databricks as a single line item. Joining the two data sources with the right tags in place is enough of a lift that most organizations skip it, even when they know it matters.
Databricks does expose system tables with usage and pricing data, which is enough to build a reasonably accurate cost model for DBU spend. For classic (non-serverless) compute, Soucy's rule of thumb is to assume the underlying cloud infrastructure cost is roughly equal to the DBU cost, so a $50,000 DBU bill is often closer to $100,000 once cloud compute is added in. It's a blunt estimate, and it moves around a lot for GPU workloads, but it's a reasonable starting point if you don't have a better model yet. For a deeper breakdown of how Databricks pricing actually works, SELECT has covered the three controls that matter most in more detail.
Idle compute is, in Soucy's words, the single most expensive mistake a team can make, because you're paying for resources that deliver zero value while they run. He shared two examples from his own client work. In one case, a new intern spun up a GPU cluster with no auto-termination and no guardrails in place. It ran for weeks, adding roughly $4,000 to a $20,000 monthly bill, before anyone noticed. In another, a job that ran fine in QA for about 20 minutes hit different data in production and ran for 47 hours before anyone caught it.
The fixes are simple and worth doing regardless of anything else on this list:
Once waste is under control, the next common mistake is over-provisioning: assigning more compute than a workload needs. Soucy's default recommendation, which he acknowledged is a little controversial, is to run serverless by default unless you have a specific reason not to.
He backed this with an example from a client's hourly ETL pipeline. On classic compute, the job used about 44 DBUs per day at 30 cents per DBU (roughly $13 per day in DBU cost), plus another $10 per day in cloud infrastructure, for close to $23 per day total. Moved to serverless, the same job used 38 DBUs at a higher per-DBU rate, but the total cost came out similar, in this case slightly cheaper, mainly because serverless eliminates the two-to-four minutes of cluster startup time that classic compute pays for on every run. That startup elimination also cut the job's total runtime from 20 minutes to 12.
Soucy's practical advice: if you're new to Databricks or haven't tuned your workflows yet, default to serverless everywhere, then identify the top five to ten workloads driving most of your bill and consider moving just those back to classic compute, where you have more levers to pull on cost versus performance. Everything else usually isn't worth the tuning time. The tipping point tends to be workload duration: jobs running for hours at a stretch are more likely to benefit from classic compute, where you can fine-tune node type, autoscaling, and worker count directly.
For classic compute, Soucy recommends starting with the smallest instance size available and scaling up only when you hit real bottlenecks, using Spark UI metrics like CPU and node utilization to guide the decision. Starting too large tends to produce what he called a "silent bill": no errors, no failures, just a consistently higher cost than necessary. It's also worth matching compute type to the workload. SQL-only work belongs on SQL warehouses, general job logic belongs on job compute, and interactive or all-purpose clusters should be reserved for actual interactive work. Whitestone noted this is one of the most common gotchas SELECT sees: running a scheduled job against an interactive cluster instead of a dedicated job cluster can nearly double the Databricks cost of that job for no benefit.
Beyond compute sizing, several changes in how pipelines are built stood out as some of the highest-leverage optimizations available.
Run frequency matters more than most teams assume. Using a daily update as a baseline, moving to hourly runs roughly five times the cost, and near real-time updates run roughly 60 times the cost. Soucy's advice is to push back on real-time or near-real-time requirements from business stakeholders, since most requests for "real-time" dashboards really just mean the report needs to reflect a specific point in time, not a continuous stream.
Use views instead of duplicating tables. For simple filters or column selections, creating a view instead of a new physical table avoids copying data and the ongoing cost of maintaining that copy, with no real downside for whoever queries it.
Process incrementally instead of reprocessing everything. Databricks' Auto Loader can identify new or changed files on cloud storage automatically, and combined with structured streaming, this lets a pipeline process only what's changed instead of the full dataset on every run. Soucy called this one more complex to set up but essential for any high-volume workload.
Profile and rewrite expensive queries. Databricks' query profile view shows how Spark actually executed a transformation, including shuffles and spills that are easy to miss. Soucy noted that feeding that profile information, along with the underlying transformation code, to an AI coding assistant has produced real, usable rewrites in his own work, turning a task that used to require deep Spark expertise into something far more accessible.
On the storage side, Soucy's advice was to avoid manually tuning partitioning and Z-ordering and instead rely on Unity Catalog managed tables, which support predictive optimization. Predictive optimization runs vacuum, optimize, and analyze operations automatically on a schedule, cleaning up obsolete files, compacting small files into larger ones, and refreshing metadata so queries can skip files they don't need to read. It costs something to run, but the net effect is usually a lower bill than manual maintenance would produce. Liquid clustering, which has largely replaced manual Z-ordering, offers a similar advantage: it doesn't require rewriting existing data when the columns you cluster by need to change.
None of this holds up over time without governance. Soucy's recommendation is to manage all of it as code, using tools like Terraform or Databricks Asset Bundles, deployed through CI/CD, so configurations stay consistent across environments and don't quietly drift. Cluster policies are the main lever here: set sensible defaults for most users, enforce auto-termination and node type limits, and leave room for power users who genuinely need more flexibility to request it. Cluster pools can also help by keeping a set of instances warm on the cloud provider side, so jobs don't wait on cluster startup, though you still pay the cloud provider for that idle capacity even if Databricks doesn't charge you for it.
Soucy also flagged a category of cost that's easy to miss: newer Databricks features like apps, model serving endpoints, vector search, and quality monitors. He described misconfiguring a quality monitor on a large table himself, which increased that table's daily bill by 50% before he caught it. Whitestone added that AI-related features are likely to become a growing line item on Databricks bills generally, pointing to Databricks' recent move to start charging for previously free tools like Genie. The takeaway from both: set up cost alerts before you turn on anything new, not after.
Across all five strategies, the same pattern shows up: Databricks rarely fails loudly on cost. Idle clusters run quietly, overscheduled jobs run quietly, oversized compute runs quietly, and new features get turned on without anyone checking what they'll cost until the bill arrives. None of the fixes here are exotic. Auto-termination, sensible timeouts, matching compute type to workload, and treating configuration as code will handle the majority of avoidable spend for most teams.
For teams that want this handled automatically rather than manually, SELECT for Databricks surfaces this kind of waste directly, flagging missing auto-termination, overscheduled jobs (in one real example shared during the session, dropping a job from running 472 times a day to once an hour saved 95% of its cost, or about $19,000 a year), and warehouses or jobs responsible for a disproportionate share of spend, down to the individual query. You can see how it works at select.dev.
What's the biggest driver of unnecessary Databricks cost? Idle compute. Clusters and warehouses left running without auto-termination, or jobs that hang without a timeout, generate charges with zero value returned. Fixing this before anything else on the list tends to have the fastest payoff.
Should I default to serverless or classic compute on Databricks? Serverless is a reasonable default for most workloads, since it removes cluster startup time and gets most teams into the right cost range without manual tuning. The exception is your top five to ten most expensive workloads by spend, which usually benefit from the added control classic compute gives you over node type, autoscaling, and worker count.
What's the difference between DBU cost and cloud infrastructure cost? The DBU (Databricks Unit) rate is what Databricks itself charges for compute, and it varies by compute type. Classic compute also incurs a separate cloud infrastructure bill from AWS, Azure, or GCP for the underlying instances, which serverless compute doesn't. As a rough rule of thumb, assume the cloud infrastructure cost is close to equal to the DBU cost for classic compute.
How much does auto-termination actually save? It varies by workload, but the downside of skipping it can be large. In one real example, a misconfigured GPU cluster with no auto-termination added roughly $4,000 to a single month's bill before anyone noticed.
How does job run frequency affect Databricks cost? Significantly. Using a daily update as a baseline, running the same job hourly costs roughly five times as much, and near real-time updates cost roughly 60 times as much. Challenging whether a workload actually needs to run that often is often the single highest-leverage cost fix available.
Does Databricks charge for AI features like Genie? Databricks has moved to start charging for tools that were previously free, including Genie, and AI-related features are expected to become a growing line item on Databricks bills. Setting up cost alerts before enabling new features is the best defense against surprises here.

Ian is the Co-founder & CEO of SELECT, a SaaS Snowflake cost management and optimization platform. Prior to starting SELECT, Ian spent 6 years leading full stack data science & engineering teams at Shopify and Capital One. At Shopify, Ian led the efforts to optimize their data warehouse and increase cost observability.
Want to hear about our latest data cloud learnings?Subscribe to get notified.
Connect your Snowflake, Databricks, or BigQuery account and instantly understand your savings potential.
