【问题标题】:Do deleted SQL entries still take up space/rows?删除的 SQL 条目是否仍占用空间/行?
【发布时间】:2014-07-17 06:22:54
【问题描述】:

我正在通过 Django 开发一个应用程序,用户可以在其中使用 RESTful 界面更新特定条目。由于所有内容都是通过 JSON 发布的,并且每次用户更新他们的条目时条目的数量都可以保持不变、减少或增加,我认为处理这个问题的最佳方法是删除所有用户当前的条目,然后重新添加他们提交的所有条目。

我正在使用 heroku 来托管网站,对于他们的爱好数据库,他们限制了行数。即使对于他们的标准数据库,它们也会根据大小进行限制......我注意到当我在 Django 中删除对象时,索引永远不会重置,我理解为什么,但这是否意味着删除的行仍然占用空间/存在?如果有帮助,我正在使用 PostgreSQL

【问题讨论】:

    标签: sql django postgresql heroku


    【解决方案1】:

    删除的 SQL 条目是否仍占用空间/行?

    在 PostgreSQL 中,是的,它们仍然会占用一段时间的空间。你UPDATEd 的旧版本的行也是如此。一段时间后,VACUUM 出现并将该空间标记为可重复使用,尽管就操作系统而言它仍处于“使用中”。稍后,INSERT 的新行或UPDATEd 行的新版本将覆盖旧的、真空处理的行。

    您可以TRUNCATE 一个表,导致立即清除所有行,但这是全有或全无的事情。

    Heroku 是否计算已删除的行数取决于它们如何实现系统的内部结构,与它们是否仍占用空间无关。如果我不得不猜测我会说“不”,因为在 Heroku 上你不控制真空活动等,所以让你等待他们的真空来进行清理是相当不公平的。

    Heroku has some documentation on the topic here.

    【讨论】:

    • 那么“一段时间”大约是多长时间?
    • 取决于 autovacuum 设置、表大小、数据库的繁忙程度等。
    • 但它会在 24 小时内消失吗?假设的最佳最大时间是多少?
    • 您可以假设没有最大值。如果 autovacuum 没有运行,死行可能会永远存在。如果您想要 Heroku 特定的详细信息,那么您可能需要联系他们的支持人员以了解死行和膨胀的原因。这篇文章表明它们计数的是 live 行(即未删除):stackoverflow.com/q/12701711/398670
    • 当您运行 heroku pg:info 时,AFAIK 会触发真空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2015-09-01
    • 2014-10-08
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多