

# Amazon RDS 的配额和限制
<a name="CHAP_Limits"></a>

接下来，您可以查找 Amazon RDS 的资源配额和命名约束的说明。

**Topics**
+ [Amazon RDS 中的配额](#RDS_Limits.Limits)
+ [Amazon RDS 中的命名约束](#RDS_Limits.Constraints)
+ [最大数据库连接数](#RDS_Limits.MaxConnections)
+ [Amazon RDS 中的文件大小限制](#RDS_Limits.FileSize)

## Amazon RDS 中的配额
<a name="RDS_Limits.Limits"></a>

每个AWS区域的每个AWS账户都有关于可以创建的 Amazon RDS 资源数量的配额。达到某一资源的配额时，再进行创建该资源的调用就会失败并引发异常。

下表列出了每个 AWS 区域的资源及其配额。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/CHAP_Limits.html)

**注意**  
默认情况下，您最多可以有 40 个数据库实例。RDS 数据库实例、Aurora 数据库实例、Amazon Neptune 实例和 Amazon DocumentDB 实例适用于此配额。  
以下限制适用于 Amazon RDS 数据库实例：  
每个 SQL Server 版本（Enterprise、Standard、Web 和 Express）具有 10 个处于“附带许可”模式的实例
Oracle 具有 10 个处于“附带许可”模式的实例
Db2 具有 40 个处于“自带许可”（BYOL）许可模式的实例
MySQL、MariaDB 或 PostgreSQL 具有 40 个实例
Oracle 具有 40 个处于“自带许可”(BYOL) 许可模式的实例
如果您的应用程序需要更多数据库实例，则可以通过打开 [Service Quotas 控制台](https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/dashboard)请求其他数据库实例。在导航窗格中，选择 **AWS 服务**。选择 **Amazon Relational Database Service (Amazon RDS) (Amazon 关系数据库服务 (Amazon RDS))**，选择配额，然后按照说明请求增加配额。有关更多信息，请参阅《Service Quotas 用户指南》**中的[请求增加配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-increase.html)。  
对于 RDS for Oracle，在每个区域中，您可以为每个源数据库实例创建最多 15 个只读副本，但我们建议将副本数量限制为 5 个，以尽可能减少复制延迟。  
由 AWS Backup 管理的备份被视为手动数据库快照，但不计入手动快照限额。有关 AWS Backup 的更多信息，请参阅《[AWS Backup 开发人员指南](https://docs.aws.amazon.com/aws-backup/latest/devguide)》**。

请注意，一个 AWS 账户的跨区域自动备份的默认配额为 20，对于一个 AWS 账户，每个区域的并发快照复制请求数量的默认配额为 20。

如果您使用任何 RDS API 操作并超过每秒调用数的默认限额，Amazon RDS API 会发出如下所示的错误。

ClientError: An error occurred (ThrottlingException) when calling the *API\$1name* operation: Rate exceeded.

此处，请减少每秒调用数。配额旨在涵盖大多数使用案例。如果需要更高的配额，可以使用以下任一选项请求增加配额：
+ 在控制台中，打开[服务配额控制台](https://us-east-1.console.aws.amazon.com/servicequotas/home/)。
+ 从 AWS CLI 中，使用 [request-service-quota-increase](https://docs.aws.amazon.com/cli/latest/reference/service-quotas/request-service-quota-increase.html) AWS CLI 命令。

有关更多信息，请参阅《[Service Quotas 用户指南](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)》**。

## Amazon RDS 中的命名约束
<a name="RDS_Limits.Constraints"></a>

Amazon RDS 中的命名约束如下所示：
+ 数据库实例标识符：
  + 必须包含 1–63 个字母数字字符或连字符。
  + 第一个字符必须是字母。
  + 不能以连字符结尾，也不能包含两个连续连字符。
  + 对于每个 AWS 区域的每个 AWS 账户的所有数据库实例必须是唯一的。
+ 初始数据库名称：
  + 数据库名称约束因数据库引擎而异。有关更多信息，请参阅创建每个数据库实例时的可用设置。
  + SQL Server – 在创建数据库实例后创建数据库。
+ 主用户名 – 主用户名约束因每个数据库引擎而异。有关更多信息，请参阅创建数据库实例时的可用设置。
+ 主密码：
  + 数据库主用户的密码可以包括除 `/`、`'`、`"`、`@` 或空格之外的任意可打印 ASCII 字符。

    对于 Oracle，`&` 是额外的字符限制。
  + 密码可能包含以下数量的可打印 ASCII 字符，具体取决于数据库引擎：
    + Db2：8–255
    + MariaDB 和 MySQL：8–41
    + Oracle：8–30
    + SQL Server 和 PostgreSQL：8–128
+ 数据库参数组：
  + 必须包含 1–255 个字母数字字符。
  + 第一个字符必须是字母。
  + 允许使用连字符，但名称不能以连字符结束或包含两个连续的连字符。
+ 数据库子网组：
  + 必须包含 1–255 个字符。
  + 允许使用字母数字字符、空格、连字符、下划线和句点。

## 最大数据库连接数
<a name="RDS_Limits.MaxConnections"></a>

数据库的同时最大连接数量因数据库引擎类型和数据库实例类的内存分配情况而异。最大连接数通常在与数据库实例关联的参数组中设置。例外情况是 Microsoft SQL Server，此时，此参数是在 SQL Server Management Studio（SSMS）中数据库实例的服务器属性中设置的。

数据库连接占用内存。将其中一个参数设置得太高可能会导致内存不足的情况，从而可能会导致数据库实例处于 **incompatible-parameters** 状态。有关更多信息，请参阅 [诊断并解决内存限制的不兼容参数状态](CHAP_Troubleshooting.md#CHAP_Troubleshooting.incompatible-parameters-memory)。

如果您的应用程序经常打开和关闭连接，或使大量长期连接保持打开，建议您使用 Amazon RDS 代理。RDS 代理是一种完全托管的高可用性数据库代理，它使用连接池安全有效地共享数据库连接。要了解有关 RDS 代理的更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。

**注意**  
对于 Oracle，您可以设置用户进程以及用户和系统会话的最大数量。  
对于 Db2，您无法设置最大连接数。限制为 64000。

下表显示了有关不同数据库引擎的最大数据库连接数的信息。


| 数据库引擎 | 参数 | 允许的值 | 默认值 | 说明 | 
| --- | --- | --- | --- | --- | 
| MariaDB | max\$1connections | 1–100000 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/CHAP_Limits.html)  | 允许的客户端同时连接数 | 
| MySQL | max\$1connections | 1–100000 |  \$1DBInstanceClassMemory/12582880\$1 该公式实际上等同于 MB/12。  | 允许的客户端同时连接数 | 
| Oracle | processes | 80–20000 | LEAST(\$1DBInstanceClassMemory/9868951\$1, 20000) | 用户进程 | 
| Oracle | sessions | 100–65535 | 不适用 | 用户和系统会话 | 
| PostgreSQL | max\$1connections | 6–262143 | LEAST(\$1DBInstanceClassMemory/9531392\$1, 5000) | 最大并发连接数 | 
| SQL Server | user connections | 0–32767 | 0（无限制） | 最大并发连接数。有关更多信息，请参阅[配置 user connections（服务器配置选项）](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-user-connections-server-configuration-option?view=sql-server-ver16)。 | 

`DBInstanceClassMemory` 以字节为单位。有关如何计算此值的详细信息，请参阅 [指定数据库参数](USER_ParamValuesRef.md)。由于为操作系统和 RDS 管理进程预留了内存，因此，此内存大小小于[数据库实例类的硬件规格](Concepts.DBInstanceClass.Summary.md)中所示的值（以 GiB 为单位）。

例如，某些数据库实例类有 8GiB 的内存，即 8,589,934,592 字节。对于在内存为 8GiB 的数据库实例类（例如 db.m7g.large）上运行的 MySQL 数据库实例，使用总内存的公式为 `8589934592/12582880=683`。但是，变量 `DBInstanceClassMemory` 会自动减去为操作系统和管理数据库实例的 RDS 进程保留的内存量。然后，将减法的余数除以 12,582,880。此计算的结果是：`max_connections` 的值约为 630，而不是 683。此值取决于数据库实例类和数据库引擎。

当 MariaDB 或 MySQL 数据库实例在小型数据库实例类（例如 db.t3.micro 或 db.t3.small）上运行时，可用内存总量会很低。对于这些数据库实例类，RDS 会预留很大一部分可用内存，这会影响值 `max_connections`。例如，对于在 db.t3.micro 数据库实例类上运行的 MySQL 数据库实例，默认的最大连接数约为 60。您可以通过连接数据库 MariaDB 或 MySQL 数据库实例并运行以下 SQL 命令来确定相应实例的 `max_connections` 值：

```
SHOW GLOBAL VARIABLES LIKE 'max_connections';
```

## Amazon RDS 中的文件大小限制
<a name="RDS_Limits.FileSize"></a>

文件大小限制适用于某些 Amazon RDS 数据库实例。有关更多信息，请参阅以下特定于引擎的限制：
+ [Amazon RDS 中的 MariaDB 文件大小限制](CHAP_MariaDB.Limitations.md#RDS_Limits.FileSize.MariaDB)
+ [Amazon RDS 中的 MySQL 文件大小限制](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.Limits.FileSize)
+ [Amazon RDS 中的 Oracle 文件大小限制](Oracle.Concepts.limitations.md#Oracle.Concepts.file-size-limits)