Rabbit logo

BigQuery Idle Slot Sharing: How Reservation-Based Fairness Works

Kristóf Horváth

11 min read

Hero image for 'BigQuery Idle Slot Sharing: How Reservation-Based Fairness Works' article

BigQuery’s idle slot sharing (i.e. how BigQuery distributes idle slots across reservations) changed in April 2026. This post explains how the distribution model works, the advantages of reservation-based fairness over the old project-based default, and whether you should enable the change on your existing admin project.

If you run BigQuery with multiple reservations, idle slots are quietly doing significant work. When a reservation isn’t using all its baseline capacity, those unused slots get redistributed to other reservations that need them. The problem: Google’s previous default for deciding who gets those idle slots had a systematic flaw. A reservation with 10 assigned projects claims up to 10× the idle capacity of a reservation with 1 project — not because it needs more, but because of how the math works. Since April 2026, new admin projects get a better default. Here’s what changed, who’s affected, and what to do about it.

What are idle slots in BigQuery, and why does their distribution matter?

BigQuery slots are the unit of compute capacity BigQuery uses to execute queries. When you set up a reservation, you define a baseline — a number of slots always allocated and always billed, whether queries are running or not. When a reservation isn’t fully using its baseline, the leftover capacity becomes idle slots: spare compute that BigQuery redistributes to other reservations of the same edition (e.g. enterprise slots only to enterprise reservations) in the same admin project within the same region.

Idle slots are effectively free, since you’ve already paid for the baseline capacity sitting unused: when another reservation borrows it, no additional charges apply. For teams running zero- or low-baseline reservations, idle slot access can substantially cut costs — borrowed idle slots displace what would otherwise be billed autoscale usage.

The catch: idle slot access is not guaranteed. It depends on what other reservations have sitting unused at that moment, and on who BigQuery decides to give it to. That second question is what the April 2026 change addresses.

What is project-based fairness, and why can it create problems?

Under the current default (what Google calls project-based fairness), BigQuery distributes idle slots equally among all projects across the entire admin project, regardless of which reservation those projects belong to.

Here’s why that may cause problems.

Say your admin project has two reservations:

  • prod: 1 project running business-critical dashboards and reporting pipelines
  • dev: 10 projects used by engineering teams for experimentation and development

With 1,100 idle slots available in the pool, project-based fairness gives each of the 11 projects an equal share: 100 idle slots each. prod’s single project gets 100 idle slots. dev’s 10 projects collectively receive 1,000.

Under project-based fairness, a reservation with 10 projects claims 10× the idle slots of a reservation with 1 project

The result: your development environment (which has more lenient latency requirements and can tolerate slowdowns) quietly consumes 10× the idle capacity that your production workloads receive. Nobody configured this intentionally. It’s the default, and most teams don’t even know it’s happening.

The problem compounds with scale. The more projects a reservation contains, the larger its share of the idle pool, regardless of how critical or demanding its workloads are. Teams that use many projects for cost attribution, team isolation, or environment separation inadvertently starve reservations that happen to have fewer projects but more important jobs.

How does BigQuery reservation fairness fix the problem?

Google’s updated model — BigQuery reservation fairness — changes the distribution in two steps:

  1. Idle slots are first distributed evenly across reservations
  2. Within each reservation, those idle slots are then distributed fairly among its projects

Using the same scenario: 1,100 idle slots, prod (1 project), dev (10 projects). Under reservation-based fairness, each reservation receives 550 idle slots. prod’s single project gets the full 550. dev’s 10 projects split 550 among them — 55 each.

Under BigQuery reservation fairness, each reservation gets an equal share of idle slots regardless of how many projects it contains

Production now gets 5.5× more idle capacity than it did under the previous default, without changing a single reservation configuration.

Two things to be aware of:

  • Demand-driven only: Idle slots only flow to reservations where queries are actively running. A reservation with no active jobs doesn’t receive idle capacity, regardless of fairness mode.
  • Enterprise and Enterprise Plus editions only: Standard Edition doesn’t support idle slot sharing, so this change doesn’t apply to Standard.

What changed in BigQuery’s idle slot distribution in April 2026?

Google made two specific changes to defaults:

New admin projects default to reservation-based fairness. Any admin project created after April 1, 2026 uses reservation-based fairness for idle slot distribution automatically. No manual configuration needed.

The UI default for new reservations shifted to “Most predictable.” Reservation-based fairness unlocks a new set of per-reservation controls called scaling modes. Scaling modes are explicit settings for whether a reservation can borrow idle slots, autoscale, or both, with a hard cap on total slots (you can set the baseline and the max slots for autoscale). Under the new default (“Most predictable”), new reservations will have bounded, capped slot consumption (a total cap set for baseline + borrowed + autoscale) rather than the previous behavior (“Most variable”, baseline + autoscale max slots). If you want the old behavior for a specific reservation, you’ll need to select it manually during setup.

Existing admin projects are unaffected. Your current setup stays exactly as configured until you explicitly enable reservation-based fairness. There is no automatic migration, and Google’s notification is explicit: no immediate action is required for existing admin projects or reservations.

