为什么 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服务器,但希望您能帮助我们弄清楚原因。
我们测试了以下线索但没有成功:
- 硬件差异(所有机器都具有相同的 RAM、类似的 SSD 和处理器)
- 磁盘和机器 RAM 的运行状况
- 所有postgresql实例的配置和版本都一样
- 维护操作(真空和分析)已经进行。
- 实例间的数据相同(使用 pgAdmin 导出和导入)
你知道这可能来自哪里吗?
为什么 postgresql 会根据 OS 生成执行时间完全不同的计划?
在 Linux,基本上所有(217006.663 毫秒中的 204015.385)时间都花在了 JIT(即时编译)上,徒劳地试图让事情变得更快。关掉 jit 就可以了,根据我的经验,它很少有用。
在 Windows,您可能一开始就不支持 JIT。
我们在本地使用 Postgresql 进行非常大的查询(连接、子请求和递归)。 在 windows,请求在 4 到 8 秒内执行,具体取决于测试的机器。 这个时间是可以接受的。但是在 linux 台机器上,对于相同的查询和相同的数据集,我们最少需要 3 分钟 30。 我们不明白为什么更改 OS 会大大降低性能。 有request, linux 上的 explain(analyze, buffer) 在 windows.
请求是由我们的工具生成的,因此我们不打算更正此请求。我们可以为数据库安装Windows服务器,但希望您能帮助我们弄清楚原因。
我们测试了以下线索但没有成功:
- 硬件差异(所有机器都具有相同的 RAM、类似的 SSD 和处理器)
- 磁盘和机器 RAM 的运行状况
- 所有postgresql实例的配置和版本都一样
- 维护操作(真空和分析)已经进行。
- 实例间的数据相同(使用 pgAdmin 导出和导入)
你知道这可能来自哪里吗? 为什么 postgresql 会根据 OS 生成执行时间完全不同的计划?
在 Linux,基本上所有(217006.663 毫秒中的 204015.385)时间都花在了 JIT(即时编译)上,徒劳地试图让事情变得更快。关掉 jit 就可以了,根据我的经验,它很少有用。
在 Windows,您可能一开始就不支持 JIT。