

# 使用专用日志卷（DLV）
<a name="USER_PIOPS.dlv"></a>

您可以将专用日志卷（DLV）用于使用预调配 IOPS（PIOPS）存储的数据库实例。DLV 将 PostgreSQL 数据库事务日志、MySQL/MariaDB 重做日志和二进制日志移动到与包含数据库表的卷不同的存储卷中。DLV 可以提高事务写入日志的效率和一致性。DLV 非常适合分配了较大存储空间、每秒 I/O（IOPS）要求较高或工作负载对延迟敏感的数据库。

DLV 支持 PIOPS 存储（io1 和 io2 Block Express），创建它们时的固定大小为 1,024 GiB，预调配 IOPS 为 3000。

对于以下版本，Amazon RDS 在所有 AWS 区域都支持 DLV：
+ MariaDB 10.6.7 及更高的 10 版本
+ MySQL 8.0.28 及更高的 8.0 版本，MySQL 8.4.3 及更高的 8.4 版本
+ PostgreSQL 13.10 及更高的 13 版本、14.7 及更高的 14 版本，以及 15.2 及更高的 15 版本

RDS 对多可用区部署支持 DLV。修改或创建多可用区实例时，会同时为主实例和辅助实例创建 DLV。

RDS 对于只读副本支持 DLV。如果主数据库实例启用了 DLV，则启用 DLV 后创建的所有只读副本也将具有 DLV。除非经过明确修改，否则在切换到 DLV 之前创建的任何只读副本都不会启用 DLV。我们建议在启用 DLV 之前连接到主实例的所有只读副本也要手动修改为具有 DLV。

**注意**  
对于 5 TiB 或更大的数据库配置，建议使用 DLV。

