Say this first: Compare DBUs per run rather than per hour: if the job already saturated its cluster with little idle, you paid the premium rate for the same work.
Remember these
- Normalise by cost per run, not cost per day
- A saturated classic cluster had little idle to recover
- Faster runs often lead to more frequent runs, which is a real cost change
- Easier scale-out can raise concurrency and therefore spend
Why: Pull system.billing.usage filtered to the job for a window before and after the change and normalise by run count, so you are comparing cost per execution rather than cost per day. Then put the job run timeline next to it: if classic runs show the cluster busy end to end with a short start-up tail, there was never much idle to recover and the higher rate goes straight through to the bill. The other common cause is that serverless removed the startup wait, so the job now finishes faster and somebody increased its frequency, which is a real behavioural change hiding inside a cost regression. Check whether concurrency changed too, since serverless scales out more readily and a job that used to queue may now run several tasks in parallel at full rate. Decide from that evidence: revert, resize, or keep it because the latency improvement is worth the money.
SELECT usage_metadata.job_id, COUNT(DISTINCT usage_metadata.job_run_id) AS runs,
SUM(usage_quantity) AS dbus
FROM system.billing.usage
WHERE usage_metadata.job_id IS NOT NULL
AND usage_start_time >= current_date() - INTERVAL 14 DAYS
GROUP BY ALL
Senior depth: Cost regressions after a compute change are usually a behaviour change wearing a cost change's clothes. So the first thing I establish is whether the unit of work is the same — same run count, same data volume, same concurrency — before I touch the compute decision. If the work really is identical and serverless is more expensive, that is a correct result for a saturated workload and I move it back without embarrassment. If the work grew because the platform got faster, that is a product decision, and I would make it explicitly rather than let it land as an unexplained invoice line.
Common mistake: Reverting on the daily total without checking whether run count or concurrency changed.
Follow-up they will ask: If the latency win is genuinely worth it, how would you say so in cost terms?