Bird
Raised Fist0
AWScloud~5 mins

DynamoDB capacity modes (on-demand, provisioned) in AWS - Commands & Configuration

Choose your learning style10 modes available
Introduction
DynamoDB capacity modes control how you pay for and manage the read and write throughput of your database. Choosing the right mode helps you handle traffic efficiently without overspending or running out of capacity.
When you expect unpredictable or spiky traffic and want to pay only for what you use without managing capacity.
When you have steady, predictable traffic and want to save costs by specifying exact read and write capacity.
When you want to avoid throttling by automatically scaling capacity with demand.
When you want to control costs tightly by setting limits on read and write units.
When you want to switch between modes as your application traffic patterns change.
Config File - dynamodb-table.json
dynamodb-table.json
{
  "TableName": "example-table",
  "AttributeDefinitions": [
    {
      "AttributeName": "id",
      "AttributeType": "S"
    }
  ],
  "KeySchema": [
    {
      "AttributeName": "id",
      "KeyType": "HASH"
    }
  ],
  "BillingMode": "PAY_PER_REQUEST"
}

This JSON file defines a DynamoDB table named example-table with a simple primary key id of type string.

The BillingMode is set to PAY_PER_REQUEST, which means the table uses the on-demand capacity mode. DynamoDB will automatically handle capacity and billing based on usage.

To use provisioned mode, you would omit BillingMode and instead specify ProvisionedThroughput with ReadCapacityUnits and WriteCapacityUnits.

