首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >邮递员:我们总是需要最少3到4倍的免费空间吗?

邮递员:我们总是需要最少3到4倍的免费空间吗?
EN

Stack Overflow用户
提问于 2017-03-08 21:49:55
回答 1查看 223关注 0票数 0

我们正在使用Postgres存储~ 2.000.000.000个样品。这最终出现在具有大约500兆条目和~100 in大小的表中。

我想要做的事情:例如更新表条目:UPDATE table SET flag = true;

在此之后,该表的大小是原来的两倍,即200 on,以获得空间(存储在SSD上)--我们:“全表”

不幸的是,这一步再次需要大量的空间,由于空间太少,导致真空失效。

我的问题是:是否意味着,为了只进行一次更新查询,并为这个DB中的其他表获取空间,我们至少需要300-400 DB的空间来处理100 DB的表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-09 09:10:45

在您的场景中,如果没有至少两倍于表数据所需的空间,就无法逃脱。

最便宜的解决方案可能是定义一个fillfactor为50的表,这样每个块中有一半是空的,从而使表的大小翻一番。然后,更新后的行都可以与原始行位于同一个块中,而且UPDATE不会增加表的大小,因为PostgreSQL只能使用堆元组(热)更新特性。如果没有长时间运行的事务仍然可以看到,则将立即释放旧版本。

注意:只有当您正在更新的colum没有索引时,才能工作。

这种方法的缺点是,表的大小总是必要的两倍,而所有的顺序扫描都需要两倍的时间。如果您不使用表的顺序扫描,它不会困扰您。

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

https://stackoverflow.com/questions/42682555

复制
相关文章

相似问题

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