监控 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 提供了以下两个用于监控直写缓存的函数。
aurora_stat_logical_wal_cache
函数 – 有关参考文档,请参阅 aurora_stat_logical_wal_cache。aurora_stat_reset_wal_cache
函数 – 有关参考文档,请参阅 aurora_stat_reset_wal_cache。
如果您发现自动调整的 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');