当我使用pg_upgrade将我的数据库从PostgreSQL 9.6.5升级到PostgreSQL 10.1时,我的一些涉及多个表的查询遭受了巨大的性能下降。
在完全相同的数据上使用10.1中完全相同的索引运行完全相同的查询需要大约17秒,相比之下大约0.1秒在9.6内。
查看查询的EXPLAIN计划,我可以看到两个版本之间的计划差异很大 - 特别是对于几个子选择。
9.6使用的索引远远超过10.1。 10.1似乎更倾向于对索引进行全表扫描 - 即使对于记录接近1M的表也是如此。
我已经确认指数已经“失去了”#34;在升级期间。此外,如果我单独查询表,则使用索引。
任何见解?
谢谢, 塞巴斯蒂安
答案 0 :(得分:1)
通过执行pg_dump / pg_restore而不是pg_upgrade来解决。性能和查询计划恢复正常。
答案 1 :(得分:0)
pg_upgrade的输出包括以下内容:
...
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
...
升级后,我们一直发现性能很差,直到我们运行此命令,然后才学会了读取输出内容:)