DBRaven
Critical

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

Stage 1

Nominal: Year One: Costs Visible but Acceptable

Nominal
Trigger

System in first year of operation; tables growing but storage costs within initial budget

Operational Metrics
Primary Database Size
50 GB
warn 300crit 1,000
Monthly Storage Cost
38 USD
warn 200crit 600
Total Backup Storage
175 GB
warn 1,000crit 4,000
Symptoms
  • ·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
Topology Effects
  • ·Read replicas synchronized with primary: storage cost is 3× primary
  • ·Backup chain growing daily but within expected norms
Operational Consequences
  • !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

nominal·Nominal: Year One: Costs Visible but Acceptable

System in first year of operation; tables growing but storage costs within initial budget

Total Storage
500GB
warn: 1,000crit: 2,500
Monthly Storage Cost
40$/month
warn: 80crit: 160
Storage Growth Factor
1×
warn: 2crit: 4
Monthly Growth Rate
15%
warn: 10crit: 25
degraded·Degraded: Year Two: Compounding Becomes Visible

Primary database reaches 200GB; monthly storage bill begins to surface in cost reviews

Total Storage
760.44GB
warn: 1,000crit: 2,500
Monthly Storage Cost
60.83$/month
warn: 80crit: 160
Storage Growth Factor
1.52×
warn: 2crit: 4
Monthly Growth Rate
15%
warn: 10crit: 25
warning·Warning: Year Three: Storage Cost Exceeds Engineering Budget Line

Primary database at 500GB; monthly storage bill at $350-400/month; engineering leadership notified

Total Storage
1,156.53GB
warn: 1,000crit: 2,500
Monthly Storage Cost
92.52$/month
warn: 80crit: 160
Storage Growth Factor
2.31×
warn: 2crit: 4
Monthly Growth Rate
15%
warn: 10crit: 25
critical·Critical: Year Four: Storage Cost Approaching $1,000/Month

Primary exceeds 1TB; monthly bill approaching $1,000/month; budget escalation to VP level

Total Storage
2,675.13GB
warn: 1,000crit: 2,500
Monthly Storage Cost
214.01$/month
warn: 80crit: 160
Storage Growth Factor
5.35×
warn: 2crit: 4
Monthly Growth Rate
15%
warn: 10crit: 25
recovery·Recovery: Retention Policy and Archiving Implemented

90-day retention DELETE completed; archiving to S3 Glacier operational; monthly cost declining

Total Storage
1,758.94GB
warn: 1,000crit: 2,500
Monthly Storage Cost
140.72$/month
warn: 80crit: 160
Storage Growth Factor
3.52×
warn: 2crit: 4
Monthly Growth Rate
15%
warn: 10crit: 25

Threshold Events

Storage Cost Exceeds 2× Baselinewarning

Monthly storage cost at $93 vs $40 baseline. Storage: 1,157 GB at $0.08/GB/month.

threshold: 80actual: 92.52
Storage Cost Exceeds 2× Baselinecritical

Monthly storage cost at $214 vs $40 baseline. Storage: 2,675 GB at $0.08/GB/month.

threshold: 80actual: 214.01

Interpretation

critical

At 15%/month growth, storage reaches 5.3× initial size at peak. Monthly cost: $214 (baseline: $40).

Bottleneck

Unbounded data growth without retention policy: storage cost compounds month-over-month

Recommendation

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

Linearmoderate amplification
Unbounded Table GrowthPrimary Storage Cost, Replica Storage Cost, Backup Storage Cost

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

Linearmoderate amplification
Backup Storage GrowthMonthly AWS Bill

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

Cascade
Log Retention Without PolicyCloudWatch Log Storage, Datadog Ingestion Cost

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
Tradeoffs
  • ·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
Residual Risks
  • !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
Tradeoffs
  • ·Partition migration requires application schema changes
  • ·Old data must be migrated to partition-compatible table structure
Residual Risks
  • !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.