我想知道数据库WAL序列是否无限?我猜大多数WAL记录都有WAL数的修正大小?这是一个非常大的数字,它只是不会达到目的吗?这可能是浪费空间?或者让大型DB玩家发明了更好的方法?
或者他们是否实施了一些逻辑让WAl再次从0开始?这可能会对代码中的许多位置产生重大影响......?
编辑:
影响:例如崩溃后的恢复依赖于沿时间线变大的序列号。如果序列可以重新启动,那么恢复可能会感到困惑。
术语WAL序列号: WAL(预先写入日志a.k.a在应用层收到事务成功之前保证在您的磁盘上的事务日志)。该日志具有越来越多的数字以保持数据库的合理性,例如如果通过检查页面中的WAL序列号与WAL中的序列号进行恢复,则
答案 0 :(得分:4)
我不认为每个数据库都实现相同的策略。
仅针对Oracle,SCN(系统更改编号)是48位数字,因此Oracle数据库可以在达到限制之前处理近300万亿次交易。实际上,这将需要很长时间。即使您每秒可以进行1000次交易,SCN也不会达到300亿秒或大约9500年的限制。现在,除了执行事务之外,还有各种各样的事情可以导致SCN增加(着名的recent issue with hot backups and database links导致少数用户超出数据库检查SCN的合理性)所以它不会真的需要9500年才能达到极限。但是,实际上,它让Oracle有足够的时间在几年后转向64位SCN,为每个人购买了几个世纪的功能。
答案 1 :(得分:2)
与SQL Server一样,DB2调用计数器Log Sequence Number(LSN)。 IBM最近将其LSN的大小从6个字节扩展到8个字节,无符号。 LSN是一个不断增长的指针,它显示日志文件中可以找到特定日志记录的位置。一个8字节的LSN意味着DB2数据库可以在用完地址空间之前写入近16 exbibytes个日志记录,此时必须卸载数据库的内容并将其复制到新的数据库中。
答案 2 :(得分:1)
见What is an LSN: Log Sequence Number。本文介绍了SQL Server LSN的结构(WAL编号),并向您展示了如何解码一个。由于LSN具有固定的大小并且它们不会翻转,因此您可以用完它们。这需要很长时间。
答案 3 :(得分:1)
在PostgreSQL中,WAL日志存储为set of segment files。 “段名文件的名称越来越多,从000000010000000000000000开始。”这个数字并没有包含在内。
答案 4 :(得分:1)
Postgres WAL号从技术上讲可以溢出,但是只有在写入32 Eb数据之后,因为WAL文件指针是64位