为什么 postgresql 规划器在 linux 和 Windows 之间生成不同的执行

Why postgresql planner generates different executions between linux and Windows

我们在本地使用 Postgresql 进行非常大的查询(连接、子请求和递归)。 在 windows,请求在 4 到 8 秒内执行,具体取决于测试的机器。 这个时间是可以接受的。但是在 linux 台机器上,对于相同的查询和相同的数据集,我们最少需要 3 分钟 30。 我们不明白为什么更改 OS 会大大降低性能。 有request, linux 上的 explain(analyze, buffer) 在 windows.

请求是由我们的工具生成的,因此我们不打算更正此请求。我们可以为数据库安装Windows服务器,但希望您能帮助我们弄清楚原因。

我们测试了以下线索但没有成功:

你知道这可能来自哪里吗? 为什么 postgresql 会根据 OS 生成执行时间完全不同的计划?

在 Linux,基本上所有(217006.663 毫秒中的 204015.385)时间都花在了 JIT(即时编译)上,徒劳地试图让事情变得更快。关掉 jit 就可以了,根据我的经验,它很少有用。

在 Windows,您可能一开始就不支持 JIT。