Does this change of idle slot distribution affect your setup?

The impact depends on how your reservations are organized. Two questions give you a fast read:

How many projects are assigned to each reservation?

If your reservations all have roughly equal project counts, the distribution is already close to even. In this case, project-based and reservation-based fairness produce similar results. The more asymmetric your project counts, the more meaningful the change is.

Run this against your admin project to see current project distribution per reservation:

SELECT
  reservation_name,
  COUNT(DISTINCT assignee_id) AS project_count
FROM
  `your-admin-project.region-your-region`.INFORMATION_SCHEMA.ASSIGNMENTS
WHERE
  assignee_type = 'PROJECT'
GROUP BY
  reservation_name
ORDER BY
  project_count DESC;

Note: This query only counts direct project assignments. If you use folder-level assignments, validate the results against your project hierarchy, as the effective distribution may occur across the projects within the folder.

If one reservation has 8-10 projects and another has 1-2, reservation-based fairness would significantly rebalance how idle slots flow between them.

Which reservations are configured to borrow idle slots?

A reservation with ignore_idle_slots = false can borrow idle capacity from other reservations. One with ignore_idle_slots = true never borrows — and for those, idle slot distribution is irrelevant since they don’t participate in the pool. (Note that this setting only controls whether the reservation borrows idle slots, but it will always lend its own idle slots to others).

Here’s how to check your current configuration for ignoring idle slots:

SELECT
  reservation_name,
  slot_capacity AS baseline_slots,
  ignore_idle_slots,
  scaling_mode,
FROM
  `your-admin-project.region-your-region`.INFORMATION_SCHEMA.RESERVATIONS
ORDER BY
  reservation_name;

Reservations with ignore_idle_slots = false and low slot_capacity are the ones most sensitive to distribution changes. If any of these sit in a low-project-count reservation next to high-project-count neighbors, they’re likely receiving less idle capacity than they would under reservation-based fairness.

The scaling_mode column shows SCALING_MODE_UNSPECIFIED for reservations that haven’t yet adopted the new scaling mode framework. These are running under the traditional ignore_idle_slots behavior. Once reservation-based fairness is enabled on the admin project, you can configure explicit scaling modes per reservation.

Should you enable BigQuery reservation fairness on existing admin projects?

BigQuery reservation fairness is now the default for new admin projects. For existing admin projects, you still need to enable it manually.

Enable BigQuery reservation fairness now if:

  • Your reservations have meaningfully asymmetric project counts (more than a 2–3× difference)
  • A production reservation with few assigned projects depends on idle slot access for throughput above its baseline — and if that baseline is zero, an unfavorable distribution doesn’t just slow queries down, it stalls them entirely
  • You want more precise control over the reservations’ scaling behavior by configuring scaling modes (IDLE_SLOTS_ONLY, AUTOSCALE_ONLY, ALL_SLOTS), as reservation-based fairness is a prerequisite for all of them

Wait and observe if:

  • Your project counts across reservations are roughly balanced and the current distribution is working fine
  • You’re unsure about current idle slot consumption patterns and don’t want to change a live setup without a baseline measurement first
  • You’re planning to create a new admin project anyway (new projects automatically get reservation-based fairness)

No action needed if:

  • You’re on Standard Edition: idle slot sharing isn’t supported, so this change doesn’t apply
  • All your reservations have ignore_idle_slots = true — if nobody is borrowing, distribution doesn’t affect anything

What to check before enabling reservation-based fairness?

If you decide to enable it on an existing admin project, go through this before flipping the switch.

1. Enable fairness at the admin project level:

ALTER PROJECT `your-admin-project`
SET OPTIONS (
  `region-europe-west3.enable_reservation_based_fairness` = true
);

Replace europe-west3 with your region.

2. Identify which reservations borrow idle slots. Reservations with ignore_idle_slots = false will see changed idle slot distribution immediately. Know which direction each reservation will move (more or less idle capacity than before) prior to enabling.

3. Zero-baseline reservations need the most attention. A zero-baseline reservation set to borrow idle slots has no guaranteed capacity at all: it runs entirely on redistributed idle slots. Under reservation-based fairness, it will receive a predictable share proportional to the number of reservations in the admin project, rather than the project-count-weighted share it may have had before. This could mean more or less capacity depending on your setup.

4. Scaling modes become available once fairness is enabled. You can then explicitly configure each reservation’s scaling behavior: IDLE_SLOTS_ONLY (borrows idle capacity only, no autoscale billing), AUTOSCALE_ONLY (autoscales only, never borrows), or ALL_SLOTS (borrows idle capacity first, autoscales for anything additional, up to a hard cap). These modes also let you set a max_slots ceiling on total consumption, making costs bounded and predictable per reservation.

How does Rabbit help you see idle slot patterns before you change anything?

The practical challenge with this decision is that INFORMATION_SCHEMA shows you configuration, not actual idle slot flows. You can see that a reservation has ignore_idle_slots = false, but you can’t easily see how many idle slots it’s actually receiving versus lending out, or how that compares to what it would receive under reservation-based fairness.

