Skip to content
Cloud Efficiency Hub

Unnecessary Additional Regions on Cosmos DB Accounts

The short version

Cosmos DB makes global replication a checkbox: regions can be added to an account at any time, and every container's provisioned throughput and every GB of data is then reserved and stored again in each region.

PointFive Research

Cloud cost research at PointFive

Azure service
Azure Cosmos DB
Category
Databases
Reference
CER-0441
Type
Overprovisioned Resource

Explanation

Why the waste happens and who it affects.

An account with two extra read regions pays three times the throughput and three times the storage of a single-region account, whether or not any client ever reads from those regions.

Extra regions accumulate when production templates with geo-redundancy or multi-region writes are reused for development, test and staging accounts, when a region added for a past latency goal or a migration is never removed, or when a disaster recovery design is set once and not revisited. Microsoft's multi-region cost guidance tells teams to monitor consumed throughput per region and add or remove regions on demand, and calls under-utilized read regions inefficient.

Billing model

The pricing dimensions that drive this cost.

Regional throughput
RU/s configured on databases and containers is reserved in every region of the account, so the hourly total is RU/s times the number of regions
Regional storage
Data and index storage is billed in each region that holds a replica
Multi-region writes
Every region becomes writable and throughput is billed at the multi-region write rate
Region removal
Regions can be removed at any time; in single-region write mode the write region must be failed over first

How to detect

5 checks to find it in your estate.

  • List Cosmos DB accounts with more than one entry in properties.locations (Azure Resource Graph type microsoft.documentdb/databaseaccounts), and flag non-production accounts and accounts with enableMultipleWriteLocations set to true
  • For each secondary region, chart Total Requests and Total Request Units split by Region over 30 days; read regions that serve almost no client traffic beyond replication are candidates
  • Review application connection settings for the Cosmos DB SDK preferred regions list; regions that no client lists are serving only as replication or failover targets
  • Confirm with owners whether each extra region is required by a documented recovery or latency objective
  • Estimate the saving as the account's provisioned RU/s and stored GB multiplied by the number of regions that could be removed

How to fix

5 ways to remove the waste.

  • Remove read regions with no traffic and no recovery requirement from Replicate data globally in the portal, or by updating the account's locations with the CLI, PowerShell or templates
  • Keep development, test and staging accounts single-region and without multi-region writes unless a test specifically needs them
  • Disable multi-region writes where single-region writes plus a read region meet availability needs, and review client consistency and failover settings first
  • Where a secondary region must remain only for disaster recovery, use autoscale with dynamic scaling so an idle secondary region scales down independently instead of matching the primary
  • Document the reason for each region in account tags so replication settings are reviewed when requirements change

Documentation

Vendor references for pricing and configuration.