gpt4 book ai didi

PostgresQL 为臃肿的表自动化 VACUUM FULL

转载 作者:行者123 更新时间:2023-11-29 11:21:42 27 4
gpt4 key购买 nike

我们有一个使用 PostgreSQL 数据库服务器的产品,该产品部署在数百个客户端上。他们中的一些人多年来收集了数十 GB 的数据。因此,在下一个版本中,我们将引入自动清理程序,该程序将在夜间批处理作业中逐渐归档和删除旧记录。

如果我理解正确的话,autovacuum 将启动并分析和重组元组,因此性能将与存在较少记录时一样。

如果我理解正确的话,实际的磁盘空间不会被释放,因为这只会发生在 VACUUM FULL 时,而不会被 autovacuum 触发。 p>

所以我在考虑可以执行此操作的自动化流程。

我在 http://wiki.postgresql.org/wiki/Show_database_bloat 找到了 nagios check_postgres 使用的膨胀 View .

这个观点好吗?如果 tbloat> 2,它可以使用 VACUUM FULL,我的理解是否正确?如果 ibloat 太高,它可以使用 REINDEX 吗?

对以下作为每日批处理作业运行的作业有何评论?

  • vacuumdb -Z mydatabase #vacuum with analyze-only
  • select tablename from bloatview order by tbloat desc limit 1
  • vacuumdb -f -t tablename mydatabase
  • select tablename, iname from bloatview order by ibloat desc limit 1
  • reindexdb -t tablename -i iname mydatabase

当然,我仍然需要将它包装在 crontab 中的一个漂亮的 perl 脚本中(我们使用的是 ubuntu 12),或者 postgresql 是否有某种调度程序我可以使用它?

或者这是完全矫枉过正,是否有更简单的程序?

最佳答案

您可能不需要它。最好只执行一次 — 在第一次归档工作之后,您将收回磁盘空间,但之后您的日常归档工作和 autovacuum 将防止死元组膨胀。

另外,代替 vacuum full,运行 cluster table_name using index_name 通常会更好;分析表名。这将根据索引重新排序行。通过这种方式,相关的表行可以物理上靠近磁盘保存,这可以限制磁盘搜索(在传统磁盘驱动器上很重要,在 SSD 上基本不相关)和典型查询的读取次数。

请记住,vacuum fullcluster 都会让您的表在运行时无法使用。

关于PostgresQL 为臃肿的表自动化 VACUUM FULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13931989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com