DynamoDB pricing is a price per million read and write requests in on-demand mode or per hour of provisioned read and write capacity units in provisioned mode, per GB-month of stored data by table class, per GB-month for backups and point-in-time recovery, plus a price per replicated write unit for global tables, per request for streams and per GB for export, import and restore. On the bill, write units dominate on tables with traffic, because a write unit costs five times a read unit in Frankfurt, and storage dominates on tables that keep history.

Pricing dimensions

DynamoDB prices throughput and storage separately, and throughput has two modes with units of their own: on-demand counts requests, provisioned counts provisioned units per hour, used or not. The unit is the same work in both cases, a read of up to 4 KB or a write of up to 1 KB, and the table class shifts the price between storage and throughput. Every dimension carries its own usage type.

DimensionUnitWhat drives itOptional
Read and write requests (on-demand)Million read request units and write request unitsEvery request: 1 RRU per 4 KB for a strongly consistent read, half for eventual consistency, double for transactions; 1 WRU per 1 KB, double for transactionsYes, instead of provisioned
Provisioned capacityHour per read capacity unit and write capacity unitThe configured capacity per second, used or not; auto scaling moves it between minimum and maximumYes, instead of on-demand
StorageGB-month of raw data plus 100 bytes per item, the first 25 GB freeItems, local secondary indexes and global secondary indexes, which count as tables of their ownNo
Table class Standard-IAStorage at 40 percent and throughput at 125 percent of the Standard priceTables where storage dominates the costYes
Global tablesReplicated write request units or replicated write capacity units per replica regionEvery write, once into every replica region; reads and storage per region as on a single tableYes
BackupsGB-month for on-demand backups; GB-month of the table size for point-in-time recovery; GB per restoreTable size with local secondary indexes, retention up to 35 days for PITRYes
Streams and change data captureStreams read request units per GetRecords call, the first 2.5 million a month free; change data capture units per write up to 1 KB for Kinesis Data StreamsEvery consumer of the stream; Lambda triggers read free of chargeYes
Export and importGB exported to S3, GB imported from S3Full and incremental exports, imports into new tablesYes
Data transferGB to other regions; within the region and inbound freeAccess from other regions, replicationYes (data transfer pricing)
Purchase optionReserved provisioned capacity in blocks of 100 units, one or three years, with an upfront paymentProvisioned only, Standard class only, one region onlyYes (reserved capacity for managed services)

The unit is what both modes share: a strongly consistent read of an item up to 4 KB costs one unit, an eventually consistent read half a unit and a transactional read two; a write of an item up to 1 KB costs one unit, a transactional write two. Larger items are rounded up to the next boundary, so a 10 KB item needs ten write units and, for a strongly consistent read, three read units. Global secondary indexes consume units of their own for every write that changes them, and storage of their own.

In on-demand mode you pay per million of these units for what the table actually consumes, and DynamoDB scales without configuration; in provisioned mode you set units per second and pay them per hour whether the traffic comes or not, with auto scaling adjusting the figure within a range to the utilisation, with a delay of minutes. The price list shows the difference: a million on-demand write units costs USD 0.7625 in Frankfurt, a provisioned write capacity unit USD 0.000793 per hour; one unit per second for a month equals 2.63 million requests, so provisioned is cheaper as soon as the provisioned capacity is more than about 29 percent utilised. The free allowance of 25 units per direction, 25 GB of storage and 2.5 million stream requests a month applies only to provisioned capacity in the Standard class and does not expire.

The Standard-IA table class trades storage for throughput: storage costs 40 percent of the Standard price, requests and capacity 125 percent. It pays off for tables whose storage costs more than their throughput, such as logs and histories, and not for tables that are written constantly. Global tables charge every write once in every replica region as a replicated write unit, at a price above the plain write unit; reads and storage accrue per region as on a single table, and adding a replica costs a restore per GB.

How it appears in your billing data

In the Cost and Usage Report the lines carry the product code AmazonDynamoDB, lineItem/ResourceId the table's ARN and the usage type the dimension; the prefix is the region code, EUC1 for Frankfurt. On-demand appears as EUC1-ReadRequestUnits and EUC1-WriteRequestUnits with lineItem/Operation PayPerRequestThroughput, provisioned as EUC1-ReadCapacityUnit-Hrs and EUC1-WriteCapacityUnit-Hrs with the operation CommittedThroughput; the Standard-IA class carries IA- after the region code, such as EUC1-IA-WriteRequestUnits, and global tables replace Write with ReplWrite, such as EUC1-ReplWriteCapacityUnit-Hrs. The free allowance appears as a line of the same usage type at a price of 0 for the first 18,600 unit-hours a month, which is 25 units over 744 hours.

Storage appears as EUC1-TimedStorage-ByteHrs and EUC1-IA-TimedStorage-ByteHrs in GB-months, backups as EUC1-TimedBackupStorage-ByteHrs for on-demand backups and EUC1-TimedPITRStorage-ByteHrs for point-in-time recovery, restores as EUC1-RestoreDataSize-Bytes, export and import as EUC1-ExportDataSize-Bytes, EUC1-IncrementalExportDataSize-Bytes and EUC1-ImportDataSize-Bytes per GB. Streams appear as EUC1-Streams-Requests with the operation GetRecords, change data capture to Kinesis as EUC1-ChangeDataCaptureUnits-Kinesis. The lines of a global secondary index merge into the table; a split per index comes only from CloudWatch with ConsumedReadCapacityUnits and ConsumedWriteCapacityUnits per index.

