监控 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 并不是总是从 Aurora 存储层进行写入和读取,而是使用缓冲区来缓存逻辑 WAL 流以便在复制过程中使用,而不是始终从磁盘中提取。这个缓冲区是逻辑复制使用的 PostgreSQL 原生缓存,在 Aurora PostgreSQL 数据库集群参数中标识为 rds.logical_wal_cache。原定设置情况下,此缓存使用 Aurora PostgreSQL 数据库集群的缓冲区缓存设置(shared_buffers)的 1/32,但不小于 64KB,也不超过一个 WAL 分段的大小,通常为 16MB。

当您在 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 的值。请注意,任何小于 32kB 的正值都被视为 32kB。有关 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');