Skip to main content

DynamoDB: Delete unused Global Secondary Indexes

Updated over a week ago

Difficulty: Medium

Description

We identified Global Secondary Indexes (GSIs) in your DynamoDB tables that appear to be unused based on their read activity metrics. Unused GSIs continue to incur costs for storage and write operations even when not being accessed. Deleting these unused GSIs provides immediate cost savings.


Selection Criteria

  • The GSI has 0 read operations (ConsumedReadCapacityUnits) over the last 30 days.

  • The GSI has a meaningful associated cost (minimum threshold: $10/year).


Expected Saving

100% of the GSI's annualized storage and write costs, calculated as follows:

  • Storage savings: 100% of the storage allocated to the GSI (based on projected attributes size)

  • Write savings: 100% of write capacity costs

    • Provisioned mode: based on ProvisionedWriteCapacityUnits metrics

    • On-Demand mode: based on ConsumedWriteCapacity

Saving varies depending on the GSI's projected attribute set, table size, and capacity mode.


Operational Impact

Downtime (table): None — deleting a GSI does not interrupt read or write operations on the parent table. Other indexes remain unaffected during deletion.

Breaking change (application): YES — CRITICAL ⚠️

Any application query that uses this GSI will immediately return an error after deletion. It is mandatory to validate with the development team that no production code references this GSI before proceeding. This must be an explicit customer approval step.

Deletion is permanent: A deleted GSI cannot be restored. Recreating it requires a full reindex of the table, which consumes significant WCU and time depending on table size.

AWS constraint: Only one GSI can be deleted per UpdateTable API call.


References:

Did this answer your question?