【发布时间】:2010-11-02 18:09:39
【问题描述】:
我已经为我们的数据库编写了一个维护脚本,并且希望在我们每天停机期间在最需要清理/重新索引的任何表上运行该脚本。有什么方法可以在 postgres 中确定吗?
我会像这样对需要注意的表格进行分类:
- 需要吸尘的表
- 需要重新索引的表(我们发现这会对性能产生巨大影响)
我看到了一些很有希望的东西here
【问题讨论】:
标签: optimization postgresql indexing vacuum
我已经为我们的数据库编写了一个维护脚本,并且希望在我们每天停机期间在最需要清理/重新索引的任何表上运行该脚本。有什么方法可以在 postgres 中确定吗?
我会像这样对需要注意的表格进行分类:
我看到了一些很有希望的东西here
【问题讨论】:
标签: optimization postgresql indexing vacuum
如何将在任何 CRUD 操作后运行的相同触发器函数添加到所有表。
该函数将接收表名,检查表的状态,然后对该表运行清理或重新索引。
应该是一个“简单”的 pl/sql 触发器,但是那些从来都不是简单的......
另外,如果您的数据库机器足够强大,并且您的停机时间足够长,只需每晚运行一个脚本来重新索引所有内容,然后将其全部清空......即使在测试时没有满足您的标准(晚上)但接近它(很少有记录低于您的标准),它不会在第二天达到标准时造成问题......
【讨论】:
我认为你真的应该考虑自动真空。
但是,如果我确实理解了您的需求,我会这样做:
例如,talbe 'foo' 需要为每 X 条新记录重新索引,并在每 X 条更新、删除或插入时清理
它每天检查表状态,将其保存在日志中(以比较随时间变化的行),然后重新索引/清空与您的条件匹配的表。
听起来有点骇人听闻,但我认为这是custom-autovacuum-with-custom-'triggers'-criteria 的好方法
【讨论】:
听起来您正在尝试重新发明自动真空。你有什么理由不能只启用它并让它完成它的工作?
有关您想要的实际信息,请查看 pg_stat_all_tables 和 pg_stat_all_indexes。
有关如何使用其中数据的一个很好的示例,请查看 auto-vacuum 的来源。它不会直接查询视图,但会使用该信息。
【讨论】: