为何PostgreSQL的JIT会导致Linux服务器性能大幅下降?
PostgreSQL跨平台JIT性能差异解析请求
背景
开发环境为Windows系统上的PostgreSQL 14.4,生产环境为Ubuntu Linux系统上的PostgreSQL 14.5。已将开发库完整导入生产库,数据完全一致,但部分查询在Ubuntu上的执行速度比Windows慢100倍,硬件差异无法解释该差距。
关键查询
SELECT a.field1, ... a.field_n, CASE (EXISTS ( SELECT b."waterBodyCode" FROM "GAP_ecologico_SWB_1" b WHERE a.field1 = b.field1_b AND ...)) WHEN true THEN 'Yes' ELSE 'No' END AS "attributableQE" FROM "SWB_ecological_quality_elements" a ORDER BY a.field1, ...;
注:SWB_ecological_quality_elements和waterBodyCode均为视图。怀疑Windows端内部查询使用了索引或缓存,而Ubuntu端执行全表扫描。两台服务器的postgresql.conf配置高度相似,除已排查项外,还可检查哪些内容?
排查更新1
按PgTune建议调整内存配置后,性能无改善。执行带Analyze的查询,计时结果异常:
" Functions: 1499" " Options: Inlining true, Optimization true, Expressions true, Deforming true" " Timing: Generation 101.424 ms, Inlining 103.476 ms, Optimization 10402.780 ms, Emission 6866.288 ms, Total 17473.968 ms" "Execution Time: 18005.457 ms"
排查更新2
将jit设置为false后,Linux端查询性能大幅提升。目前对JIT理解有限,无法解释为何它在PostgreSQL 14.4(Windows)和14.5(Linux)上的表现差异如此之大,已有同类异常案例被报道。
请求解释
请说明该现象的根本原因?
内容的提问来源于stack exchange,提问作者Filippo
相关产品推荐
相关产品推荐

