我在Heroku上使用Dev级别数据库,大约63GB,接近990万行(接近此级别的1000万的限制)。我运行了一个脚本,删除了我不需要的大约500万行,现在(几天后)在Postgres控制面板/使用pginfo:table-size
它显示大约470万行,但它仍然是63GB。 64是他下一层的限制所以我需要减小尺寸。
我试过吸尘但是pginfo:bloat
说膨胀只有3GB左右。知道这里发生了什么吗?
答案 0 :(得分:1)
如果你有[vacuum][1]
表格,请不要担心一个磁盘的大小仍保持不变。该空间已被新行标记为可重用。因此,您可以轻松添加另外470万行,并且磁盘上的大小不会增长。
VACUUM的标准形式删除了表格中的死行版本 索引并标记可用于将来重用的空间。但是,它 不会将空间返回给操作系统,除了在 表格末尾的一个或多个页面成为特殊情况 完全免费,可以轻松获得独家桌锁。在 相比之下,VACUUM FULL通过写一个完整的主动压缩表 表格文件的新版本,没有死角。这最小化了 表的大小,但可能需要很长时间。它还需要额外的 磁盘空间为表的新副本,直到操作 完成。
如果要在磁盘上缩小它,则需要VACUUM FULL来锁定表,并且在操作进行时需要与表大小相同的额外空间。因此,在尝试此操作之前,您必须检查配额,否则您的网站将无法响应。
<强>更新强>:
您可以通过查询pg_class表来大致了解磁盘上数据的大小:
SELECT SUM(relpages*8192) from pg_class
另一种方法是这种性质的查询:
SELECT pg_database_size('yourdbname');
此链接:https://www.postgresql.org/docs/9.5/static/disk-usage.html提供有关磁盘使用情况的其他信息。