我最近已经将PostgreSQL数据库部署到Linux服务器上,其中一个存储过程大约需要24到26秒来获取结果。以前,我将PostgreSQL数据库部署到windows服务器上,相同的存储过程只需1到1.5秒。
在这两种情况下,我都用相同的数据库测试了相同的数据量。而且这两台服务器都有相同的配置,如RAM、处理器、..等。
在Linux服务器中执行我的存储过程时,CPU使用率达到100%。
Windows的执行计划:

Linux的执行计划:

如果你有同样的解决方案,请告诉我。
发布于 2020-02-03 10:59:23
这也可能是因为JIT在Linux服务器上发挥作用,而不是在windows上发挥作用。检查linux服务器上的查询执行计划是否包含有关JIT的信息。如果是,请检查windows版本中是否相同。如果不是的话,我怀疑是这样的。
JIT可能会增加更多开销,因此尝试根据系统需求将jit参数(如jit_above_cost、jit_inline_above_cost )更改为适当的值,或者通过设置完全禁用这些参数。
jit=off或
jit_above_cost = -1发布于 2020-01-28 12:08:21
罪魁祸首似乎
billservice.posid = pos.posid更具体地说,它对pos表进行了序列扫描。它应该在做索引扫描。

检查数据库中这两个文件是否有索引。
https://stackoverflow.com/questions/59948102
复制相似问题