gpt4 book ai didi

postgresql - "replacement inserts"的最佳磁盘保存策略

转载 作者:行者123 更新时间:2023-11-29 12:09:03 27 4
gpt4 key购买 nike

我每天从一个大表中删除数十万条记录,然后我进行一些计算(使用新数据)并替换我之前删除的每一条记录。我认为执行常规 vacuum tbl 就可以了。我知道它不会将磁盘空间返回给服务器,但是(由于 pg 文档)我认为因为我插入的记录与删除的记录一样多,所以我不会丢失任何/太多的磁盘空间。然而,在将表移动到不同的命名空间后(出于不相关的原因),表从 117GB 变成了 44GB!所以……

有没有比这更好的策略让我的表膨胀:

delete from tbl where ...etc... -- hundreds of thousands of rows removed
insert into tbl (...etc...) values (...etc...) -- hundreds of thousands of rows added back (fresh calcs)

.. repeat the above about 10 times a day ...

vacuum tbl

https://www.postgresql.org/docs/9.6/static/sql-vacuum.html

PostgreSQL 9.6

我为减少表格大小所做的实际工作在我的回答中: integer out of range and remaining disk space too small to convert id to bigint and other solutions

编辑 1:vacuum full 的缺点对我来说太局限了。我正在 24/7 处理东西,所以我不能有那样的锁,而且我的可用磁盘空间在任何时间点都非常有限。尝试以更好的方式解决这个问题。

最佳答案

您正在寻找的是我喜欢称之为“死空间平衡”的东西。如果你有 100 万行并且你想要删除和替换 100k 行,那么你可以通过不同的方式来完成。假设您删除 100k,然后立即插入 100k。数据库没有时间清理那些旧的死行,所以现在您的 1M 行表中有 100k 死行。在接下来的 24 小时内,vacuum 将启动并将它们标记为死行,下次删除/插入时,您将再创建 100k 死行,然后重用(大部分)之前的 100k 死行。您的 1M 行表现在又有约 10 万行死行,下次将被重用,依此类推。

您希望达到这样一个点:您的删除/插入(或更新)和 vacuum 以均匀的速度创建/回收死元组。

关于postgresql - "replacement inserts"的最佳磁盘保存策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46674520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com