AWS Aurora PostgreSQL 15读写实例序列值不一致原因及重复值疑问
问题解答
读写实例序列值不一致的原因
- 序列本地缓存导致实例状态差异:PostgreSQL的序列自带本地缓存机制(默认
CACHE 1),调用nextval时,实例会在本地内存缓存一批序列值。Aurora里主实例的序列持久化状态(比如last_value)会写入共享存储,但每个读取实例的本地缓存是单独的内存数据,不会同步到共享存储或其他实例。这就造成读取实例可能还保留着旧的序列缓存状态,查出来的序列值和主实例不一致。 - 缓存刷新触发条件:只有当读取实例重启、缓存过期,或者你在读取实例上调用
nextval/setval时,它才会从共享存储加载最新的序列持久化数据,此时两者的值就会对齐。
故障切换时是否会产生重复序列值
不会出现重复值,具体说明:
- 当写入实例故障,读取实例升级为新主实例时,新主实例会直接从Aurora共享存储里读取序列的最新持久化状态(也就是旧主实例最后写入的
last_value)。 - 旧主实例本地缓存里没用到的序列值会随着故障丢失,但PostgreSQL的序列设计绝不会重复分配已经持久化过的序列值——最多只会出现序列值跳号(比如跳过那些没用到的缓存值),但不会产生重复。
- 结合你验证的参数:
rds.logical_replication=off、wal_level=replica,说明集群用的是物理复制,物理复制会完整同步序列的持久化元数据,确保新主实例拿到的是序列的最新有效状态。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

