DYNAMODB CAPACITY MODE ADVISOR · RUNS IN YOUR BROWSER

Is your DynamoDB table on the wrong capacity mode?

Paste the ConsumedReadCapacityUnits and ConsumedWriteCapacityUnits from CloudWatch and get the monthly cost on-demand, provisioned with autoscaling and provisioned at a fixed peak, the break-even utilisation, and whether your current provisioned capacity throttles.

Nothing is uploaded and AWS is never contacted. The text box is analysed in this browser and never leaves your device. Traffic inside a period is treated as flat, so short bursts are invisible.

1. Paste consumed capacity

Prefer a CLI, or want a CI check?

Same logic, zero dependencies, one command — reads a file or stdin:

node cli.mjs analyze metrics.csv
cat metrics.csv | node cli.mjs analyze - --period 300 --current-rcu 400 --current-wcu 100
node cli.mjs analyze metrics.csv --fail-on warn      # exit 1 when a switch would save 20% or more
node cli.mjs analyze metrics.csv --json --prices my-prices.json

Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: DynamoDB on-demand vs provisioned: which is cheaper.

What's recognised

InputHandling

Prices are illustrative and dated; edit them with --prices in the CLI. Free tier, reserved capacity, Standard-IA, other regions, global tables and backups are not modelled.

Common questions

Does this connect to my AWS account?

No. It reads the metric rows you paste and never contacts AWS. It cannot see your real invoice, free tier, reserved capacity, table class, global tables or backups, so every dollar figure is the rows you pasted times list prices you can edit.

How do I get the numbers?

In CloudWatch, graph ConsumedReadCapacityUnits and ConsumedWriteCapacityUnits for the table with statistic Sum and a one-hour period, or run aws cloudwatch get-metric-statistics for each and put the Sum values in three columns: timestamp, read, write. A week that includes your busiest day gives a far better answer than an hour.

Why is the break-even about 29%?

On-demand charges per request; provisioned charges per unit-hour whether you use it or not. At list prices one provisioned unit-hour costs 29% of what the same unit-hour of fully used traffic costs on-demand, so provisioned wins when you keep capacity busier than about 29% on average. Autoscaling targets 70%, which is why steady tables are usually cheaper provisioned.

What can this not see?

Anything shorter than the period. Traffic is treated as flat inside each hour, so a five-minute burst is invisible; DynamoDB burst capacity hides some of that and the rest throttles. Autoscaling reacts in minutes, so the tool flags periods where traffic rose faster than the previous capacity allowed for. Treat the result as a screen, then confirm on a non-critical table.

Is my data uploaded anywhere?

No. The browser page analyses the text in your own browser and never sends it anywhere. The CLI reads a local file or stdin and makes no network call.