max_replication_slots

默认:10

推荐:每个从库默认给一个物理副本,逻辑副本按计划预留,再冗余1-2个

max_replication_slots 是 PostgreSQL 的一个配置参数,它定义了数据库集群中可以创建的最大复制槽数量。这个参数必须在服务器启动时设置(不能动态修改),因为它会预先分配内存和系统资源。

历史来源:复制槽功能在 PostgreSQL 9.4(2014年)首次引入,为了解决传统流复制中的一个致命问题——从库断开时间过长会导致主库WAL日志被回收,从而无法重新连接。复制槽通过“钉住”WAL日志,确保只要槽存在,相关的WAL就不会被删除。

  • 内存开销:每个复制槽大约消耗几KB内存,但WAL保留的磁盘开销可能巨大
  • 类型包含:物理复制槽 + 逻辑复制槽 都计入总数

好处是从库宕机时间不受限制,随时恢复上来都能跟得上节奏。缺点是从库宕机太久的话,wal日志可能占用较多磁盘空间,这部分需要严加监控。

所谓逻辑副本:

逻辑副本(Logical Replication)是 PostgreSQL 提供的一种基于发布-订阅模型的数据复制方式。它不复制原始的磁盘块(物理复制),而是解析数据库的写前日志(WAL),将 INSERT、UPDATE、DELETE 等逻辑操作以结构化的方式发送给订阅者。

  • 逻辑副本:PostgreSQL 内置的、端到端的 CDC 实现,专注数据库到数据库的同步
  • CDC更广泛的概念,可以输出到任何系统(Kafka、Elasticsearch、自定义应用等)

逻辑副本和 CDC 的应用场景远超传统主从复制。

场景 实现方式 价值
审计日志 CDC 捕获所有 UPDATE/DELETE 满足合规要求,追踪数据变更历史
缓存失效 CDC 通知 Redis 清理对应 key 保证缓存与数据库一致性
搜索索引同步 CDC 更新 Elasticsearch 避免定时全量重建索引
异地灾备 逻辑副本到远程集群 RPO ≈ 0,RTO 极短
数据迁移 逻辑副本作为迁移工具 支持异构数据库间迁移(配合转换层)