Postgres序列跳跃32



我们使用序列来维护特定业务单元的订单数量。在过去的几天里,我们注意到序列号出现了从1到32的奇怪跳跃,每天多次。我们配置的序列的cache_value为1。为什么会发生这种情况,我们如何解决?我找不到太多关于这一点的文件。

PostgreSQL序列在将辅助服务器升级为主服务器时可以跳32,有时在PostgreSQL严重崩溃并必须恢复时也可以跳32。

我只看到它跳过了32,而我还无法通过更改序列的缓存值来更改它。

https://www.postgresql.org/message-id/1296642753.8673.29.camel%40gibralter,以及响应https://www.postgresql.org/message-id/20357.1296659633%40sss.pgh.pa.us,表示这是崩溃条件下的预期行为。我不确定是否只有在您使用流式复制时才会发生这种情况。

我认为这是一个安全功能,以防初级犯在晋升时提交的记录没有复制到次级犯。然后,在擦除旧主存储器之前,人类将能够手动将记录从旧主存储器转储并复制到新主存储器。

这可能表明您的主设备每天都在崩溃和恢复几次,这不是一个好的状态。

PostgreSQL使用一种称为";预分配";以提高序列的性能。当一个序列被预先分配时,服务器会在内存中保留一个序列值块,而不是单独生成每个值。默认情况下,PostgreSQL一次预分配32个序列值。

这种预分配技术减少了PostgreSQL访问磁盘以获得下一个序列值的次数,这可以显著提高在多个客户端同时生成序列值的高并发环境中的性能。

虽然这种行为可能看起来很奇怪或出乎意料,但它实际上是PostgreSQL的一个功能,旨在提高性能。如果需要更改预分配值,可以使用INCREMENT by子句更改序列。例如,要将预分配更改为10,可以运行以下SQL命令:

ALTER SEQUENCE my_sequence INCREMENT BY 10;

相关内容

  • 没有找到相关文章

最新更新