ANALYZE <table>;
除了 cronjob 之外,在 PostgreSQL 12 服务器上自动运行的最简单方法是什么?
我有一个应用程序,每周都会定期插入数百万行,大约一个月后,查询时间变得非常慢,因为正在修改的主表的统计信息已经过时。运行ANALYZE <table>;
表需要几分钟,并立即修复性能问题,但我认为必须进行设置,以便 PG 服务器本身可以自动完成此操作,而不是手动完成?
答案1
听起来您已经禁用了自动清理功能,如果启用了自动清理功能,则会定期分析您的所有表以更新查询计划程序的统计信息。
最简单的解决方案是重新启用自动清理。检查 postgresql.conf 文件中的自动清理设置。
答案2
PostgreSQL 有一个内置的 autovacuum,应该启用并配置以满足您的需求。通常,您可以调整 *autovacuum_vacuum_threshold * 和autovacuum_analyze_threshold根据改变的元组的数量启动所需的行为。
看https://www.postgresql.org/docs/current/routine-vacuuming.html#AUTOVACUUM