

# RDS for MariaDB 的已知问题和限制
<a name="CHAP_MariaDB.Limitations"></a>

以下各项是使用 RDS for MariaDB 时的已知问题和限制。

**注意**  
此列表并不详尽。

**Topics**
+ [Amazon RDS 中的 MariaDB 文件大小限制](#RDS_Limits.FileSize.MariaDB)
+ [InnoDB 保留字](#MariaDB.Concepts.InnodbDatabaseName)
+ [自定义端口](#MariaDB.Concepts.CustomPorts)
+ [性能详情](#MariaDB.Concepts.PerformanceInsights)

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

对于 MariaDB 数据库实例，在使用 InnoDB file-per-table 表空间时，表的最大大小为 16 TB。此限制也将系统表空间的最大大小约束为 16 TB。默认情况下，为 MariaDB 数据库实例设置 InnoDB file-per-table 表空间（每个表位于各自的表空间中）。此限制与 MariaDB 数据库实例的最大存储限制无关。有关存储限制的更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。

根据您的应用程序，使用 InnoDB file-per-table 表空间有一些优缺点。要确定适用于您的应用程序的最佳方法，请参阅 MySQL 文档中的 [File-Per-Table 表空间](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-per-table-tablespaces.html)。

建议不要允许表增长到最大文件大小。一般而言，更好的方法是将数据分区到较小的表中，这可以提高性能并缩短恢复时间。

可用于将大型表划分为多个较小表的一个选项是分区。*分区* 可基于您指定的规则将大型表的各个部分分布到单独的文件中。例如，如果您按日期存储事务，则可以创建分区规则，以便使用分区将较旧的事务分布到单独的文件中。随后您可以定期存档无需随时可供应用程序使用的历史事务数据。有关更多信息，请参阅 MySQL 文档中的[分区](https://dev.mysql.com/doc/refman/5.7/en/partitioning.html)。

**确定所有 InnoDB 表空间的大小**
+ 使用以下 SQL 命令可确定任何表是否太大以及是否适合进行分区。
**注意**  
对于 MariaDB 10.6 及更高版本，此查询还返回 InnoDB 系统表空间的大小。  
对于 10.6 之前的 MariaDB 版本，您无法通过查询系统表来确定 InnoDB 系统表空间的大小。我们强烈建议您升级到更高的版本。

  ```
  1. SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) 
  2. as "Tablespace Size (GB)"  
  3. FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
  ```

**确定非 InnoDB 用户表的大小**
+ 使用以下 SQL 命令来确定是否有任何非 InnoDB 用户表过大。

  ```
  SELECT TABLE_SCHEMA, TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH+DATA_FREE)
  / 1024 / 1024/ 1024), 2) As "Approximate size (GB)" FROM information_schema.TABLES
  WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema')
  and ENGINE<>'InnoDB';
  ```

**启用 InnoDB file-per-table 表空间**
+ 在数据库实例的参数组中将 `innodb_file_per_table` 参数设置为 `1`。

**禁用 InnoDB file-per-table 表空间**
+ 在数据库实例的参数组中将 `innodb_file_per_table` 参数设置为 `0`。

有关更新参数组的信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

当您启用或禁用 InnoDB file-per-table 表空间后，可以发出 `ALTER TABLE` 命令。您可以使用此命令将表从全局表空间移动到其自己的表空间。或者，您可以将表从其自己的表空间移动到全局表空间。以下为示例。

```
1. ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=COPY; 
```

## InnoDB 保留字
<a name="MariaDB.Concepts.InnodbDatabaseName"></a>

`InnoDB` 是 RDS for MariaDB 的保留字。您不能将此名称用于 MariaDB 数据库。

## 自定义端口
<a name="MariaDB.Concepts.CustomPorts"></a>

Amazon RDS 禁止连接到 MariaDB 引擎的自定义端口 33060。为您的 MariaDB 引擎选择不同的端口。

## 性能详情
<a name="MariaDB.Concepts.PerformanceInsights"></a>

InnoDB 计数器在 RDS for MariaDB 版本 10.11 的性能详情中不可见，因为 MariaDB 社区不再支持它们。