Amazon Aurora PostgreSQL 兼容数据库最近引入了逻辑复制直写缓存,以减少逻辑解码期间的存储 I/O 量。新功能减少了复制滞后,改进了读取 I/O 和事务赶上时间。
根据云提供商的说法,逻辑复制直写缓存提供了显着的改进,而没有降低每秒事务数 (TPS)。使用pgbench工作负载进行测试,AWS 的开发人员倡导者Susan Douglas和 AWS 的首席数据库工程师Scott Mead写道:
如果复制流的生成速度太快以至于实例无法跟上,则副本会落后;这是复制滞后。与 Aurora PostgreSQL 的上一个版本相比,默认的直写缓存实现了 44% 的复制滞后改进。将直写缓存大小增加到 2 GB 可以进一步改善复制滞后,达到 59%。
为 Aurora PostgreSQL 集群提供对复制的细粒度控制,PostgreSQL 中的逻辑复制是一种发布/订阅者功能,它通过将预写日志 (WAL) 解码为订阅者可以使用的记录流来工作。新的 Aurora 功能旨在减少延迟并减少 PostgreSQL 逻辑复制的 CPU 开销,减少了逻辑复制数据到客户端的延迟。
在其他选项中,逻辑复制可用于将数据导出到 AWS 上的托管服务,如数据库迁移服务和 Kinesis,或云迁移项目中的外部数据库。道格拉斯和米德解释了它是如何工作的:
当写入事务在 Aurora PostgreSQL 集群中提交时,相应的 WAL 记录将写入 Aurora 存储和 Aurora PostgreSQL WAL 缓存。如果缓存已满(大小由 rds.logical_wal_cache 参数定义),则删除缓存中最旧的记录并将新记录追加到缓存的末尾(通常称为先进先出)出,或 FIFO 队列)。
Aurora 提供三个函数来评估和管理 PostgreSQL 数据库的直写式缓存:aurora_stat_logical_wal_cache()返回有关每个槽的缓存使用情况的信息,aurora_stat_reset_wal_cache()重置写入实例指标的计数器,以及get_oldest_wal_cache_ptr()返回最旧的页面在逻辑 WAL 缓存中。
在 Aurora PostgreSQL 版本 11.17、12.12、13.8 和 14.5 中,使用逻辑复制的集群默认启用直写缓存。
AWS 将于2024 年 1 月停止对 Aurora PostgreSQL 11.x版本的支持。选择停用主要版本而不提供使用逻辑复制的本机迁移过程并避免停机引起了社区的关注。