将PostgreSQL 9.6.5升级到10.1

时间:2017-12-16 19:20:03

标签: postgresql upgrade

当我使用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;在升级期间。此外,如果我单独查询表,则使用索引。

任何见解?

谢谢, 塞巴斯蒂安

2 个答案:

答案 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

...

升级后,我们一直发现性能很差,直到我们运行此命令,然后才学会了读取输出内容:)