

# 监控 Aurora PostgreSQL 逻辑复制的直写缓存和逻辑插槽
<a name="AuroraPostgreSQL.Replication.Logical-monitoring"></a>

监控逻辑复制直写缓存并管理逻辑插槽，以提高 Aurora PostgreSQL 数据库集群的性能。接下来，查找有关直写缓存和逻辑插槽的更多信息。

**Topics**
+ [

## 监控 Aurora PostgreSQL 逻辑复制直写缓存
](#AuroraPostgreSQL.Replication.Logical-write-through-cache)
+ [

## 管理 Aurora PostgreSQL 的逻辑插槽
](#AuroraPostgreSQL.Replication.Logical.Configure.managing-logical-slots)

## 监控 Aurora PostgreSQL 逻辑复制直写缓存
<a name="AuroraPostgreSQL.Replication.Logical-write-through-cache"></a>

原定设置情况下，Aurora PostgreSQL 版本 14.5、13.8、12.12 和 11.17 及更高版本使用直写缓存来提高逻辑复制的性能。如果没有直写缓存，Aurora PostgreSQL 在实现原生 PostgreSQL 逻辑复制过程时使用 Aurora 存储层。为此，它将 WAL 数据写入存储，然后从存储中读回数据以对其进行解码并发送（复制）到其目标（订阅者）。这可能会导致在 Aurora PostgreSQL 数据库集群的逻辑复制过程中出现瓶颈。

直写缓存尽可能减少了对 Aurora 存储层的依赖。Aurora PostgreSQL 并不始终在该层进行写入和读取，而是使用缓冲区来缓存逻辑 WAL 流以便在复制过程中使用，从而减少了访问磁盘的需求。该缓冲区是逻辑复制中使用的原生 PostgreSQL 缓存，在 Aurora PostgreSQL 数据库集群参数中标识为 `rds.logical_wal_cache`。

当您在 Aurora PostgreSQL 数据库集群（对于支持直写缓存的版本）中使用逻辑复制时，您可以监控缓存命中率以查看其对您的使用案例的效果有多好。为此，请使用 `psql` 连接到 Aurora PostgreSQL 数据库集群的写入实例，然后使用 Aurora 函数 `aurora_stat_logical_wal_cache`，如以下示例所示。

```
SELECT * FROM aurora_stat_logical_wal_cache();
```

该函数返回如下输出。

```
name       | active_pid | cache_hit | cache_miss | blks_read | hit_rate | last_reset_timestamp
-----------+------------+-----------+------------+-----------+----------+--------------
test_slot1 | 79183      | 24        | 0          | 24        | 100.00%  | 2022-08-05 17:39...
test_slot2 |            | 1         | 0          |  1        | 100.00%  | 2022-08-05 17:34...
(2 rows)
```

为了便于阅读，已缩短了 `last_reset_timestamp` 值。有关此函数的更多信息，请参阅 [aurora\$1stat\$1logical\$1wal\$1cache](aurora_stat_logical_wal_cache.md)。

Aurora PostgreSQL 提供了以下两个用于监控直写缓存的函数。
+ `aurora_stat_logical_wal_cache` 函数 – 有关参考文档，请参阅 [aurora\$1stat\$1logical\$1wal\$1cache](aurora_stat_logical_wal_cache.md)。
+ `aurora_stat_reset_wal_cache` 函数 – 有关参考文档，请参阅 [aurora\$1stat\$1reset\$1wal\$1cache](aurora_stat_reset_wal_cache.md)。

如果您发现自动调整的 WAL 缓存大小不足以满足您的工作负载，则可以手动更改 `rds.logical_wal_cache` 的值。请考虑以下事项：
+ 当 `rds.logical_replication` 参数禁用时，`rds.logical_wal_cache` 设置为零（0）。
+ 当 `rds.logical_replication` 参数启用时，`rds.logical_wal_cache` 默认值为 16 MB。
+ `rds.logical_wal_cache` 参数是静态的，并需要重新启动数据库实例以使更改生效。根据 8 Kb 数据块定义此参数。请注意，任何小于 32 Kb 的正值均视为 32 Kb。有关 `wal_buffers` 的更多信息，请参阅 PostgreSQL 文档中的[预写日志](https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-SETTINGS)。

## 管理 Aurora PostgreSQL 的逻辑插槽
<a name="AuroraPostgreSQL.Replication.Logical.Configure.managing-logical-slots"></a>

流式传输活动在 `pg_replication_origin_status` 视图中捕获。要查看此视图的内容，您可以使用 `pg_show_replication_origin_status()` 函数，如下所示：

```
SELECT * FROM pg_show_replication_origin_status();
```

您可以使用以下 SQL 查询获取逻辑插槽的列表。

```
SELECT * FROM pg_replication_slots;
```

要删除逻辑插槽，请使用 `pg_drop_replication_slot` 以及插槽的名称，如以下命令所示。

```
SELECT pg_drop_replication_slot('test_slot');
```