← Back to Patterns

Reservations for workload isolation: the minimal setup

Reservation design for SMEs is usually not an enterprise org chart. It is a small blast-radius pattern that keeps BI, batch, and sandbox work from bullying each other.

By Ivan Richter LinkedIn

Last updated: Sep 1, 2026

4 min read

On this page

A BigQuery reservation should isolate a measured interference pattern. It shouldn’t reproduce the organization chart in compute pools.

Most SME warehouses need fewer reservations than their first diagram suggests. Start with the workloads whose queueing or latency requirements conflict, give them explicit assignments, and leave the rest alone.

The smallest useful layout

Three classes cover many production warehouses:

BI / serving
  repeated interactive reads
  latency is visible to users

batch
  scheduled transformations and controlled backfills
  completion matters more than immediate start

sandbox
  exploration and development
  cheap delay or rejection is acceptable

The sandbox may remain on-demand rather than receive a reservation. That’s often the cleanest isolation: experimental work keeps flexible consumption while production classes use capacity-based compute.

Some warehouses can combine BI and batch initially. Split them only when concurrency data shows that one degrades the other or their queue policies need to diverge. A reservation with no distinct requirement is just another object to own.

Assign by workload, not team

BigQuery reservations receive work through assignments at organization, folder, or project scope. Design projects so jobs with similar operating requirements can be routed together.

Avoid one reservation per department. An analyst’s ad hoc query and the same department’s production dashboard don’t become the same workload because the cost center matches. Conversely, scheduled transformations owned by different teams may share a lane perfectly well.

Labels and service accounts improve visibility, but assignment boundaries must be enforceable. If a project contains incompatible workloads, no amount of naming will isolate them.

Queue behavior is part of the user experience

BigQuery queues queries when concurrency exceeds available execution capacity. Reservations can use concurrency targets and separate interactive and batch queue timeouts.

Choose those settings from the workload contract:

  • BI should have a bounded wait. A dashboard that silently stalls for several minutes is a failed interaction even if the query eventually succeeds.
  • Batch can usually wait longer because predictable completion matters more than immediate response.
  • Sandbox should absorb delay without consuming the production experience.

“Fail fast” is implemented through a short, explicit queue timeout and client behavior, not by naming a pool bi. Monitor queued duration and timeout errors so the policy remains intentional.

Concurrency is a trade. Allowing more simultaneous queries can reduce queueing while giving each query less capacity. Reducing concurrency can make individual jobs faster but queue more work. Test the actual dashboard fan-out or batch schedule rather than copying a target from another warehouse.

Size from demand, then let autoscaling solve variance

Use historical slot consumption, concurrency, duration, and latency to choose a baseline and maximum. Capacity recommendations can provide a starting point. The first configuration is still a hypothesis.

Autoscaling handles demand above the baseline, but its maximum and billing behavior need attention. A very high ceiling can turn a brief burst into more billed capacity than the workload deserved. A ceiling that is too low turns normal peaks into queues.

Don’t make an SLO depend on idle slots from another reservation. Committed idle capacity may be shared under compatible conditions, but that should be upside. The lane’s required behavior should fit its own baseline and autoscaling plan.

Isolation doesn’t legitimize waste

A BI reservation can contain dashboard churn without fixing it. If every tile rebuilds the same joins, the lane will remain expensive and unstable in a tidier box.

Review the precompute ladder, generated SQL, partition pruning, and BI Engine eligibility before adding capacity. Do the same for batch models that rewrite unnecessary history.

Reservations protect workload classes from each other. They don’t protect the budget from the workload itself.

Monitor boundary drift

Review reservation use by project and job class:

  • queue duration and timeout rate
  • slot consumption against baseline and autoscaling maximum
  • latency or completion SLOs
  • jobs assigned to the wrong lane
  • sandbox work that has quietly become recurring production
  • BI queries that should move to serving tables
  • backfills competing with normal batch schedules

When pressure persists, first decide whether the lane is undersized, badly routed, or carrying work that shouldn’t be live. Add another reservation only when a new class has a genuinely different contract.

Operators should be able to explain where a job runs, why it waits, what it may affect, and which measurement would justify changing the lane. Any extra reservation has to justify its coordination cost.

More in this domain: Data

Browse all

Related patterns