log
Lau*_*lbe 8
序列状态的更改必须写入事务日志 (WAL)。这可能会导致大量 WAL 记录,这会损害性能。
作为优化,PostgreSQL 不会记录当前序列计数器,而是记录一个大于 32 的值。请参阅以下评论src/backend/mands/sequence.c:
/* * 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_t 显示在必须写入新的 WAL 记录之前剩余的提取次数。
在nextval检查点后第一次调用后,log_t将是 32。它会随着每次调用而减少nextval,一旦达到 0,它再次设置为 32,并写入 WAL 记录。
log