代码之家  ›  专栏  ›  技术社区  ›  stanleyxu2005

PostgreSQL数据库大小增加

  •  2
  • stanleyxu2005  · 技术社区  · 16 年前

    我有个奇怪的问题。我的PostgreSQL(8.3)的大小正在增加。所以我做了一个转储,然后清理数据库,然后重新导入转储。数据库大小减少了大约50%。

    一些信息: (1)自动真空和重新索引在后台正常运行。 (2)数据库编码为ASCII。 (3)数据库位置:/数据库/pgsql/data (4)系统:SUSE ENT。10。

    如有任何提示,我们将不胜感激。

    5 回复  |  直到 16 年前
        1
  •  5
  •   Ryan Bair    16 年前

    如果死元组堆积起来超过了可以解释的范围 max_fsm_pages 一个普通的真空吸尘器不能释放所有的东西。最终的结果是,随着死区的不断累积,数据库将越来越大。运行一个充满真空的系统可以解决这个问题。不幸的是,在大型数据库上可能需要很长时间。

    如果您经常遇到这个问题,您要么需要更频繁地真空(自动真空可以帮助这里)或增加 最大页面 设置。当运行vacuum verbose时,它将告诉您释放了多少页,并在 最大页面 已超过,这可以帮助您确定此值应该是什么。有关更多信息,请参阅手册。 http://www.postgresql.org/docs/8.3/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM

    幸运的是,8.4的可见性图解决了这个问题。Despesz像往常一样有一个关于这个主题的伟大故事: http://www.depesz.com/index.php/2008/12/08/waiting-for-84-visibility-maps/

        2
  •  1
  •   Jordan S. Jones    16 年前

    在不了解关于您的特定设置的更多细节的情况下,会想到一些事情。当Autovacuum运行时,它是否试图回收磁盘空间,您是否可以通过服务器日志来验证这一点?

    其次,特别是如果前面的答案是“否”,您的自动真空值可能不正确。我强烈建议您阅读以下主题: http://www.postgresql.org/docs/8.3/interactive/routine-vacuuming.html#AUTOVACUUM

        3
  •  1
  •   user80168    16 年前

    不需要运行reindex。

    用verbose运行数据库范围的vacuum,并检查最后一行的fsm设置提示-可能是出了什么问题。

        4
  •  1
  •   bortzmeyer    16 年前

    你试过了吗? VACUUM FULL 也是吗?(警告,它会长期锁定您的数据库。)我不确定 AUTOVACUUM 是如此渴望…

        5
  •  1
  •   Magnus Hagander    16 年前

    如果还没有,请检查系统中是否存在长时间运行的空闲事务。它们将阻止真空(手动和自动)清除空间。