DynamoDB Capacity Mode Advisor · guide

DynamoDB on-demand vs provisioned: which is cheaper?

Short answer: provisioned wins for steady tables, on-demand wins for idle or spiky ones, and the crossover is about 29% average utilisation. The rest of this page shows where that number comes from and how to check your own table in ten minutes.

How each mode bills

On-demand charges per request unit actually consumed: about $0.125 per million read request units and $0.625 per million write request units at us-east-1 standard-table list prices. Nothing is charged while the table is idle.

Provisioned charges per capacity unit per hour whether you use it or not: about $0.00013 per RCU-hour and $0.00065 per WCU-hour. One RCU-hour can serve 3,600 read units. The same 3,600 units on-demand cost $0.00045, so provisioned costs 29% as much if the unit is fully busy. That ratio is the break-even utilisation, and it is the same for reads and writes.

What utilisation do you really get?

Provisioned capacity is never fully busy. Autoscaling targets 70% by default, so a perfectly steady table runs near 70% and costs roughly 40% of on-demand. A table that peaks at 10 times its average and is provisioned for the peak runs near 10%, and on-demand is cheaper. Real tables sit between: daytime-heavy traffic with autoscaling usually lands in the 40–60% range, which still favours provisioned.

Measure your table

  1. In CloudWatch, graph ConsumedReadCapacityUnits and ConsumedWriteCapacityUnits for the table, statistic Sum, period one hour, over a week that includes your busiest day.
  2. Put timestamp, read Sum and write Sum in three columns (CSV).
  3. Paste them into the advisor, or run node cli.mjs analyze metrics.csv. Add --current-rcu and --current-wcu if the table is provisioned today.

What to look at before you switch

Questions

Is DynamoDB on-demand more expensive than provisioned?

Per unit of work, yes: at list prices on-demand costs about 3.5 times as much as a fully used provisioned unit. But provisioned capacity is paid for whether or not you use it, so on-demand is cheaper for idle, spiky or unpredictable tables and provisioned is cheaper once you keep capacity busier than about 29% on average.

Can I switch back and forth?

Yes, but AWS limits how often. You can change a table's capacity mode a limited number of times per 24 hours (check the current documentation), so decide on a week of data rather than flipping on a bad hour.

Does provisioned throttle where on-demand would not?

It can. Provisioned tables throttle requests above their capacity after burst credit runs out, and autoscaling takes minutes to react. On-demand scales to previously reached peaks quickly but has its own limits on a sudden jump of more than double the previous peak.