首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log_cnt在postgres序列中是什么意思?

log_cnt在postgres序列中是什么意思?
EN

Stack Overflow用户
提问于 2021-03-03 20:20:05
回答 1查看 1.7K关注 0票数 7

我试图弄清楚为什么我的表中的序列号呈指数级跳跃,虽然这可能是我的API中的一个问题,但我仍然需要弄清楚,我遇到了这个查询来查找序列SELECT * from some_sequence的当前值。

它为我提供了一个名为log_cnt的列。这一列的值一直在30左右跳跃。我不确定这个数字是什么意思,以及这是否会影响序列中的下一个数字。

有人能帮我这个忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 21:50:42

序列状态的更改必须写入事务日志(WAL)。这可能会导致大量的WAL记录,这将损害性能。

作为优化,PostgreSQL不记录current sequence计数器,而是记录大于32的值。在src/backend/commands/sequence.c中查看此评论

代码语言:javascript
复制
/*
 * We don't want to log each fetching of a value from a sequence,
 * so we pre-log a few fetches in advance. In the event of
 * crash we can lose (skip over) as many values as we pre-logged.
 */
#define SEQ_LOG_VALS    32

这意味着最多32个序列值可能在崩溃期间丢失(恢复会将序列设置到记录的位置),这是没有问题的。

log_cnt显示在必须写入新的WAL记录之前还有多少次提取。

在检查点之后第一次调用nextval之后,log_cnt将为32。每次调用nextval时,它都会减少,一旦它达到0,它就会再次设置为32,并写入WAL记录。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66456952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档