监控 Aurora PostgreSQL 逻辑复制的直写缓存和逻辑插槽 - Amazon Aurora

监控 Aurora PostgreSQL 逻辑复制的直写缓存和逻辑插槽

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

监控 Aurora PostgreSQL 逻辑复制直写缓存

原定设置情况下,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_stat_logical_wal_cache

Aurora PostgreSQL 提供了以下两个用于监控直写缓存的函数。

如果您发现自动调整的 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 文档中的预写日志

管理 Aurora PostgreSQL 的逻辑插槽

流式传输活动在 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');