Explanation
Cloud SQL instances are often over-provisioned or left running despite low utilization. Since billing is based on allocated vCPUs, memory, and storage - not usage - any misalignment between actual workload needs and provisioned capacity leads to unnecessary spend. Common causes include: * Initial oversizing during launch that was never revisited * Non-production environments with continuous uptime but minimal use * Databases used intermittently (e.g., for nightly reports) but kept running 24/7 Without rightsizing or scheduling strategies, these instances generate ongoing cost with limited business value.
Relevant Billing Model
Billed based on: * vCPU and memory provisioned per instance-hour * Storage provisioned (per GB-month) and IOPS for SSDs * Backups and network egress Charges accrue regardless of utilization levels; costs reflect provisioned capacity, not actual usage.
Detection
- Review CPU and memory utilization trends over a representative period
- Identify instances with consistently low usage relative to provisioned specs
- Check for instances with uptime but no active connections or query activity
- Evaluate whether the environment (dev, test, QA) requires full-time availability
- Examine storage and IOPS usage to identify excessive disk allocation
Remediation
- Right-size vCPU and memory allocations based on actual performance needs
- Schedule automatic shutdown for non-production instances during off-hours
- Use Cloud SQL's stop/start capability for intermittent workloads
- Evaluate if the workload can be moved to a lower-cost alternative like Cloud SQL Auth Proxy \+ serverless alternatives for occasional querying
- Implement monitoring to trigger reviews when utilization stays below a threshold
Relevant Documentation
* Cloud SQL Pricing * View Cloud SQL Instance Metrics * Start and Stop a Cloud SQL Instance