Storage Cost Compounding Without Retention Policy
A time-series or event log table grows indefinitely without a retention policy. Monthly storage cost compounds as data accumulates in the primary database, in read replicas, in automated backups, and in cloud object storage. A table that costs $50/month at year one can reach $600/month by year three: not from increased usage, but purely from accumulated history that no one reads and no one deleted.
PostgreSQL RDS primary + 2 read replicas + daily automated backups retained 35 days + CloudWatch logs
Degradation Replay
Nominal: Year One: Costs Visible but Acceptable
System in first year of operation; tables growing but storage costs within initial budget
- ·Primary database at 50GB: $5.75/month storage cost
- ·2 read replicas at 50GB each: $11.50/month replica storage
- ·35-day backup window: ~175GB: $16.63/month backup cost
- ·Total storage cost approximately $35-40/month: below budget alert threshold
- ·Read replicas synchronized with primary: storage cost is 3× primary
- ·Backup chain growing daily but within expected norms
- !Costs within budget: no action triggered
Operational simulation model only, not a production forecast. Degradation stages are derived from structured operational knowledge, not measured telemetry. Do not use for capacity planning or incident response.
Run With Your Parameters
Adjust the parameters below to see how metric values shift across degradation stages. Formulas are deterministic: same inputs always produce the same output.
Simulation Parameters
Starting data volume
0 = no deletion: unbounded growth
Computed Degradation Stages
System in first year of operation; tables growing but storage costs within initial budget
Primary database reaches 200GB; monthly storage bill begins to surface in cost reviews
Primary database at 500GB; monthly storage bill at $350-400/month; engineering leadership notified
Primary exceeds 1TB; monthly bill approaching $1,000/month; budget escalation to VP level
90-day retention DELETE completed; archiving to S3 Glacier operational; monthly cost declining
Threshold Events
Monthly storage cost at $93 vs $40 baseline. Storage: 1,157 GB at $0.08/GB/month.
Monthly storage cost at $214 vs $40 baseline. Storage: 2,675 GB at $0.08/GB/month.
Interpretation
At 15%/month growth, storage reaches 5.3× initial size at peak. Monthly cost: $214 (baseline: $40).
Unbounded data growth without retention policy: storage cost compounds month-over-month
Implement 1-month retention policy to cap storage. Archive cold data to object storage ($0.023/GB vs ${p.cost_per_gb_month}/GB hot). Add partitioned tables for time-series data to enable cheap DROP PARTITION.
Parameterized simulation: not a production forecast. Values derived from deterministic formulas applied to your parameters. Do not use for capacity planning or operational decisions without validation.
Propagation Model
Every GB of new data costs $0.115/GB/month on RDS gp2; same GB replicated to 2 replicas costs 3× primary; backup storage at $0.095/GB/month grows 35× primary daily data for 35-day retention
Stabilizes: No stabilization: cost grows linearly with data indefinitely
Automated backup size = primary_size × backup_retention_days × daily_change_rate; at 10% daily change rate and 35-day retention, backup storage is 3.5× primary size
Stabilizes: Stabilizes only when retention window is shortened or primary growth is halted
Verbose application logs incur two separate CloudWatch Logs charges: ingestion at $0.50/GB (charged once per GB collected) and storage at $0.03/GB/month on retained volume. At 10GB/day, ingestion is ~$150/month; after 12-month retention the ~3.6TB of accumulated logs adds ~$110/month of storage, so logs approach ~$260/month and keep compounding as retention grows
Stabilizes: Reduces immediately when log retention policy is applied (non-destructive going forward)
Recovery Patterns
Implement retention DELETE + archive to S3 Glacier
1-3 weeks to delete historical data (batched to avoid replication lag); immediate cost reduction as data deleted- ·Bulk DELETE generates significant WAL: run during off-peak hours in batches of 100k rows
- ·Archived data requires 3-5 hour Glacier restore to access: acceptable for compliance lookups, not for operational queries
- !VACUUM FULL required to return disk space to OS: or pg_repack for online reclaim
Migrate to partitioned table with automated partition DROP
1-2 weeks migration: zero ongoing maintenance cost thereafter- ·Partition migration requires application schema changes
- ·Old data must be migrated to partition-compatible table structure
- !Partition pruning must be validated for all query patterns: queries without partition key in WHERE clause will full-scan all partitions
Operational Summary
Storage cost compounding is the most preventable engineering cost problem. The failure mode is always the same: a table is created for events, metrics, or audit logs with no retention policy. No one deletes it because no one is responsible for it. By the time the cost appears in a budget review, three years of data has accumulated and the remediation requires a multi-week engineering project.
The numbers are straightforward. Every GB of RDS PostgreSQL data costs approximately $0.115/month in primary storage, $0.23/month replicated to two standbys, and $0.095/month in 35-day backup storage. A table growing at 5GB/month reaches 180GB in 3 years, costing $21/month for that table alone: and that is before backup multiplication. Cloud storage bills compound because engineers do not think of disk as a recurring operational cost until they are looking at it in a billing dashboard.
The mitigation is trivially inexpensive to implement at table creation time and extremely expensive to implement retroactively at year three with a TB of data.