PostgreSQL数据库大小增加

时间:2009-05-29 08:35:09

标签: postgresql

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

一些信息: (1)AUTOVACUUM和REINDEX在后台定期运行。 (2)数据库编码是ASCII。 (3)数据库位置:/ database / pgsql / data (4)系统:Suse-Ent。 10。

赞赏任何提示

5 个答案:

答案 0 :(得分:5)

如果死亡元组的累积超出了max_fsm_pages中可以考虑的范围,那么常规VACUUM将无法释放所有内容。最终结果是随着死区继续累积,数据库将随着时间的推移而变得越来越大。运行VACUUM FULL应该可以解决这个问题。不幸的是,在大型数据库上可能需要很长时间。

如果您经常遇到此问题,则需要更频繁地吸尘(autovacuum可以在这里提供帮助)或增加max_fsm_pages设置。运行VACUUM VERBOSE时,它会告诉您已释放的页数,并在超出max_fsm_pages时给出警告,这可以帮助您确定该值应该是多少。有关详细信息,请参阅手册。 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/

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

运行reindex不是必需的。

使用详细信息运行数据库范围的真空,并检查fsm设置提示的最后几行 - 也许这是错误的。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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