Skip to main content
Use provisioned-throughput billing when your customers reserve a fixed amount of capacity for a defined period and pay for usage above that commitment. This model is common for compute, data processing, and infrastructure products where a customer needs guaranteed capacity but can also consume additional capacity on demand. In Metronome you can model the reservation as a contract-level Named Schedule, charge for it using a subscription fee, and calculate on-demand overages from usage at each reporting interval using SQL billable metrics that reference the reserved amount encoded on Named Schedules.

In this guide

  • Understand provisioned-throughput billing
  • Learn how Metronome models reservations and calculates overages
  • Configure SQL billable metrics, products, rates, Named Schedules, and usage events
  • Show the resulting invoice and invoice breakdowns

What is provisioned throughput?

A provisioned-throughput contract has two commercial components:
  1. Reservation fee: A recurring fee for a fixed amount of capacity, whether or not the customer consumes all of it.
  2. On-demand overage: A usage-based charge for capacity consumed above the reservation.
For example, a customer might reserve 120 H100 GPUs for a month and pay a fixed monthly fee. If they use 200 H100 GPUs during a 60-second interval, 120 GPUs are covered by the reservation and the remaining 80 GPUs are billed at the on-demand rate. The reservation fee is independent of actual consumption. Customers pay for the committed capacity, then pay the on-demand rate only when their consumption exceeds that commitment.

How Metronome models provisioned throughput

The key components to modeling this business model in Metronome are as follows: SQL billable metrics serve as the bridge between actual usage and reserved amounts encoded as contract terms. They read the reservation amount that was active at each usage interval to determine whether the customer is using under or over their reserved capacity. For this model, you can configure two SQL billable metrics that effectively calculate: Follow the steps below to configure this model.

1. Create the SQL billable metrics

Define the SQL billable metrics first so they are available to attach when you create the products in the next step. For each SKU and usage interval, the metrics should:
  1. Aggregate raw usage at the scope where the reservation applies.
  2. Look up the scheduled reservation active at the same timestamp.
  3. Calculate covered usage and on-demand usage separately.
The example queries below reference a reserved-instance Named Schedule keyed by sku. You create that schedule on the customer’s contract in Step 3; the metric definitions do not depend on the schedule existing yet.

Choose the right schedule lookup

SQL billable metrics offer two functions for looking up Named Schedule values.

Create the on-demand SQL billable metric

The following metric aggregates all H100 events into 60-second SKU totals, reads the active H100 reservation, and calculates the on-demand quantity.
The inner query aggregates all usage events for a SKU into a single 60-second value. For each aggregated row, the outer query looks up the reservation whose schedule properties match that row’s SKU and whose segment is active at that timestamp. It subtracts the reservation from aggregated usage and floors the result at zero. When no reservation schedule matches, the example SQL treats the reservation as zero through COALESCE(..., 0). In that case, all usage is billed as on demand. The query multiplies each 60-second result by 60, so the output is in GPU-seconds. Configure the associated product’s quantity conversion to divide by 3,600 before applying a GPU-hour rate.

Create the reserved-usage SQL billable metric

To show the portion of usage covered by the reservation, use the same event aggregation and schedule lookup, but use MIN() instead of subtracting the reservation:
Map this metric to the reserved-usage product, which is normally priced at $0. This gives customers visibility into the consumption covered by their commitment without charging twice for that capacity.

2. Create the products, rate card, and contract

Create products for the two calculated usage quantities and the fixed reservation fee, then bundle them on a rate card and attach that rate card to the customer’s contract. Add all three products to the rate card, then create the customer’s contract using that rate card. You can override the on-demand rate and reservation fee on an individual contract to reflect the customer’s negotiated commercial terms.
Example: Acme’s contract charges a $100,000 monthly reservation fee for 120 H100 GPUs and $2.00 per GPU-hour for on-demand usage. The reserved-usage product remains at $0 per GPU-hour because the reservation fee already covers that capacity.

3. Add the Named Schedule

With the contract in place, add the Named Schedule that stores the customer’s reserved capacity. The SQL billable metrics created in Step 1 read from this schedule at billing time.

What is a Named Schedule?

A Named Schedule attaches a time-varying value to a contract. Use it when a contract term, such as a customer’s reserved capacity, can change over time. Each schedule is identified within a contract by its schedule name and properties:
  • The schedule name describes the kind of value, such as reserved-instance.
  • Properties scope that value, such as { "sku": "gpu-H100" }.
The same schedule name with different properties represents a different schedule. For example, a contract can have separate reserved-instance schedules for gpu-H100 and gpu-A100. Each schedule has one or more time-bounded segments. A segment provides the value that is active from starting_at until the next segment starts or ending_before is reached. A Named Schedule does not affect billing by itself. The SQL billable metrics read the value active at the usage timestamp and use it in the billing calculation.

Create a reservation using a Named Schedule

Create a reservation schedule for 120 H100 GPUs on the customer’s contract:

Change a reservation without changing history

When the customer changes their commitment, add a new segment with the same schedule name and properties. For example, increase Acme’s H100 reservation to 200 GPUs beginning June 15:
The contract retains the 120-GPU reservation before June 15 and applies the 200-GPU reservation afterward. Historical usage events remain unchanged, and the metric uses the segment that was active at the time of each event.

4. Send capacity usage events

Send immutable heartbeat events at a consistent interval for each SKU and the dimensions needed to aggregate usage. This example reports active H100 GPUs for a cluster every 60 seconds:
The event reports actual consumption only. It does not label the 50 GPUs as reserved or on demand. Metronome calculates that classification from the customer’s contract using the SQL billable metrics and Named Schedule configured in the previous steps.

5. Show billing outcomes

Suppose Acme uses 200 H100 GPUs during a 60-second interval while its active reservation is 120 GPUs: For that interval, Metronome records:
  • 7,200 covered GPU-seconds: 120 GPUs × 60 seconds
  • 4,800 on-demand GPU-seconds: 80 GPUs × 60 seconds
The reserved-usage SQL billable metric reports the covered quantity, while the on-demand SQL billable metric reports the overage quantity. The associated products then convert GPU-seconds to GPU-hours by dividing by 3,600 before applying the applicable rate. For an illustrative monthly invoice, the resulting line items could be: The reserved-usage line item shows the customer how much capacity was covered by their reservation. The reservation fee and on-demand line item determine the amount due. Use invoice breakdowns to give customers hourly or daily visibility into covered and on-demand usage. This helps customers reconcile capacity consumption, reservation coverage, and overages.

Best practices

  • Keep usage events immutable. Store actual consumption in usage events and calculate the reservation classification from the contract rather than rewriting historical events.
  • Use the same evaluation interval as the usage events. If events are sent every 60 seconds, apply the reservation to each 60-second interval before rolling up to the billing-period total.
  • Align schedule properties with the reservation scope. If capacity is reserved by SKU, use sku as the schedule property. Include region or other dimensions only when the commercial reservation is scoped to those dimensions.

Conclusion

Provisioned-throughput billing combines predictable committed revenue with flexible usage-based overages. Metronome keeps raw capacity usage immutable, stores changing commitments on the contract through Named Schedules, and uses SQL billable metrics to calculate the covered and on-demand quantities for each billing interval. This model gives customers transparent visibility into how their reserved capacity is used while ensuring that contract changes are accurately reflected in billing.