Pair your devices with a code and playback position follows you: pause on this device, hit resume on the other. Position is saved to the site every minute and on pause.
Open this panel on your other device and enter the same code.
Starts this lesson and continues through 4 more to the end of certification prep.
Task statement 4.3 is "Design cost-optimized database solutions". The skills, verbatim:
And knowledge items including "Caching strategies", "Data retention policies", "Database capacity planning (for example, capacity units)", and "Database connections and proxies".
The distinguishing question is: is the load steady or spiky — and do you pay for capacity or for requests?
steady, predictable → provisioned capacity + a commitment (reserved DB instances / Database SP)
spiky, unpredictable, idle → on-demand / serverless (DynamoDB on-demand, Aurora Serverless)
read-heavy, repeated reads → a cache in front, so the database can be smaller
analytic scans → a columnar store, not a bigger OLTP instance
From Using Aurora serverless and How Aurora serverless works, fetched 2026-09-25:
"Aurora serverless is an on-demand, autoscaling configuration for Amazon Aurora. … You're charged only for the resources that your DB clusters consume."
"This type of automation is especially valuable for multitenant databases, distributed databases, development and test systems, and other environments with highly variable and unpredictable workloads."
And AWS's contrast, which is exactly the exam discriminator:
"Aurora provisioned clusters are suitable for steady workloads. … The provisioned model works well when you can adjust capacity in advance of expected consumption patterns."
| Fact | Verbatim |
|---|---|
| Unit | "Aurora capacity unit (ACU)" — "approximately 2 gibibytes (GiB) of memory, corresponding CPU, and networking" |
| Range | "from 0 ACUs to 256 ACUs" (engine/platform-version dependent) |
| Scale to zero | "With the minimum capacity of 0 ACUs, the cluster will scale to 0 when there is no workload running" — auto-pause, on supported versions |
| Granularity | "increments as small as 0.5 ACUs" |
| Billing | "measured in terms of ACU-hours"; usage "measured on a per-second basis" |
| Storage | separate from compute: "your cluster can contain many terabytes of data even when the CPU and memory capacity scale down" |
⚠️ Scale-to-zero is version-dependent. AWS's table shows the 0–256 range only on Aurora MySQL 3.08.0+ and specific Aurora PostgreSQL minor versions; older versions bottom out at 0.5 ACU. "Serverless" alone doesn't mean "free when idle".
⚠️ Mixed clusters are allowed — "any combination of Aurora serverless capacity, provisioned capacity, or both". A steady writer on provisioned with serverless readers for spiky reporting is a legitimate cost design.
Dev/test tip from AWS: use serverless "with a low minimum capacity instead of using burstable db.t* DB instance classes", and for long idle periods, "stop and start the entire cluster".
From DynamoDB throughput capacity, fetched 2026-09-25:
| On-demand | Provisioned | |
|---|---|---|
| Model | "pay-per-request pricing for read and write requests so that you only pay for what you use" | "charged based on the hourly read and write capacity you have provisioned, not how much of that provisioned capacity you actually consumed" |
| Planning | "without worrying about capacity planning" | "you must specify the number of reads and writes per second" |
| Default? | ⚠️ "On-demand mode is the default and recommended throughput option for most DynamoDB workloads." | — |
| Fit | new / unknown / spiky | "steady workloads with predictable growth, and if you can reliably forecast capacity requirements" |
⚠️ Older study material says provisioned is the default. The current page says on-demand is. Answer from the stem's workload shape, not from which is "default".
The knowledge item "Database capacity planning (for example, capacity units)". From DynamoDB provisioned capacity mode:
Worked: 80 strongly consistent reads/s of 3 KB items = 80 RCU. Switch to eventually consistent and it's 40 RCU — half the read cost for the same traffic, if the application tolerates it.
Auto scaling (provisioned) uses Application Auto Scaling with a target utilisation; AWS "recommend[s] setting target utilization to 70%". It's enabled by default when you create a table in the console.
Switching: "You can switch tables from provisioned capacity mode to on-demand mode up to four times in a 24-hour rolling window. You can switch tables from on-demand mode to provisioned capacity mode at any time."
From DynamoDB table classes: Standard is the default; Standard-Infrequent Access "is optimized for tables where storage is the dominant cost" — AWS's examples are "application logs, old social media posts, e-commerce order history, and past gaming achievements". "The choice of a table class is not permanent."
Reserved DB instances, from Reserved DB instances for Amazon RDS, fetched 2026-09-25:
Database Savings Plans (lesson 3): up to 35%, applying "regardless of engine, instance family, size, Availability Zone (AZ), or Region, and also apply to serverless usage" — including a move "from RDS to DynamoDB while maintaining your discounted rates".
The skill is "Determining an appropriate database engine (for example, MySQL compared with PostgreSQL)".
⚠️ I did not fetch a page that compares MySQL and PostgreSQL on cost, and I won't invent one. What the fetched pages do show is that licence-included commercial engines behave differently for cost: reserved-instance size flexibility doesn't apply to SQL Server or Oracle License Included, and reserved instances must match "License type (license-included or bring-your-own-license)". So on the exam, "reduce licensing cost" points toward an open-source engine (MySQL, PostgreSQL, or Aurora's compatible editions), and DMS below is how you get there. Between MySQL and PostgreSQL themselves, the choice is compatibility and features, not a price difference I can source.
From What is AWS Database Migration Service?, fetched 2026-09-25:
"To migrate to a different database engine, you can use DMS Schema Conversion. This service automatically assesses and converts your source schemas to a new target engine. Alternatively, you can download the AWS Schema Conversion Tool (AWS SCT)."
"You can perform one-time migrations or replicate ongoing changes to keep sources and targets in sync."
| Migration | What you need |
|---|---|
| Homogeneous (same engine, e.g. MySQL → RDS for MySQL) | DMS for the data — "if you want to migrate away from old infrastructure but continue to use the same database engine, AWS DMS also supports that process" |
| Heterogeneous (e.g. Oracle → Aurora PostgreSQL) | DMS Schema Conversion or AWS SCT for schema and code, then DMS for data |
AWS names the cost motive directly: DMS "can help you switch to a modern, perhaps more cost-effective, database engine".
From Backup retention period and Introduction to backups, fetched 2026-09-25:
| Fact | Verbatim |
|---|---|
| Range | "between 0 and 35 days" (DB instance); "between 1 and 35 days" for a Multi-AZ DB cluster |
| Disable | "Setting the backup retention period to 0 disables automated backups." |
| Defaults | API/CLI: "one day"; console: "seven days" |
| ⚠️ Outage | "An outage occurs if you change the backup retention period of a DB instance from 0 to a nonzero value or from a nonzero value to 0." |
| Incremental | "Subsequent snapshots of the same database are incremental" |
| Manual snapshots | "Manual snapshots are not deleted when an instance is deleted. You can have up to 100 manual snapshots per Region." |
⚠️ Retention beyond 35 days is not an automated-backup setting. If the stem says "keep monthly backups for seven years", automated backups can't do it — use manual snapshots or AWS Backup with cold storage (lesson 2).
⚠️ AWS's own RDS reserved-instance example shows backup storage "(400 GiB free)" for a 400 GiB
database, but calls its prices "sample prices". I did not fetch RDS pricing, so I make no general claim
about free backup allowance — read aws.amazon.com/rds/pricing/.
Snapshot frequency is the RPO lever from SAA2 lesson 6: more frequent backups → lower RPO → more
storage. The cost design is to keep frequent backups for a short window and move only the long-term ones
to cheaper storage.
The knowledge item is "Caching strategies". From Caching strategies, fetched 2026-09-25:
| Strategy | How | Advantage | Disadvantage |
|---|---|---|---|
| Lazy loading | read cache; on miss, read DB and write cache | "Only requested data is cached." · "Node failures aren't fatal" | "cache miss penalty" (three trips) · "Stale data" |
| Write-through | write cache every time you write DB | "Data in the cache is never stale." | "Missing data" on new nodes · "Cache churn. Most data is never read" |
| Adding TTL | expire keys after N seconds | combines both; keeps data from getting "too stale" | "doesn't guarantee that a value isn't stale" |
AWS's summary: "Lazy loading allows for stale data but doesn't fail with empty nodes. Write-through ensures that data is always fresh, but can fail with empty nodes and can populate the cache with superfluous data. By adding a time to live (TTL) value to each write, you can have the advantages of each strategy."
The cost argument: a cache absorbs repeated reads, so the database behind it can be smaller, or need
fewer read replicas. Read replicas and connection proxies are covered in SAA2 lesson 5 (RDS Proxy) and
SAA3 lesson 3 (replicas for performance).
The skill "Determining cost-effective AWS database types (for example, time series format, columnar format)".
Columnar, from Redshift columnar storage:
"Columnar storage for database tables is an important factor in optimizing analytic query performance, because it drastically reduces the overall disk I/O requirements."
AWS's example: "suppose a table contains 100 columns. A query that uses five columns will only need to read about five percent of the data." And "row-wise storage is optimal for OLTP databases."
Time series, from What is Amazon Timestream for LiveAnalytics?:
"Timestream for LiveAnalytics saves you time and cost in managing the lifecycle of time series data by keeping recent data in memory and moving historical data to a cost optimized storage tier based upon user defined policies."
It is "serverless and automatically scales up or down".
The cost rule: don't scale up an OLTP instance to run analytics or store sensor streams. Put the workload in the store shaped for it.
| The stem says | Answer |
|---|---|
| "unpredictable, spiky relational workload; dev/test idle overnight" | Aurora Serverless |
| "steady relational workload, 3 years" | provisioned + reserved DB instances (or Database Savings Plan) |
| "new DynamoDB table, traffic unknown" | on-demand |
| "steady DynamoDB traffic, forecastable" | provisioned + auto scaling |
| "DynamoDB table of old order history; storage is most of the bill" | Standard-IA table class |
| "halve read cost, stale reads acceptable" | eventually consistent reads |
| "Oracle licence costs; move to open source" | SCT / DMS Schema Conversion + DMS → Aurora PostgreSQL |
| "keep database backups 7 years" | AWS Backup or manual snapshots — not automated backups (max 35 days) |
| "repeated reads overwhelming the DB, stale-tolerant" | ElastiCache, lazy loading + TTL |
| "analytic queries scan few columns of wide tables" | columnar (Redshift) |
| "IoT sensor readings, recent hot, history cold" | Timestream |