RDS Metrics Reference
DB Optimizer collects the following CloudWatch metrics for every registered RDS instance, at a 60-second period aligned to minute boundaries.
Common metrics (all engines)
| Metric | Statistic | Unit | Description |
|---|---|---|---|
CPUUtilization | Average | Percent | CPU usage of the DB instance |
FreeableMemory | Minimum | Bytes | Available RAM including reclaimable page cache |
DatabaseConnections | Average | Count | Active client connections |
ReadIOPS | Average | Count/sec | Read I/O operations per second |
WriteIOPS | Average | Count/sec | Write I/O operations per second |
ReadLatency | Average | Seconds | Average time per read I/O |
WriteLatency | Average | Seconds | Average time per write I/O |
DiskQueueDepth | Average | Count | Outstanding I/O requests waiting |
FreeStorageSpace | Minimum | Bytes | Available storage on the instance |
ReplicaLag | Maximum | Seconds | Replication delay (replicas only) |
SwapUsage | Maximum | Bytes | Swap space in use |
That table is the whole set
Eleven metrics, requested identically for every engine. There are no PostgreSQL-specific, MySQL-specific or Aurora-specific requests — no MaximumUsedTransactionIDs, BinLogDiskUsage, AuroraReplicaLag, FreeLocalStorage or Volume* metric is collected. The engine recorded on the instance selects one of exactly two branches (mysql,postgres for RDS, redis,valkey for ElastiCache), not a per-engine metric list.
Dimensions
DBInstanceIdentifier only.
Scrape interval
The default scrape interval is 300 seconds (5 minutes). At this interval, each poll requests 5 minutes of 60-second datapoints — the same resolution as a 60-second interval but at one fifth the CloudWatch API cost.
DB_OPTIMIZER_SCRAPE_INTERVAL is enforced at 300 to 3600 seconds. A value outside that range fails core's startup with an error rather than being clamped, and there is no override.
Data retention
RDS metrics are retained for 15 days, the same as raw node and pod metrics. There is no longer-term rollup for them.
Null handling
If CloudWatch returns no datapoint for a metric in a period, no row is stored and the API reports that metric as null. A measured value of 0 is stored and reported as 0. The console renders null as an em dash (—) and 0 as a zero — two visually distinct states so "not measured" is never mistaken for "measured and idle".