我们有一个查询,它使用两列与多个表进行左连接,并且索引存在于它上面而不是进行索引扫描,执行计划是在表上选择表扫描并提高查询性能尝试在表上运行真空分析帮助数据库选择帮助了几天的最佳执行计划。我们计划每天运行手动清理分析(autovacuum 设置没有帮助,我们计划稍后更新 autovacuum 设置,因为我们没有分析/捕获 pg_stat_user_tables 数据)。似乎手动真空分析没有帮助,用户报告速度慢,然后我们开始执行真空分析并验证执行计划(如果执行计划选择表上的索引扫描)。有时甚至 vacuum analyze 都没有帮助选择最佳执行计划(表上的索引扫描),并且发现在 vacuum analyze 之后运行分析有助于选择正确的执行计划(索引扫描)。
另外,
我们观察到禁用 hashjoin(设置 enable_hasjoin =off)更快地运行查询并对表进行索引扫描。
尝试在与其他表连接的表列(两列)上更新统计目标(不走运)。请建议
有问题的表统计: 表数~8亿
来自 pg_stat_user_table 的 1 天统计数据
AutovacuumConfiguration(表):
autovacuum_vacuum_threshold=250000
autovacuum_vacuum_insert_threshold=300000
autovacuum_analyze_threshold=200000