删除行后,Heroku Postgres数据库大小不会下降

时间:2016-07-26 23:05:20

标签: postgresql heroku

我在Heroku上使用Dev级别数据库,大约63GB,接近990万行(接近此级别的1000万的限制)。我运行了一个脚本,删除了我不需要的大约500万行,现在(几天后)在Postgres控制面板/使用pginfo:table-size它显示大约470万行,但它仍然是63GB。 64是他下一层的限制所以我需要减小尺寸。

我试过吸尘但是pginfo:bloat说膨胀只有3GB左右。知道这里发生了什么吗?

1 个答案:

答案 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提供有关磁盘使用情况的其他信息。