Idle Redshift Cluster
What does ZopNight detect here?
Redshift clusters whose DatabaseConnections stay below 1.0 across a covered 30-day window, without CPU corroboration above 5% average, are pause candidates. ZopNight recommends a reversible pause and prices savings as cost times 0.80 (the documented conservative compute share), leaving the managed-storage residual in the optimized cost.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-099 |
| Category | schedule |
| Severity | medium |
| Metric | none — pure configuration read |
| Source | redshift_idle.go |
Where it applies
Near-zero JDBC sessions with CPU as veto
- DatabaseConnections, listed among the cluster-level Redshift metrics, keyed UID:DatabaseConnections, covered (MaxCoverageDays >= MinMaxCoverageDays), with both Maximum and Average below the small floor (redshiftIdleConnFloor = 1.0; floor not strict ==0, to tolerate stray health-check/monitoring connects)
- CPUUtilization keyed UID:CPUUtilization, read only as a corroboration guard: when present AND covered, an Average at/above redshiftIdleCPUFloor (5.0%) overrides the idle-connections signal and the rule abstains. That guards the niche datashare-producer / Spectrum-only cluster that can do real compute while registering almost no JDBC/ODBC sessions. The window Maximum deliberately does not gate: an idle-but-on cluster holding data runs auto-VACUUM/ANALYZE/backup maintenance that briefly spikes CPU past the floor, so a 30-day Max term would veto exactly the population the rule targets (the idle signature is Max-spiky/Avg-near-zero). Absent/under-covered CPU data falls back to the DatabaseConnections gate alone.
- cost basis (r.pricing[uid] > 0)
Why pausing recovers compute but not storage
the lever is a manual, reversible pause of a fully-idle cluster (compute billing stops while managed storage keeps accruing, resumes in minutes), not a recurring off-hours cron: the aggregator’s heatmap/ScheduleData producer abstains on flat/no-variance idle series (hasWorkloadVariance() requires CPU range ≥ 2.0 or network range ≥ 1000 bytes), which is exactly this rule’s fully-idle trigger condition, so that path cannot back RC-099. savings = cost × redshiftPauseComputeShare (0.80, a documented conservative bound on the compute-vs-managed-storage split, not a per-cluster measured split); optimized = cost − savings retains the storage residual. Abstains when DatabaseConnections is absent/under-covered/non-idle, when CPUUtilization corroboration shows non-trivial compute, or when pricing is unavailable: never a $0/advisory placeholder.
Pausing rather than deleting
- Verify no scheduled queries or ETL jobs depend on this cluster
- Check for any active connections in the Redshift console
- Pause the cluster (compute billing stops; managed storage continues; resume takes minutes) whenever it is not in active use
- Only if confirmed permanently abandoned: snapshot for archival, then delete
- Consider migrating infrequent workloads to Redshift Serverless to pay per query
Connections as gate, CPU as corroboration
DatabaseConnections (30-day, AWS/Redshift, required gate) + CPUUtilization (30-day, AWS/Redshift, corroboration-only)