Shared Database (RDS, Aurora, Cosmos DB, etc.)

🏢 Enterprise · ☁️ MSP


  1. The Challenge

A large shared database instance or cluster serves multiple business units, departments, or customers with very different query patterns and load - but the bill shows one number for the whole database, with no way to tell which unit is actually driving compute, I/O, or storage cost.


  1. The Solution

Bring in per-unit database activity (query volume, IOPS, data transfer, or storage footprint) as telemetry, then allocate the database's cost by whichever measure best reflects what's actually driving spend - compute-bound workloads by query volume, I/O-bound workloads by IOPS, storage-heavy units by GB stored.


  1. Dataset Needed
FieldTypeExamplePurpose
timestampDimension2026-05-27T15:04:05ZAligns usage with billing period
business_unit / customer_idDimensionFinance, Customer IDThe unit the cost will be broken out by
query_countMeasure1,240,000Query volume per unit
iopsMeasure8,500Read/write operations per unit
data_transfer_gbMeasure320GB read/written per unit
storage_gbMeasure1,450Storage footprint per unit

📘 You don't need every measure - pick the one(s) that match what's actually driving your database bill. Cost comes from your existing billing export; this dataset only supplies the usage side


  1. KPIs to Build

    KPIFormulaWhat it represents
    Cost per 1M QueriesAmortized Cost ÷ query_count × 1,000,000Compute-driven cost efficiency per unit
    Cost per IOPSAmortized Cost ÷ iopsI/O-driven cost share - useful for provisioned-throughput billing
    Cost per GB StoredAmortized Cost ÷ storage_gbStorage-specific cost per unit


  1. Business Mapping to Create
    TypeValuePurpose
    TypeTelemetry-Based Group By-
    Rule → ConditionCondition Service Is Amazon RDS (or your DB service)The cost slice to allocate
    Pipelinepipline_nameWhere the usage data lives
    Custom Dimension (Group By)business_unitThe field the cost will be broken out by
    Allocation Metricquery_count (or iops, data_transfer_gb, storage_gb)The measure that determines each unit's share - swap depending on dominant cost driver, or build separate mappings for compute vs. storage
    Time GranularityDailyMatches the billing period granularity
    Include Unmatched CostsOnCosts with no matching usage go to a "Not Allocated" bucket instead of being dropped
    Mapping NameCost per CustomerBecomes the group-by option in Cost & Usage Explorer



  1. How to Display It in the UI

    Build these as saved views in Cost & Usage Explorer, then pin them to a dashboard:

    ViewGroup By / MeasureWhat it shows
    DB Cost per Unit — TrendGroup By → Business Mapping; chart over timeStacked chart by business unit over time
    Top Consumers by Query Volume / IOPSSame mapping, sorted descending, table viewFlags heaviest units
    Storage Growth per UnitTrend view isolating storage_gbIsolates storage-cost drivers
    Drill-DownAny unit → Next Drill by Instance/RegionAd hoc investigation into a unit's cost spike