On-demand vs provisioned is the big lever

DynamoDB cost optimization

The biggest DynamoDB lever is the capacity mode. On-demand is convenient but expensive for steady, predictable traffic, where provisioned capacity with auto-scaling costs a fraction as much.

Why the waste happens

  • Tables run in on-demand mode for predictable, steady workloads, where provisioned capacity would be far cheaper.
  • Provisioned tables are set to a throughput ceiling far above real usage and never adjusted.
  • Tables have no TTL, so old items accumulate and storage grows without bound.
  • Global secondary indexes are created and then never queried, each carrying its own throughput and storage cost.

How to spot it

  • On-demand tables with steady, predictable request rates.
  • Provisioned tables where consumed capacity sits far below provisioned capacity.
  • Tables with steadily growing item counts and no TTL configured.
  • Global secondary indexes with little or no read activity.

The fix

  • Switch predictable workloads from on-demand to provisioned capacity with auto-scaling, or buy reserved capacity.
  • Right-size provisioned throughput to real usage and let auto-scaling handle the peaks.
  • Add a TTL attribute so expired items are removed automatically.
  • Drop global secondary indexes that are not queried.

Find every DynamoDB issue in one scan

Cloud Cost Analyzer evaluates DynamoDB tables for the on-demand versus provisioned decision, over-provisioned throughput, missing TTL, and unused indexes, and estimates what each change would save.

$ cca scan --provider aws

Read-only, runs in about 5 minutes. Free tier, no credit card.

DynamoDB cost FAQ

Is DynamoDB on-demand or provisioned cheaper?+

On-demand is cheaper for spiky or unpredictable traffic and for new tables where you cannot forecast load. For steady, predictable workloads, provisioned capacity with auto-scaling (or reserved capacity) is usually much cheaper per request. The right mode depends on the traffic shape.

How does a TTL reduce DynamoDB costs?+

A time-to-live attribute lets DynamoDB automatically delete expired items at no extra cost, keeping storage and index sizes in check instead of letting old data accumulate and grow the bill.

Do unused global secondary indexes cost money?+

Yes. Every GSI stores a copy of the projected attributes and, in provisioned mode, carries its own throughput. An index that is never queried is pure cost, so drop indexes you do not use.

See what you are overpaying for

Point a read-only CLI at your account and get a ranked fix list with dollar amounts. Free tier, no credit card.