Commands
This command creates a DynamoDB table using the JSON file that sets the capacity mode to on-demand. It tells AWS to create the table with automatic capacity management.
Terminal
aws dynamodb create-table --cli-input-json file://dynamodb-table.json
Expected OutputExpected
{ "TableDescription": { "TableName": "example-table", "TableStatus": "CREATING", "BillingModeSummary": { "BillingMode": "PAY_PER_REQUEST" }, "KeySchema": [ { "AttributeName": "id", "KeyType": "HASH" } ], "AttributeDefinitions": [ { "AttributeName": "id", "AttributeType": "S" } ], "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/example-table" } }
→
--cli-input-json - Specifies the JSON file with table configuration
This command checks the current status and configuration of the DynamoDB table to confirm it was created with the on-demand capacity mode.
Terminal
aws dynamodb describe-table --table-name example-table
Expected OutputExpected
{ "Table": { "TableName": "example-table", "TableStatus": "ACTIVE", "BillingModeSummary": { "BillingMode": "PAY_PER_REQUEST" }, "KeySchema": [ { "AttributeName": "id", "KeyType": "HASH" } ], "AttributeDefinitions": [ { "AttributeName": "id", "AttributeType": "S" } ] } }
This command switches the table from on-demand to provisioned capacity mode, setting fixed read and write capacity units to control costs and performance.
Terminal
aws dynamodb update-table --table-name example-table --billing-mode PROVISIONED --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
Expected OutputExpected
{ "TableDescription": { "TableName": "example-table", "BillingModeSummary": { "BillingMode": "PROVISIONED" }, "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 5 }, "TableStatus": "UPDATING" } }
→
--billing-mode - Sets the capacity mode to provisioned
→
--provisioned-throughput - Specifies the fixed read and write capacity units
This command verifies the table's capacity mode and throughput settings after the update to provisioned mode.
Terminal
aws dynamodb describe-table --table-name example-table
Expected OutputExpected
{ "Table": { "TableName": "example-table", "TableStatus": "ACTIVE", "BillingModeSummary": { "BillingMode": "PROVISIONED" }, "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 5 }, "KeySchema": [ { "AttributeName": "id", "KeyType": "HASH" } ], "AttributeDefinitions": [ { "AttributeName": "id", "AttributeType": "S" } ] } }
Key Concept

If you remember nothing else from this pattern, remember: on-demand mode automatically handles capacity and billing, while provisioned mode requires you to set fixed read and write units to control costs and performance.

Common Mistakes
Trying to set ProvisionedThroughput when BillingMode is PAY_PER_REQUEST
ProvisionedThroughput settings are ignored in on-demand mode and cause errors if specified together.
Use ProvisionedThroughput only when BillingMode is PROVISIONED; omit it for PAY_PER_REQUEST.
Not waiting for the table status to become ACTIVE before updating capacity mode
Updating a table while it is still CREATING or UPDATING can cause errors or delays.
Check table status with describe-table and wait until it is ACTIVE before making changes.
Setting too low provisioned capacity causing throttling
If read or write capacity units are too low for your traffic, requests will be throttled and fail.
Monitor usage and increase provisioned capacity as needed or use on-demand mode for unpredictable traffic.
Summary
Create a DynamoDB table with on-demand capacity by setting BillingMode to PAY_PER_REQUEST in the JSON file.
Use AWS CLI commands to create the table and verify its status and capacity mode.
Switch to provisioned capacity mode by updating the table with fixed read and write capacity units using the update-table command.

Practice

(1/5)
1. What is the main advantage of using DynamoDB's on-demand capacity mode?
easy
A. It offers a lower cost for steady, predictable workloads.
B. It automatically scales to handle any workload without manual capacity planning.
C. It requires you to set fixed read and write capacity units.
D. It limits the number of requests per second to a fixed amount.

Solution

  1. Step 1: Understand on-demand mode behavior

    On-demand mode automatically adjusts capacity to meet traffic demands without manual input.
  2. Step 2: Compare with provisioned mode

    Provisioned mode requires fixed capacity settings, unlike on-demand.
  3. Final Answer:

    It automatically scales to handle any workload without manual capacity planning. -> Option B
  4. Quick Check:

    On-demand = auto scaling without setup [OK]
Hint: On-demand means auto scale, no manual setup needed [OK]
Common Mistakes:
  • Confusing on-demand with provisioned fixed capacity
  • Thinking on-demand limits requests
  • Assuming on-demand is cheaper for steady workloads
2. Which of the following is the correct way to specify provisioned capacity in a DynamoDB table creation JSON?
easy
A. { "Throughput": { "Reads": 5, "Writes": 10 } }
B. { "CapacityMode": "ON_DEMAND" }
C. { "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 10 } }
D. { "ReadUnits": 5, "WriteUnits": 10 }

Solution

  1. Step 1: Recall provisioned capacity syntax

    Provisioned mode requires specifying ReadCapacityUnits and WriteCapacityUnits inside ProvisionedThroughput.
  2. Step 2: Check options for correct JSON structure

    { "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 10 } } matches the correct AWS DynamoDB API format for provisioned throughput.
  3. Final Answer:

    { "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 10 } } -> Option C
  4. Quick Check:

    ProvisionedThroughput with Read/Write units = correct syntax [OK]
Hint: Provisioned capacity uses ProvisionedThroughput with Read/Write units [OK]
Common Mistakes:
  • Using CapacityMode for provisioned capacity
  • Missing ProvisionedThroughput wrapper
  • Incorrect property names like ReadUnits
3. Given a DynamoDB table in provisioned mode with 5 read capacity units and 5 write capacity units, what happens if your application suddenly sends 20 write requests per second?
medium
A. Some write requests are throttled because they exceed the provisioned write capacity.
B. All 20 write requests succeed immediately without throttling.
C. DynamoDB automatically increases write capacity to 20 units instantly.
D. The table switches automatically to on-demand mode to handle the load.

Solution

  1. Step 1: Understand provisioned capacity limits

    Provisioned mode limits throughput to the set capacity units (5 writes per second here).
  2. Step 2: Analyze effect of exceeding capacity

    Sending 20 writes exceeds 5 units, causing throttling of excess requests.
  3. Final Answer:

    Some write requests are throttled because they exceed the provisioned write capacity. -> Option A
  4. Quick Check:

    Provisioned mode throttles excess requests [OK]
Hint: Provisioned mode throttles requests above set capacity [OK]
Common Mistakes:
  • Assuming automatic capacity increase in provisioned mode
  • Thinking on-demand mode applies automatically
  • Believing all requests always succeed
4. You configured a DynamoDB table with provisioned capacity: 10 read units and 10 write units. Your application experiences throttling errors during peak hours. What is the best immediate fix to reduce throttling without downtime?
medium
A. Switch the table to on-demand capacity mode.
B. Reduce the size of items stored in the table.
C. Delete and recreate the table with higher capacity.
D. Increase the provisioned read and write capacity units.

Solution

  1. Step 1: Identify cause of throttling

    Throttling occurs because provisioned capacity is too low for peak traffic.
  2. Step 2: Choose immediate fix without downtime

    Increasing provisioned capacity units can be done live without deleting the table.
  3. Final Answer:

    Increase the provisioned read and write capacity units. -> Option D
  4. Quick Check:

    Increase capacity units to reduce throttling [OK]
Hint: Increase provisioned units live to fix throttling fast [OK]
Common Mistakes:
  • Deleting and recreating table causes downtime
  • Assuming switching to on-demand is instant and free
  • Reducing item size does not fix capacity limits
5. A startup expects unpredictable traffic spikes and wants to minimize cost during low usage while avoiding throttling during spikes. Which DynamoDB capacity mode should they choose and why?
hard
A. On-demand mode because it charges per request and scales instantly without manual setup.
B. Provisioned mode with auto scaling enabled to adjust capacity automatically.
C. Provisioned mode with fixed capacity to control costs strictly.
D. On-demand mode but with a fixed maximum request limit to save costs.

Solution

  1. Step 1: Understand startup's needs

    They want to avoid throttling during spikes and save cost during low usage.
  2. Step 2: Compare capacity modes for unpredictable traffic

    On-demand mode charges per request and auto scales instantly, ideal for unpredictable spikes.
  3. Step 3: Evaluate other options

    Provisioned with auto scaling helps but requires setup and may lag; fixed capacity risks throttling or cost waste.
  4. Final Answer:

    On-demand mode because it charges per request and scales instantly without manual setup. -> Option A
  5. Quick Check:

    Unpredictable traffic = on-demand mode best [OK]
Hint: Unpredictable spikes? Choose on-demand for auto scaling [OK]
Common Mistakes:
  • Choosing fixed provisioned capacity for unpredictable traffic
  • Assuming auto scaling is instant and always perfect
  • Thinking on-demand has fixed request limits
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard