RDS DB instances with zero connections and under 5% CPU for 30 days
What does ZopNight detect here?
ZopNight flags `available` Amazon RDS DB instances whose `DatabaseConnections` is zero on average and peak for 30 days while `CPUUtilization` stays below 5%, excluding cross-Region read replicas, Multi-AZ instances and scheduled databases. The saving assumes deletion; a stopped RDS instance still pays for storage and restarts automatically after 7 days.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-169 |
| Category | idle |
| Severity | high |
| Metric | DatabaseConnections |
| Threshold | zero connections, CPU < 5% |
| Evaluation window | 30d |
| Source | ZopNight |
| Permissions used | rds:DescribeDBInstances · cloudwatch:GetMetricStatistics |
Where it applies
Stopping an RDS instance saves less than it looks
While an RDS instance is stopped, the stop guide explains, you are not charged for instance hours, but you are still charged for provisioned storage (including Provisioned IOPS), backup storage, and any public IPv4 address. The console also warns that a stopped instance restarts automatically after 7 days. Stopping is a tool for short pauses. A database that no application has touched in a month needs a decision about deletion.
Checking connections and CPU
aws rds describe-db-instances \ --query 'DBInstances[?DBInstanceStatus==`available`].[DBInstanceIdentifier,Engine,DBInstanceClass,MultiAZ]'
aws cloudwatch get-metric-statistics --namespace AWS/RDS --metric-name DatabaseConnections \ --dimensions Name=DBInstanceIdentifier,Value=billing-legacy \ --start-time 2026-08-26T00:00:00Z --end-time 2026-09-25T00:00:00Z \ --period 86400 --statistics MaximumCheck CPUUtilization for the same dimension. Zero connections with busy CPU means the database is
doing something internally.
What must be true
- The instance is
available. - It is not a cross-Region read replica and not a Multi-AZ deployment.
- It has no known recurring schedule, which would mean it is being parked on purpose.
DatabaseConnectionsis zero on both average and maximum across 30 days.CPUUtilizationis present and below 5% on both average and maximum.- ZopNight has a positive monthly cost for it.
Databases left out
DatabaseConnections counts client sessions only, so a database running replication or scheduled
work inside the engine can show zero connections while it works. Requiring low CPU as well keeps
those out, and missing CPU data is enough to stop the finding. Cross-Region replicas and Multi-AZ instances
are skipped because they exist for availability rather than direct traffic. For clusters rather than
single instances, see
Idle Aurora Cluster, No Connections.
The figure assumes deletion
saving = full monthly bill (instance, storage, IOPS and backups)cost after deletion = 0The finding says plainly that stopping saves compute only. ZopNight treats it as advisory and does not stop the instance itself, because a stop cannot deliver this saving and reverses after 7 days.
Retiring an unused database
- Confirm no application, job or user connects, and that nothing reads its snapshots.
- Delete with a final snapshot:
aws rds delete-db-instance --db-instance-identifier billing-legacy --final-db-snapshot-identifier billing-legacy-final - If the owner is unsure, stop it temporarily with a snapshot first:
aws rds stop-db-instance --db-instance-identifier billing-legacy --db-snapshot-identifier billing-legacy-pre-stop - Remove parameter and option groups that were used only by this instance.