Skip to main content
schedule · aws

Idle Redshift Cluster

resource types
1
rule IDs covered
1
severity
medium

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

How ZopNight evaluates Idle Redshift Cluster.
Field Value
Rule IDsRC-099
Categoryschedule
Severitymedium
Metricnone — pure configuration read
Sourceredshift_idle.go

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

  1. Verify no scheduled queries or ETL jobs depend on this cluster
  2. Check for any active connections in the Redshift console
  3. Pause the cluster (compute billing stops; managed storage continues; resume takes minutes) whenever it is not in active use
  4. Only if confirmed permanently abandoned: snapshot for archival, then delete
  5. 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)

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·