0

我最近将 PostgreSQL 数据库部署到 Linux 服务器,其中一个存储过程需要大约 24 到 26 秒才能获取结果。以前我将 PostgreSQL 数据库部署到 windows 服务器,相同的存储过程只需要 1 到 1.5 秒。

在这两种情况下,我都使用具有相同数据量的相同数据库进行了测试。并且两台服务器都具有相同的配置,例如 RAM、处理器等。

在 Linux 服务器中执行我的存储过程时,CPU 使用率达到 100%。

Windows 执行计划:

**在此处输入图片描述**

Linux的执行计划:

在此处输入图像描述

让我知道您是否有相同的解决方案。

4

2 回答 2

1

这也可能是因为 JIT 在 Linux 服务器而不是 Windows 中发挥作用。检查 linux 服务器上的查询执行计划是否包含有关 JIT 的信息。如果是,请检查在 windows 版本中是否相同。如果不是,那么我怀疑就是这种情况。

JIT 可能会增加更多开销,因此请尝试根据您的系统要求将 jit_above_cost、jit_inline_above_cost 等 jit 参数更改为适当的值,或者通过设置完全禁用这些参数

jit=off

或者

jit_above_cost = -1
于 2020-02-03T10:59:23.937 回答
0

罪魁祸首似乎在

billservice.posid = pos.posid

更具体地说,它对 pos 表进行序列扫描。它应该进行索引扫描。

在此处输入图像描述

检查数据库中这两个文件是否有索引。

于 2020-01-28T12:08:21.173 回答