【问题标题】:Database table size did not decrease proportionately数据库表大小没有按比例减少
【发布时间】:2013-03-09 01:44:08
【问题描述】:

我正在使用 PostgreSQL 8.4.13 数据库。
最近我在一个表中有大约 8650 万条记录。我几乎全部删除了——只剩下 5000 条记录。我跑了

reindex

vacuum analyze

删除行后。但是我还是看到这个表占用了很大的磁盘空间:

jbossql=> SELECT pg_size_pretty(pg_total_relation_size('my_table'));
pg_size_pretty 
----------------
7673 MB

此外,剩余行的索引值仍然很高 - 就像在百万范围内。我想在清理和重新索引之后,剩余行的索引将从 1 开始。

我阅读了文档,很明显我对重新索引的理解存在偏差。

但尽管如此,我的意图是在删除操作后减小表大小并降低索引值,以便从表中读取操作 (SELECT) 不会花费那么长时间 - 目前我需要大约 40 秒从我的表中只检索一条记录。

更新

谢谢欧文。我已经更正了 pg 版本号。

vacuum full

为我工作。我在这里有一个后续问题:
Restart primary key numbers of existing rows after deleting most of a big table

【问题讨论】:

  • 你提到了 PostgreSQL 8.3。然而你标记8.4?请说清楚。无论哪种方式,我都敦促您考虑upgrading to a more recent versionVACUUM 进行了许多改进。
  • @ErwinBrandstetter:谢谢欧文。更新了问题。更正了我的 pg ver。有一个后续问题给你。谢谢。
  • 请为第二个问题开始一个新问题。将主题分开。
  • @ErwinBrandstetter 谢谢。我为我的后续问题创建了一个新问题。 stackoverflow.com/questions/15526813/… 感谢您的帮助。

标签: postgresql postgresql-8.4 vacuum


【解决方案1】:

要真正将磁盘空间返回给操作系统,请运行VACUUM FULL

更多细节在此密切related recent answer on dba.SE

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2016-11-11
    • 2018-11-03
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多