https://www.postgresql.org/docs/10/static/functions-info.html#FUNCTIONS-TXID-SNAPSHOT说
内部事务ID类型(xid)为32位宽,每40亿个事务回绕一次。但是,这些函数会导出64位格式,并以“ epoch”计数器进行扩展,因此在安装期间不会回绕
这是什么意思时代的这句话?这是xid达到40亿笔交易并重置为零的次数的计数器吗?
我是否正确理解txid_current()返回的64位数字基本上由两个串联在一起的32位数字组成?前32位是纪元计数器(从0开始),后32位是xid?
我假设当xid达到最大值时,时期计数器将增加到0,然后xid重置为0。我认为,这基本上使txid_current()行为类似于普通的64位数字。
那是怎么回事?我很难理解这一点。
Epoch 用于防止 txid_current() 回绕并从零开始(或者确切地说从 3 开始,因为内部使用了值 0,1,2)。
所以它的工作原理如下:
Postgres 有一个内部 32 位 xid 计数器,它与 txid_current() 返回的值不同。内部 xid 回绕并在每次回绕时重置其计数。
另一方面,txid_current() 返回 64 位 (bigint),其中高位是纪元增量,每个 xid 环绕发生一次,并且不是从零开始。
因此,在每次循环时,纪元都会启动,并且 txid_current() 的高位会被修改以防止 txids 重置,并且 txids 会不断增加,直到达到 64 位限制(有时是在我们都死后很久的未来)。
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |