> For the complete documentation index, see [llms.txt](https://docs.north.cloud/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.north.cloud/docs/features/rightsize/rds.md).

# RDS

Learn how Rightsize reviews RDS databases.

Rightsize reviews each Amazon RDS DB instance on your AWS accounts, including the instances in an Aurora cluster. Each RDS finding is a review where it suggests a class for you to evaluate. Confirm each suggestion before you act on it.

## How Rightsize Reviews a Database

Rightsize reads these CloudWatch metrics for each database over the lookback window: CPU utilization, freeable memory, swap usage, database connections, read and write IOPS (input/output operations per second), and read and write throughput.

The checks below use settings that you can change in [RDS Settings](/docs/features/rightsize/rds.md#rds-settings), below. The values given here are the Balanced defaults.

A database needs samples on at least the number of days set in **Minimum observed days**, which is 14 by default, with at least 90% hourly coverage. Rightsize then applies these checks in order, and the first one that matches is what Rightsize anchors on for that instance:

* **Review a larger class** - daily average CPU exceeds **CPU threshold for a larger class**, which is 90% by default, on at least 25% of observed days, and on at least two days. Rightsize suggests the next class in the same family with more memory, for the same engine, deployment, and license. The finding state is **Under provisioned**.
* **Reservation locks this size** - on SQL Server, and on Oracle with a license-included model, a Reserved Instance matches the exact class size. When one covers the database, or when a commitment covers it and Rightsize cannot identify that commitment, Rightsize does not review another class. The finding state is **Not analyzed**.
* **Review possible memory pressure** - the database was low on available memory and was using swap in the same hours. Rightsize does not suggest a class for this review, and the finding state is Not optimized. Rightsize flags possible memory pressure when all of these are true:
  * In an hour, available memory fell below **Memory pressure: available memory floor** while swap in use rose above **Memory pressure: swap ceiling**. By default, these are 5% and 10% of the instance's total memory.
  * This happened in at least half of a day's measured hours. Only days with at least 20 hours of both memory and swap samples count.
  * Such days make up at least 25% of measured days, and there are at least two of them.
  * The measured days number at least Minimum observed days, and neither the memory history nor the swap history is sparse.
* **Review a smaller class** - a smaller class passes the CPU, memory, and connection checks below. Rightsize considers classes in the same family with less memory and no more vCPUs, and suggests the one with the most memory that passes. The finding state is **Over provisioned**.
* **No change recommended** - none of the reviews above apply. The finding state is **Optimized**.

A smaller class must pass three checks:

* **CPU** - the highest observed CPU utilization, scaled to the smaller class's vCPU count, stays at or below **CPU limit for a smaller class**, which is 70% by default. For databases, Rightsize uses the highest observed value, so one busy hour counts.
* **Memory** - the smaller class holds the highest estimated memory use plus **Memory headroom**, which is 25% by default. Estimated memory use is the allocated memory minus the lowest freeable memory. Rightsize runs this check only when the memory history is not sparse.
* **Connections** - for PostgreSQL, Aurora PostgreSQL, and MySQL, the engine's default connection limit on the smaller class is at least the highest observed connection count. Rightsize skips this check when the connection history is sparse.

## What the Review Panel Shows

Click a row's **AI Suggestion** button to open the database's review panel. The button appears on every reviewed database, including **Optimized** ones, so you can see the evidence behind each result.

The panel has up to three sections. **Findings** appears only when the review has reasons.

* **Current State** - the database's instance class, engine, deployment, and license, then the evidence behind the review. The evidence covers observed days and hour coverage, CPU peak, and allocated and estimated memory use. It also covers memory pressure, heavy swap use, maximum connections, and maximum read and write IOPS and throughput. When Rightsize suggests a class and knows the engine's default connection limit, the section also shows the assumed default connection limit on that class.
* **Noros Recommendation** - the **Review** field shows the suggested class, for example "Review a smaller class: db.r8g.xlarge". When a class is suggested, the card also shows **Review Target Memory**, the memory of that class. The card ends with the modeled reduction, described below.
* **Findings** - the reasons behind the review, as chips.

Below the sections, a chart shows the database's utilization history. Choose CPU, Database connections, Read iops, Write iops, Read throughput, or Write throughput to change the metric.

## Modeled Reduction

The modeled reduction is the monthly price difference between the current class and the suggested class. The card shows it as **Modeled reduction:**, then the amount per month, then "a model of the price gap, not a saving". Rightsize calculates it at the rates you pay today:

```
modeled reduction = covered share × (current committed price − target committed price)
                  + (1 − covered share) × (current on-demand price − target on-demand price)
```

The covered share is the part of the database's instance hours that a commitment covered. When a commitment covers part of the database, the card also shows which rates apply. For a Database Savings Plan, the line ends with "(priced under your Database Savings Plan, weighted by coverage)". For a Reserved Instance, it ends with "(committed rates weighted by coverage)".

The card shows "Modeled reduction: not available" when there is no class to price, as in a memory pressure review. It also shows it when a required rate is unknown, or when Rightsize cannot identify the commitment that covers the database.

## RDS Settings

In **Settings**, open **Per-service overrides** and select **RDS**. These settings control how Rightsize reviews databases. An empty field uses the account default.

* **CPU limit for a smaller class** - Rightsize suggests a smaller class only when the projected CPU on that class stays at or below this percentage. The Balanced default is 70%.
* **CPU threshold for a larger class** - Rightsize suggests a larger class when daily average CPU exceeds this percentage on at least 25% of observed days, and on at least two days. The Balanced default is 90%.
* **Memory headroom** - the spare memory kept above the highest memory use seen. A higher value gives a larger, safer class. The Balanced default is 25%, which is separate from the account-wide memory headroom.
* **Minimum observed days** - the minimum number of days of CPU, memory, swap, and connection samples. Rightsize also requires at least 90% hourly coverage. The Balanced default is 14.
* **Memory pressure: available memory floor** and **Memory pressure: swap ceiling** - both are a percentage of the instance's total memory. Rightsize flags possible memory pressure in an hour when available memory falls below the floor and swap in use rises above the ceiling. The defaults are 5% and 10%, and they are the same for every profile.

## RDS Review Reasons

You must confirm each RDS suggestion before you act on it, because a database resize depends on facts that North has no data for. For example:

* **Memory** - a smaller RDS class has less memory. A database uses its spare memory as a cache, so its metrics cannot show how the database runs with less.
* **Configuration** - you know each database's configuration, such as its connection limits, storage setup, and engine version. Rightsize does not read this configuration today.

For each RDS review, Rightsize lists the checks that it could not complete, and facts about the database that affect a class change. Use these reasons to see what to confirm before you change a database's class.

| Reason                                                      | Meaning                                                                                                                                                                                    |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Review only — no change is recommended**                  | The finding is a review. Rightsize suggests a class to evaluate and does not recommend a change.                                                                                           |
| **Memory fit not validated**                                | The suggested class holds the highest observed memory use plus headroom. Metrics alone cannot confirm that the database runs well on that class.                                           |
| **Sparse memory history**                                   | Memory samples cover fewer days than **Minimum observed days**, or less than 90% of hours, so the suggested class was not checked against memory use.                                      |
| **No memory history**                                       | No memory samples were returned, so the suggested class was not checked against memory use.                                                                                                |
| **Assumes the default connection limit**                    | The connection check uses the engine's default connection limit on the suggested class. A custom parameter group can set a different limit.                                                |
| **Connection limit unknown**                                | Rightsize has no default connection limit for this engine, so the suggested class was not checked against connections. This applies to Aurora MySQL, MariaDB, Oracle, SQL Server, and Db2. |
| **No connection history** / **Sparse connection history**   | Connection samples are missing, or cover fewer days than **Minimum observed days** or less than 90% of hours, so the suggested class was not checked against connections.                  |
| **Storage I/O capacity not checked**                        | The suggested class was not checked against the observed storage IOPS and throughput.                                                                                                      |
| **Class availability for this engine version not verified** | The suggested class may not be available for the engine version that the database runs.                                                                                                    |
| **Assumes the default CPU configuration**                   | SQL Server only. Rightsize uses the class's default vCPU count. If you set a different count with Optimize CPU, billing data does not show it.                                             |
| **Reservation keeps applying within the class type**        | A Reserved Instance covers the database. After a move to a smaller class, the reservation applies only within the same class type, region, and engine.                                     |
| **A commitment could not be resolved**                      | A commitment covers part of the database's usage, and Rightsize could not identify it. The modeled reduction is not available.                                                             |
| **CPU sustained near capacity**                             | Daily average CPU exceeded **CPU threshold for a larger class** on at least 25% of observed days, and on at least two days.                                                                |
| **No larger class priced**                                  | CPU is near capacity, and Rightsize found no priced larger class to suggest.                                                                                                               |
| **Possible memory pressure**                                | Low available memory and high swap use occurred in the same hours on at least 25% of measured days, and on at least two days.                                                              |
| **Swap in use over sustained periods**                      | Heavy swap use occurred on at least 25% of measured days, and on at least two days. It does not change the review.                                                                         |

## Databases Without a Review

When Rightsize does not review a database, the **AI Suggestion** column shows a message in place of the button.

| Case                       | Message in the AI Suggestion column                                                      | Meaning                                                                                                                                                         |
| -------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Class not supported        | "This instance's class is not supported for review."                                     | The database is a serverless instance, part of a Multi-AZ DB cluster with readable standbys, or a class with no published specification.                        |
| Deployment not identified  | "This instance's deployment could not be identified from billing."                       | The instance's deployment or engine could not be identified from billing.                                                                                       |
| No instance hours billed   | "No review for this instance."                                                           | Billing shows no instance hours for the database in the period, for example when only storage or backups were billed.                                           |
| Price not found            | "No price was found for this instance's engine, deployment and licence combination."     | No price was found for the instance's engine, deployment, and license combination.                                                                              |
| Reservation locks the size | "A reservation locks this instance to its current size, so no other class was reviewed." | See **Reservation locks this size**, above.                                                                                                                     |
| Not enough history         | "Not enough utilization history was available to review this instance."                  | The database has fewer days of samples than **Minimum observed days**, or less than 90% hourly coverage.                                                        |
| Metrics unavailable        | "No utilization metrics were returned for this instance."                                | No CPU utilization data was returned for the instance.                                                                                                          |
| Monitoring access denied   | "Grant monitoring access to size this resource."                                         | Rightsize does not have the monitoring grant needed to read the database's metrics. See Monitoring Access on the [Rightsize](/docs/features/rightsize.md) page. |

An RDS review does not check storage I/O capacity, custom connection limits, or class availability for your engine version. Confirm these before you change a database's class.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.north.cloud/docs/features/rightsize/rds.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
