Skip to main content
  1. Home
  2. >
  3. AWS
  4. >
  5. SAA-C03
  6. >
  7. This article

AWS SAA-C03 Drill: RDS Storage Performance - The IOPS vs. Compute Trade-off Analysis

Jeff Taakey
Author
Jeff Taakey
21+ Year Enterprise Architect | Multi-Cloud Architect & Strategist.
Jeff's Architecture Insights
Go beyond static exam dumps. Jeff’s Insights is engineered to cultivate the mindset of a Production-Ready Architect. We move past ‘correct answers’ to dissect the strategic trade-offs and multi-cloud patterns required to balance reliability, security, and TCO in mission-critical environments.

While preparing for the AWS SAA-C03, many candidates get confused by RDS performance optimization. In the real world, this is fundamentally a decision about Storage I/O vs. Compute Resources vs. Architectural Complexity. Let’s drill into a simulated scenario.

The Scenario
#

GlobalRetail Analytics operates an e-commerce platform with a searchable product catalog serving millions of daily customers. Their product inventory database runs on Amazon RDS for MySQL with the following characteristics:

  • Database size: 10+ million rows across multiple tables
  • Storage configuration: 2 TB General Purpose SSD (gp2)
  • Transaction volume: Millions of updates daily through web application
  • Performance issue: Insert operations sporadically exceed 10 seconds
  • Root cause identified: Database storage performance bottleneck (confirmed via CloudWatch metrics showing IOPS saturation)

Key Requirements
#

Resolve the write latency issue while maintaining data consistency and minimizing operational complexity.

The Options
#

  • A) Migrate the storage type from General Purpose SSD (gp2) to Provisioned IOPS SSD (io1/io2).
  • B) Change the database instance to a memory-optimized instance class (e.g., db.r6g family).
  • C) Switch the database instance to a burstable performance instance class (e.g., db.t3 family).
  • D) Enable Multi-AZ RDS with MySQL native asynchronous replication for read replicas.

Correct Answer
#

Option A.


The Architect’s Analysis
#

Correct Answer
#

Option A - Migrate to Provisioned IOPS SSD (io1/io2).

Step-by-Step Winning Logic
#

This solution represents the optimal trade-off because:

  1. Direct Problem-Solution Alignment: The scenario explicitly states the bottleneck is storage performance, not compute capacity. Provisioned IOPS SSD provides:

    • Guaranteed baseline IOPS (up to 64,000 IOPS for io2)
    • Consistent low-latency performance (<1ms)
    • Independence from storage volume size
  2. Minimal Operational Complexity: RDS allows in-place storage type modification with minimal downtime (typically during maintenance window).

  3. Scalability: IOPS can be independently adjusted without changing instance size, enabling precise performance tuning.

  4. Cost Efficiency for the Problem: While more expensive than gp2, it’s cheaper than over-provisioning compute resources that won’t address the root cause.

The Traps (Distractor Analysis)
#

  • Why not Option B (Memory-Optimized Instance)?

    • Memory optimization improves query caching and in-memory operations, not disk write throughput.
    • The scenario already identified the bottleneck as storage I/O, not RAM or CPU.
    • This would increase costs (~30-50% more expensive) without solving the write latency issue.
    • Exam Trap: Confuses symptoms (database operations slowing down) with root cause (storage IOPS exhaustion).
  • Why not Option C (Burstable Performance Instance)?

    • db.t3 instances use CPU credits and have lower baseline performance than standard instances.
    • This would worsen performance under sustained high-transaction loads.
    • Burstable instances are designed for intermittent workloads, not millions of daily updates.
    • Exam Trap: “Burstable” sounds like it might help with spikes, but it actually reduces sustained performance capacity.
  • Why not Option D (Multi-AZ with Read Replicas)?

    • Multi-AZ provides high availability, not write performance improvement.
    • Read replicas help with read scalability, but the problem is write/insert latency.
    • Asynchronous replication adds architectural complexity without addressing storage bottleneck.
    • All writes still go to the primary instance with the same storage constraints.
    • Exam Trap: Candidates confuse “database performance” with “read performance” – replicas don’t accelerate writes.

The Architect Blueprint
#

graph TD A[Web Application] -->|Millions of Daily Inserts| B[RDS MySQL Primary] B -->|Storage I/O Request| C{Storage Type} C -->|BEFORE: gp2| D[General Purpose SSD<br/>3 IOPS/GB = 6,000 IOPS<br/>❌ IOPS Exhausted] C -->|AFTER: io2| E[Provisioned IOPS SSD<br/>20,000 IOPS Provisioned<br/>✅ <1ms Latency] D -->|10+ Second Writes| F[Performance Bottleneck] E -->|Consistent Fast Writes| G[Problem Resolved]

Diagram Note: The solution isolates the storage layer upgrade, transforming variable gp2 performance (3 IOPS/GB baseline) into guaranteed Provisioned IOPS throughput without modifying application or instance architecture.

Real-World Practitioner Insight
#

Exam Rule
#

For the SAA-C03 exam, when you see:

  • Confirmed storage performance bottleneck (CloudWatch IOPS metrics, VolumeReadOps/WriteOps saturation)
  • Sustained high-transaction workloads (not bursty)
  • Write-heavy operations (inserts, updates)

Always choose Provisioned IOPS SSD (io1/io2) over compute upgrades or replication strategies.

Real World
#

In production environments, we would typically:

  1. Start with CloudWatch Deep Dive:

    • Analyze ReadLatency, WriteLatency, ReadIOPS, WriteIOPS
    • Check DiskQueueDepth (high values confirm storage bottleneck)
    • Review CPUUtilization and FreeableMemory to rule out compute constraints
  2. Consider Hybrid Optimizations:

    • Short-term: Increase IOPS provisioning on io2 (can be done online)
    • Mid-term: Implement write batching at application layer to reduce transaction count
    • Long-term: Evaluate Aurora MySQL (auto-scaling storage, superior I/O architecture)
    • Alternative: Partition large tables by date/category to reduce per-table contention
  3. FinOps Calibration:

    • Start with io2 at 10,000 IOPS and monitor for 2 weeks
    • Use CloudWatch alarms to trigger auto-scaling IOPS adjustments (requires scripting)
    • Compare costs: io2 IOPS pricing vs. Aurora’s pay-per-request I/O model
    • For 2TB + 20,000 IOPS: io2 ≈ $1,800/month vs. Aurora ≈ $2,200/month (but Aurora offers better scalability)
  4. Factors Not in Exam Scenarios:

    • Maintenance windows: Storage modifications require brief I/O suspension
    • Backup impact: Provisioned IOPS maintains performance during automated backups (unlike gp2)
    • Compliance: Some regulations require predictable performance SLAs (io2 provides this, gp2 doesn’t)

The Unspoken Reality: If this were a 50TB database with sustained 100K IOPS requirements, we’d skip RDS entirely and architect with Aurora, DynamoDB, or even Amazon Keyspaces depending on access patterns. The exam tests decision frameworks, not real-world complexity.

Weekly AWS SAA-C03 Drills: Think Like a CTO

Get 3-5 high-frequency scenarios every week. No brain-dumping, just pure architectural trade-offs.