Rabbit’s reservation-level visualization breaks usage into consumed, borrowed, and lent components for each reservation. Before enabling reservation-based fairness, you can see exactly which reservations are over-consuming idle capacity relative to their project count, which are being underserved, and how significant the rebalancing would be. That makes the opt-in decision concrete rather than a judgment call.

Rabbit reservation cost breakdown showing used, lent, wasted, and borrowed baseline slot-hours with their corresponding costs

If you’re also considering adopting scaling modes as part of the April transition, the Reservation Planner analyzes historical slot usage to recommend the right combination of baseline and max slots for each reservation.


The April 2026 change doesn’t force anything on existing admin projects. For teams with balanced, symmetric reservation setups, it’s a neutral event. But if you have meaningful asymmetry — for example, a development environment spread across 10 projects in the same admin pool as a single-project production reservation — enabling reservation-based fairness on your existing setup is a significant improvement worth applying.

For a deeper look at how scaling modes, idle slot borrowing, and autoscaling interact once reservation-based fairness is enabled, see BigQuery Reservation Scaling Modes: What They Are and How to Choose the Right One.

To learn about the mechanics of how autoscaling and idle slots interact in the underlying billing model, see BigQuery Reservations: How Does Autoscaling Really Work?.

To see how idle slots flow between related reservations when your infrastructure spans multiple teams or cost centers, see BigQuery Reservation Groups: How Idle Slots Flow Between Related Reservations.


FAQ

Idle slots are unused baseline capacity in a BigQuery reservation that gets redistributed to other reservations needing extra compute. When a reservation is not fully using its baseline, those unused slots are shared within the same admin project and region. Idle slots are effectively free — you have already paid for the baseline capacity.

Project-based fairness distributes idle slots equally among all projects across the admin project, regardless of which reservation they belong to. A reservation with 10 projects claims 10× more idle capacity than one with 1 project. Reservation-based fairness distributes idle slots evenly across reservations first, giving each reservation a fair share regardless of project count.

Reservation-based fairness distributes idle slots in two steps: first evenly across reservations, then among projects within each reservation. A production reservation with one project and a development reservation with ten projects each receive the same share of idle capacity, unlike project-based fairness which gives the ten-project reservation ten times more.

Reservations with ignore_idle_slots set to false can borrow idle capacity from other reservations. You can check current configuration by querying INFORMATION_SCHEMA.RESERVATIONS. Reservations set to true never borrow idle capacity but will still lend their own idle slots to others. Zero-baseline reservations relying on idle slots are most sensitive to fairness configuration.

Enable it if your reservations have meaningfully asymmetric project counts (more than a 2–3× difference) or if a production reservation with few projects relies on idle slot access. Wait if project counts are roughly balanced and the current distribution is working. Existing admin projects are not migrated automatically — you must enable it manually.

No, not automatically. Only new admin projects created after April 1, 2026 get reservation-based fairness by default. Existing admin projects stay on project-based fairness until you explicitly enable the change. Teams with asymmetric setups — a low-project production reservation sharing a pool with a high-project dev environment — benefit most from switching.

Scaling modes are per-reservation settings controlling how a reservation uses capacity: IDLE_SLOTS_ONLY borrows idle slots without autoscaling; AUTOSCALE_ONLY autoscales without borrowing idle slots; ALL_SLOTS borrows first then autoscales up to a total cap. Scaling modes require reservation-based fairness to be enabled on the admin project first.

More from our blog

Hero image for 'Meet Rabbit at Google Next '26 in Las Vegas!' article
Meet Rabbit at Google Next '26 in Las Vegas!

Rabbit is heading to Google Cloud Next '26 in Las Vegas, April 22-24. Visit us at booth #4421, catch our Lightning Talk on automating BigQuery optimization, and join our live webinar on the topic.

Read more
Hero image for 'BigQuery Reservation Scaling Modes: What They Are and How to Choose the Right One' article
BigQuery Reservation Scaling Modes: What They Are and How to Choose the Right One

BigQuery scaling modes (ALL_SLOTS, IDLE_SLOTS_ONLY, AUTOSCALE_ONLY) control how a reservation scales beyond baseline. Learn when to use each.

Read more
Hero image for 'How to Reduce GCE Machine Overprovisioning (and Save 40%+ Resource Waste)' article
How to Reduce GCE Machine Overprovisioning (and Save 40%+ Resource Waste)

Learn how to reduce GCE overprovisioning by 40%+ through data-driven machine type rightsizing, family switching, and autoscaler optimization strategies.

Read more
Contact us icon

Get in touch to start saving

We help data teams cut BigQuery costs by 32% on average and see exactly where every slot hour goes.
The autonomous engine for BigQuery cost and performance
Book a demoTry it free

SOC 2 Type II
audited

ISO 27001
certified

Google Cloud
Marketplace

Google Cloud
Partner


PlatformOverviewAutomateObserveBuildGovernPricing

Rabbit logo
TERMS AND CONDITIONS
PRIVACY POLICY
security
© 2026 Follow Rabbit PTE Ltd. Google Cloud Partner.