有关 DLV 的好处的更多信息，请参阅以下博客文章：
+ [使用 Amazon RDS 专用日志卷提高数据库性能](https://aws.amazon.com/blogs/database/enhance-database-performance-with-amazon-rds-dedicated-log-volumes/)
+ [使用专用日志卷对 Amazon RDS for PostgreSQL 进行基准测试](https://aws.amazon.com/blogs/database/benchmark-amazon-rds-for-postgresql-with-dedicated-log-volumes/)
+ Percona 文档中的 [Maximizing performance of AWS RDS for MySQL with dedicated log volumes](https://www.percona.com/blog/maximizing-performance-of-aws-rds-for-mysql-with-dedicated-log-volumes/)

有关每个数据库引擎可用的已分配存储、预调配 IOPS 和存储吞吐量范围的信息，请参阅 [预置 IOPS SSD 存储](CHAP_Storage.md#USER_PIOPS)。

**Topics**
+ [启用和禁用 DLV 时的注意事项](#USER_PIOPS.dlv.considerations)
+ [创建数据库实例时启用 DLV](#USER_PIOPS.create-dlv)
+ [在现有数据库实例上启用 DLV](#USER_PIOPS.modify-dlv)
+ [监控 DLV 存储](#USER_PIOPS.dlv.monitoring)

## 启用和禁用 DLV 时的注意事项
<a name="USER_PIOPS.dlv.considerations"></a>

启用和禁用 DLV 可能很耗时并导致停机。该过程包括在启用时将所有事务日志或重做和二进制日志（具体取决于数据库引擎）复制到新卷，或者在禁用时复制回原始存储。此操作的持续时间受多个因素影响：
+ 事务日志数量：
  + 具有更多事务的较大数据库会生成更多日志，从而增加复制所需的时间。
  + 如果复制插槽处于非活动状态或复制正处于滞后状态，则事务日志可能会在主数据库实例上累积，从而增加复制所需的时间。确保复制是最新的，并移除所有不必要的插槽。
+ 存储配置：
  + 数据库实例 EBS 带宽 – 带宽越高，则支持的数据传输速度越快。
  + 预调配 IOPS 数 – 每秒进行读写操作的次数（IOPS）越多，复制过程就越快。
+ 数据库活动 - 配置期间的高水平数据库活动可能会减慢此过程。

为了显著缩短停机时间，建议您将此过程计划和安排在活动较少的期间或维护时段进行。

## 创建数据库实例时启用 DLV
<a name="USER_PIOPS.create-dlv"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 创建启用了 DLV 的数据库实例。

### 控制台
<a name="USER_PIOPS.create-dlv.CON"></a>

**在新数据库实例上启用 DLV**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 选择**创建数据库**。

1. 在**创建数据库实例**页面上，选择支持 DLV 的数据库引擎。

1. 对于**存储**：

   1. 选择**预调配 IOPS SSD（io1）**或**预调配 IOPS SSD（io2）**。

   1. 输入所需的**分配的存储空间**和**预调配 IOPS**。

   1. 展开**专用日志卷**，然后选择**开启专用日志卷**。  
![\[在新数据库实例上启用 DLV。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/enable-dlv.png)

1. 根据需要选择其它设置。

1. 选择**创建数据库**。

创建数据库后，专用日志卷的值将显示在数据库详细信息页面的**配置**选项卡上。

### CLI
<a name="USER_PIOPS.create-dlv.CLI"></a>

要在创建数据库实例时使用预调配 IOPS 存储启用 DLV，请使用 AWS CLI 命令 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)。设置以下参数：
+ `--dedicated-log-volume` – 启用专用日志卷。
+ `--storage-type` – 对于预调配 IOPS，设置为 `io1` 或 `io2`。
+ `--allocated-storage` – 要为数据库实例分配的存储量（以 GiB 为单位）。
+ `--iops` – 数据库实例的预调配 IOPS 的数量，以每秒的 I/O 操作数量表示。

### RDS API
<a name="USER_PIOPS.create-dlv.API"></a>

要在创建数据库实例时使用预调配 IOPS 存储启用 DLV，请使用 Amazon RDS API 操作 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CretaeDBInstance.html)。设置以下参数：
+ `DedicatedLogVolume` – 要启用专用日志卷，请设置为 `true`。
+ `StorageType` – 对于预调配 IOPS，设置为 `io1` 或 `io2`。
+ `AllocatedStorage` – 要为数据库实例分配的存储量（以 GiB 为单位）。
+ `Iops` – 数据库实例的 IOPS 速率，以每秒的 I/O 操作数量表示。

## 在现有数据库实例上启用 DLV
<a name="USER_PIOPS.modify-dlv"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 修改数据库实例来启用 DLV。

在修改数据库实例的 DLV 设置后，必须重启数据库实例。

### 控制台
<a name="USER_PIOPS.modify-dlv.CON"></a>

**在现有数据库实例上启用 DLV**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

   要筛选数据库实例的列表，对于 **Filter databases (筛选数据库)**，请输入 Amazon RDS 用于筛选结果的文本字符串。将仅显示其名称包含该字符串的数据库实例。

1. 选择具有要修改的预调配 IOPS 存储的数据库实例。

1. 选择 **Modify**(修改)。

1. 在**修改数据库实例**页面上：

   1. 对于**存储**，展开**专用日志卷**，然后选择**开启专用日志卷**。

1. 选择**继续**。

1. 选择**立即应用**可立即将更改应用到数据库实例。或选择 **Apply during the next scheduled maintenance window (在下一个计划的维护时段内应用)** 以在下一个维护时段内应用更改。

1. 检查将更改的参数，然后选择**修改数据库实例**以完成修改。

专用日志卷的新值将显示在数据库详细信息页面的**配置**选项卡上。

### CLI
<a name="USER_PIOPS.modify-dlv.CLI"></a>

要使用预调配 IOPS 存储在现有数据库实例上启用或禁用 DLV，请使用 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)。设置以下参数：
+ `--dedicated-log-volume` – 启用专用日志卷。

  使用 `--no-dedicated-log-volume`（默认值）将禁用专用日志卷。
+ `--apply-immediately` – 使用 `--apply-immediately` 可立即应用更改。

  使用 `--no-apply-immediately`（默认值）可在下一个维护时段内应用更改。

### RDS API
<a name="USER_PIOPS.modify-dlv.API"></a>

要使用预调配 IOPS 存储在现有数据库实例上启用或禁用 DLV，请使用 Amazon RDS API 操作 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html)。设置以下参数：
+ `DedicatedLogVolume` – 将此选项设置为 `true` 可启用专用日志卷。

  将此选项设置为 `false` 可禁用专用日志卷。这是默认值。
+ `ApplyImmediately` – 将此选项设置为 `True` 可立即应用更改。

  将此选项设置为 `False`（默认值）可在下一个维护时段内应用更改。

## 监控 DLV 存储
<a name="USER_PIOPS.dlv.monitoring"></a>

可以使用 CloudWatch 中的 `FreeStorageSpaceLogVolume` 指标来监控 DLV 存储使用情况。

可以对 RDS for PostgreSQL 使用以下查询来查找事务日志占用的大小：

```
SELECT pg_size_pretty(COALESCE(sum(size), 0)) AS total_wal_generated_size
FROM pg_catalog.pg_ls_waldir();
```

如果 DLV 的存储空间用完，则数据库实例将进入 `storage-full` 状态，从而导致停机。