开发者社区> 问答> 正文

PostgreSQL 中vacuum freeze 操作的含义是什么

看PostgreSQL 官方文档,发现vacuum 可以接freeze 选项,其具体含义是什么?
另外,有哪些涉及到的参数,如何设置?

展开
收起
卓刀 2018-03-19 22:56:42 6977 0
1 条回答
写回答
取消 提交回答
  • PostgreSQL你值得拥有。

    vacuum freeze 命令表示强制对表或数据库进行freeze 操作。freeze 操作是为了保证整个数据库的最老最新事务差不能超过20亿,从而防止事务ID 发生回卷。

    在PostgreSQL 中,XID 是用32位无符号数来表示的,很容易发生溢出的情况,造成事务可见性混乱。为了解决这个问题,PostgreSQL:

    • PostgreSQL中是使用2^31取模的方法来进行事务的比较
    • 同一个数据库中,存在的最旧和最新两个事务之间的年龄最多是2^31,即20亿

    freeze 操作会将表中过老的元组的xmin 赋值为特殊的XID FrozenTransactionId(3)。FrozenTransactionId为t_xmin的元组将会被其他所有的事务可见,这样该元组原来对应的XID 相当于被回收了,经过不断的处理,就可以控制一个数据库的最老的事务和最新的事务的年龄不超过20亿。

    2019-07-17 22:02:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgreSQL 物联网六脉神剑 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载

相关镜像