

# 使用适用于 MariaDB 的 Amazon RDS 优化型写入功能提高写入性能
使用适用于 MariaDB 的 RDS 优化型写入功能提高写入性能

您可以使用适用于 MariaDB 的 RDS 优化写入功能来提高写入事务的性能。当 RDS for MariaDB 数据库使用 RDS 优化型写入功能时，它最多可以实现高两倍的写入事务吞吐量。

**Topics**
+ [

## RDS 优化写入概述
](#rds-optimized-writes-overview)
+ [

## 使用 RDS 优化写入
](#rds-optimized-writes-using-mariadb)
+ [

## 在现有数据库上启用 RDS 优化写入
](#rds-optimized-writes-modify-enable-mariadb)
+ [

## RDS 优化写入的限制
](#rds-optimized-writes-limitations-mariadb)

## RDS 优化写入概述
概述

当您开启 RDS 优化写入功能时，您的 RDS for MariaDB 数据库在将数据刷新到持久存储时仅写入一次，无需双写缓冲区。数据库继续为可靠的数据库事务提供 ACID 属性保护，同时提高性能。

关系数据库（如 MariaDB）为可靠的数据库事务提供原子性、一致性、隔离性和持久性的 *ACID 属性*。为了帮助提供这些属性，MariaDB 使用一个名为*双写缓冲区*的数据存储区域，以防止出现不完整页面写入错误。这些错误发生在数据库更新页面时出现硬件故障的情况下，例如停电时。MariaDB 数据库可以检测不完整页面写入，并使用双写缓冲区中的页面副本进行恢复。虽然这种技术提供了保护，但也会导致额外的写入操作。有关 MariaDB 双写缓冲区的更多信息，请参阅 MariaDB 文档中的 [InnoDB 双写缓冲区](https://mariadb.com/kb/en/innodb-doublewrite-buffer/)。

开启 RDS 优化型写入功能后，RRDS for MariaDB 数据库将在数据刷新到持久存储时仅写入一次，而不使用双写缓冲区。如果您在 RDS for MariaDB 数据库上运行写入密集型工作负载，RDS 优化型写入功能非常有用。具有写入密集型工作负载的数据库示例包括支持数字支付、金融交易和游戏应用程序的数据库。

这些数据库在使用 Amazon Nitro 系统的数据库实例类上运行。由于这些系统中的硬件配置，数据库可以在一个步骤中可靠而持久地将 16KiB 页直接写入数据文件。Amazon Nitro 系统使 RDS 优化写入成为可能。

您可以设置新的数据库参数 `rds.optimized_writes` 来控制适用于 RDS for MariaDB 数据库的 RDS 优化型写入特征。在以下版本的 RDS for MariaDB 的数据库参数组中访问此参数：
+ 11.8 及更高主要版本的所有可用次要版本
+ 11.4.3 及更高的 11.4 版本
+ 10.11.4 及更高的 10.11 版本
+ 10.6.10 和更高的 10.6 版本

使用以下值设置参数：
+ `AUTO` – 如果数据库支持 RDS 优化写入，则开启此功能。如果数据库不支持 RDS 优化写入，请将其关闭。此设置是默认设置。
+ `OFF` – 关闭 RDS 优化写入，即使数据库支持此功能也不例外。

如果您将配置为使用 RDS 优化型写入特征的 RDS for MariaDB 数据库迁移到不支持该特征的数据库实例类，RDS 会自动对该数据库关闭 RDS 优化型写入特征。

关闭 RDS 优化型写入功能时，数据库使用 MariaDB 双写缓冲区。

要确定 RDS for MariaDB 数据库是否使用 RDS 优化型写入功能，请查看数据库的 `innodb_doublewrite` 参数的当前值。如果数据库使用 RDS 优化写入，则此参数设置为 `FALSE`（`0`）。

## 使用 RDS 优化写入
与新数据库一起使用

使用 RDS 控制台、Amazon CLI 或 RDS API 创建 RDS for MariaDB 数据库时，可以开启 RDS 优化型写入功能。在数据库创建过程中，当以下两个条件都适用时，RDS 优化写入功能会自动开启：
+ 您可以指定支持 RDS 优化写入的数据库引擎版本和数据库实例类。
  + 以下 RDS for MariaDB 版本支持 RDS 优化型写入功能：
    + 11.8 及更高主要版本的所有可用次要版本
    + 11.4.3 及更高的 11.4 版本
    + 10.11.4 及更高的 10.11 版本
    + 10.6.10 和更高的 10.6 版本

    有关 RDS for MariaDB 版本的信息，请参阅 [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)。
  + 使用以下数据库实例类的 RDS for MariaDB 数据库支持 RDS 优化型写入功能：
    + db.m7i
    + db.m7g
    + db.m6g
    + db.m6gd
    + db.m6i
    + db.m5
    + db.m5d
    + db.r7i
    + db.r7g
    + db.r6g
    + db.r6gd
    + db.r6i
    + db.r5
    + db.r5b
    + db.r5d
    + db.x2idn
    + db.x2iedn

    有关数据库实例类的信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。

    数据库实例类可用性因 Amazon Web Services 区域而异。要确定特定 Amazon Web Services 区域中是否支持数据库实例类，请参阅[确定 Amazon Web Services 区域 中的数据库实例类支持](Concepts.DBInstanceClass.RegionSupport.md)。
+ 在与数据库关联的参数组中，`rds.optimized_writes` 参数设置为 `AUTO`。在默认参数组中，此参数始终设置为 `AUTO`。

如果您需要使用支持 RDS 优化型写入特征的数据库引擎版本和数据库实例类，但您不想使用此特征，则在创建数据库时指定一个自定义参数组。在此参数组中，将 `rds.optimized_writes` 参数设置为 `OFF`。如果您希望数据库稍后使用 RDS 优化写入，可以将此参数设置为 `AUTO` 以将其开启。有关创建自定义参数组和设置参数的信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

有关创建数据库实例的信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

### 控制台


当您使用 RDS 控制台创建 RDS for MariaDB 数据库时，您可以筛选支持 RDS 优化型写入功能的数据库引擎版本和数据库实例类。开启筛选条件后，您可以从可用的数据库引擎版本和数据库实例类中进行选择。

要选择支持 RDS 优化型写入功能的数据库引擎版本，请在**引擎版本**中筛选支持该功能的 RDS for MariaDB 数据库引擎版本，然后选择版本。

![\[引擎选项部分，针对引擎版本开启了 Amazon RDS 优化型写入功能筛选条件。\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-version-filter-mariadb.png)


在 **Instance configuration**（实例配置）部分中，筛选支持 RDS 优化写入的数据库实例类，然后选择数据库实例类。

![\[实例配置部分，针对数据库实例类开启了 Amazon RDS 优化型写入功能筛选条件。\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-class-filter.png)


做出这些选择后，您可以选择符合要求的其他设置，并使用控制台完成创建 RDS for MariaDB 数据库。

### Amazon CLI


要使用 Amazon CLI 创建数据库实例，请运行 [create-db-instance](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html) 命令。确保 `--engine-version` 和 `--db-instance-class` 值支持 RDS 优化写入。此外，确保与数据库实例关联的参数组将 `rds.optimized_writes` 参数设置为 `AUTO`。以下示例将默认参数组与数据库实例关联。

**Example 创建使用 RDS 优化写入的数据库实例**  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --engine mariadb \
4.     --engine-version 10.6.10 \
5.     --db-instance-class db.r5b.large \
6.     --manage-master-user-password \
7.     --master-username admin \
8.     --allocated-storage 200
```
对于：Windows  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --engine mariadb ^
4.     --engine-version 10.6.10 ^
5.     --db-instance-class db.r5b.large ^
6.     --manage-master-user-password ^
7.     --master-username admin ^
8.     --allocated-storage 200
```

### RDS API


您可以使用 [CreateDBInstance](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) 操作创建数据库实例。使用此操作时，请确保 `EngineVersion` 和 `DBInstanceClass` 值支持 RDS 优化写入。此外，确保与数据库实例关联的参数组将 `rds.optimized_writes` 参数设置为 `AUTO`。

## 在现有数据库上启用 RDS 优化写入
在现有数据库上启用

要修改现有 RDS for MariaDB 数据库以开启 RDS 优化写入功能，数据库必须使用支持的数据库引擎版本和数据库实例类创建。此外，数据库必须是在 2023 年 3 月 7 日发布 RDS 优化写入*之后*创建的，因为所需的底层文件系统配置与此次发布前创建的数据库的配置不兼容。如果满足上述条件，则可以通过将 `rds.optimized_writes` 参数设置为 `AUTO` 来开启 RDS 优化写入。

如果您的数据库*不是*使用支持的引擎版本、实例类或文件系统配置创建的，则可以使用 RDS 蓝绿部署来迁移到支持的配置。创建蓝绿部署时，请执行以下操作：
+ 选择**在绿色数据库上启用优化写入**，然后指定支持 RDS 优化写入的引擎版本和数据库实例类。有关支持的引擎版本和实例类的列表，请参阅[使用 RDS 优化写入](#rds-optimized-writes-using-mariadb)。
+ 在**存储**下，选择**升级存储文件系统配置**。此选项将数据库升级到兼容的底层文件系统配置。

创建蓝绿部署时，如果将 `rds.optimized_writes` 参数设置为 `AUTO`，则在绿色环境中将自动启用 RDS 优化写入。然后，您可以切换蓝绿部署，以将绿色环境升级为新的生产环境。

有关更多信息，请参阅 [在 Amazon RDS 中创建蓝绿部署](blue-green-deployments-creating.md)。

## RDS 优化写入的限制
限制

当您从快照中还原 RDS for MariaDB 数据库时，仅当满足以下所有条件时，才能为数据库开启 RDS 优化写入功能：
+ 快照是从支持 RDS 优化写入的数据库创建的。
+ 快照是从发布 RDS 优化型写入功能*之后*创建的数据库中创建的。
+ 快照还原为支持 RDS 优化写入的数据库。
+ 还原的数据库与一个参数组相关联，该参数组的 `rds.optimized_writes` 参数设置为 `AUTO`。