What the report does not show is utilisation: a WriteCapacityUnit-Hrs line names the provisioned hours, not the consumed ones, and only the comparison with ConsumedWriteCapacityUnits in CloudWatch says how much of it was work. The report's structure is described in the AWS Cost and Usage Report. In the FOCUS export, ServiceName carries Amazon DynamoDB and x_ServiceCode AmazonDynamoDB; requests, capacity, storage and backups are ChargeCategory Usage, reserved capacity PricingCategory Committed and its upfront payment ChargeCategory Purchase (FOCUS columns).

on-demandprovisionedCapacity mode?ReadRequestUnits andWriteRequestUnits: therequests consumedReadCapacityUnit-Hrs andWriteCapacityUnit-Hrs: thehours provisioned, used or notConsumedReadCapacityUnits andConsumedWriteCapacityUnitsin CloudWatchUtilisation: consumed overprovisioned, which thereport alone cannot say
A provisioned line names the hours provisioned, not the work done, so utilisation comes only from CloudWatch beside it

Levers

Configuration: the capacity mode is the first lever: on-demand for irregular or unknown traffic and for tables that mostly rest; provisioned with auto scaling for steady load where utilisation stays above the break-even point; the switch is possible up to four times in a rolling 24 hours. Item size is the second, because every started kilobyte costs a write unit: attributes that are never read, large blobs and long attribute names belong in S3 or shortened. The third is the read pattern: eventually consistent reads halve the read units, transactions double both, and a scan reads the whole table. The method is in database optimisation.

irregular, unknown,or mostly restingsteady, utilisation abovethe break-even pointWhat is the traffic like?On-demand: paidper requestProvisioned with auto scaling;reserved capacity for thebaseline it never goes belowItem size on every write: everystarted kilobyte a write unit, sounread attributes and blobsgo to S3 or get shortened
On-demand for irregular or resting tables, provisioned with auto scaling for steady load above the break-even point, and item size as the lever on every write

Purchase option: for provisioned capacity in the Standard class, reserved capacity lowers the hourly price against an upfront payment over one or three years, in blocks of 100 units per region; it does not apply to on-demand, Standard-IA and replicated write units. What gets reserved is the baseline that auto scaling never goes below (commitment strategy).

Architecture: the Standard-IA class for tables whose storage dominates the cost; TTL for items that expire, because deletion through TTL costs no write units; global secondary indexes with only the projected attributes the query needs, because every index doubles storage and write units. Global tables only for regions that are read from, because every replica region pays all the writes. The dimensions across all three providers are set side by side in managed databases.

Where it goes wrong

  • Provisioned pays hours, not work. A table with 1,000 provisioned write units that consumes 50 per second pays 1,000 per hour. ConsumedWriteCapacityUnits against ProvisionedWriteCapacityUnits in CloudWatch shows the gap; auto scaling or on-demand closes it.
  • On-demand under steady load. An evenly loaded table in on-demand mode pays about three and a half times per million requests what provisioned units cost at full utilisation. Tables whose consumption barely varies through the day belong in provisioned mode.
  • The index doubles the write cost. Every global secondary index consumes write units of its own for every write that changes a projected attribute, and storage of its own. Indexes with ALL projection on tables with many writes are the usual candidates.
  • Transactions cost double. TransactWriteItems and TransactGetItems pay two units per item. Where a conditional write suffices, it halves the line.
  • PITR costs by table size, not by change. Point-in-time recovery charges the whole table per GB-month, even when almost nothing changes. On large, quiet tables a weekly on-demand backup is the cheaper form.
  • Nobody reads the stream. Change data capture to Kinesis costs per write whether a consumer reads or not. Streams without consumers are switched off.
  • Standard-IA under write load. A table with constant writes pays 125 percent of throughput in Standard-IA to save 60 percent of storage. The class pays off only when the storage line is larger than the throughput line.

Example

List prices in USD for Frankfurt (eu-central-1), read on 2026-10-21 from the AWS price list: on-demand costs USD 0.1525 per million read units and USD 0.7625 per million write units, provisioned USD 0.0001586 per read unit and USD 0.000793 per write unit and hour above the free allowance; storage costs USD 0.306 per GB-month above 25 GB, in Standard-IA USD 0.1224; replicated write units for global tables USD 0.7625 per million or USD 0.000793 per hour; on-demand backups USD 0.1224 and point-in-time recovery USD 0.2448 per GB-month, restores USD 0.1836 per GB, export USD 0.1224 per GB; streams USD 0.2448 per million read requests above 2.5 million, change data capture to Kinesis USD 0.122 per million units.

A table of 50 GB that receives 100 million writes and 300 million eventually consistent reads of items under 1 KB a month costs on-demand USD 76.25 for the write units, USD 22.88 for the 150 million read units and USD 7.65 for 25 GB of storage above the allowance, USD 106.78 in all. Spread evenly that is 38 writes and 57 read units per second; with 50 provisioned write units and 75 read units as a margin, provisioned costs (50 minus 25 free) × 730 × 0.000793 = USD 14.47 plus (75 minus 25) × 730 × 0.0001586 = USD 5.79 plus USD 7.65 of storage, USD 27.91 in all. The same table in Standard-IA costs on-demand USD 95.50 for the write units, USD 28.58 for the read units and USD 6.12 for 50 GB of storage without an allowance, USD 130.20 in all. Point-in-time recovery adds USD 12.24 a month for the 50 GB. The figures show that steady load in provisioned mode costs about a quarter of the on-demand price, that write units are the largest line in both modes, and that Standard-IA costs more on this table, because throughput exceeds storage.

Sources

Read on 2026-10-21. Prices: Amazon DynamoDB pricing, AWS Price List, offer AmazonDynamoDB for eu-central-1. Billing data: understanding DynamoDB billing, Cost and Usage Report columns: lineItem, FOCUS 1.0 with AWS columns. Service: read and write operations, provisioned throughput, table classes, global tables.