我正在CentOS 4.4系统上运行PgSQL 8.1(不幸的是不能升级)。
有一个Java应用程序运行在PgSQL守护进程之上,我们需要每2个月左右对数据库进行重新索引。 同样重要的是:数据库没有增长。
看起来膨胀现在比以前快了,这往往会增加。
我的configuration在这里可用,autovacuum守护进程已启用,并经常运行:pastebin.com/RytNj7dK
你也可以find这个查询的输出wiki.postgresql.org/wiki/Show_database_bloat
运行reindex后3小时: http ://pastebin.com/raw.php?i= 75fybKyd
运行reindex后72小时: http ://pastebin.com/raw.php?i= 89VKd7PC
有没有人有任何想法,我应该调整,以摆脱日益膨胀?
谢谢你的帮助
PS:由于反垃圾邮件预防系统,我不得不删除前两个链接的前两个http://前缀。
不幸的是,如果你有一个活动的数据库(有很多插入/更新/删除),你会遇到索引膨胀 – 这只是数据库生活的一个事实。 你可以做的最好的是希望减缓膨胀到你的reindex间隔是合理的点。
在这方面,我可以给你的最好的build议是升级到更新版本的Postgres(8.3或更高版本):这是当Postgres引入堆只元组的支持。
现在在你的(8.1)系统上,就索引而言, 任何对行的更新都等价于删除/插入,因此索引膨胀。 8.3和更高版本不要触摸索引,除非它们必须(“如果该行仍然适合它所在的页面”)。
升级到具有HOT支持的Postgres版本后,如果您的UPDATE
触及索引列,或者如果您的UPDATE
大大增加了行的大小以至于必须将其移动到新页面,但是如果你的索引策略是合理的,并且你的行在大小上是相对静态的,那么这些情况应该是比较less见的,所以索引膨胀问题应该不是什么问题。
处理指数膨胀的一些额外的一般策略:
REINDEX
并拿走表锁。 DROP
并重新CREATE
非关键指标