首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在postgres中,日志序列号真的是单调的吗?

在postgres中,日志序列号真的是单调的吗?
EN

Stack Overflow用户
提问于 2018-12-05 09:28:33
回答 2查看 2.1K关注 0票数 3

阅读postgreSQL文档时:

在写入每个新记录时,WAL记录会附加到WAL日志中。插入位置由日志序列号(LSN)描述,该日志序列号是日志中的字节偏移量,随着每条新记录的增加而单调增加。LSN值作为数据类型pg_lsn返回。值可以进行比较,以计算分离它们的WAL数据的体积,因此它们用于测量复制和恢复的进度。

我们能不能依赖于这个序号是严格单调的呢?难道没有时间点,这种偏移重置到以前的位置(由于WAL存档,或其他类型的操作)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-05 11:04:00

它是严格单调的,但LSN指向某个段文件中的物理偏移量。

难道没有时间点,这种偏移重置到以前的位置(由于WAL存档,或其他类型的操作)?

有这样一个时间点,但在另一个段文件。

这里供参考的是PG代码中的一个宏,它从LSN (internal.h)中提取段号:

代码语言:javascript
运行
复制
/*
 * Compute a segment number from an XLogRecPtr.
 ........
 */
#define XLByteToSeg(xlrp, logSegNo, wal_segsz_bytes) \
    logSegNo = (xlrp) / (wal_segsz_bytes)
票数 5
EN

Stack Overflow用户

发布于 2019-06-02 13:23:17

从postgres 关于wal内部件的文档 (强调地雷)

在写入每个新记录时,WAL记录会附加到WAL日志中。插入位置由日志序列号(LSN)描述,日志序列号是日志中的字节偏移,随每个新记录单调增加。LSN值作为数据类型pg_lsn返回。值可以比较来计算分离它们的WAL数据的体积,因此它们被用来测量复制和恢复的过程。 WAL日志存储在数据目录下的目录pg_wal中,作为一组段文件,通常每个文件大小为16 MB (但可以通过更改-wal-segsize initdb选项来更改大小)。每个片段被划分为页面,通常每个页面8 kB (这个大小可以通过-wal-wal-块大小配置选项来更改)。访问/xlog记录器.h中描述了日志记录头;记录内容取决于正在记录的事件的类型。从000000010000000000000000开始,段文件以名称的形式提供不断增加的数字。数字没有包装,但是需要很长一段时间才能用完的可用库存。

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

https://stackoverflow.com/questions/53629031

复制
相关文章

相似问题

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