标签: jit

如何判断 Postgres 是否是在构建时包含用于 JIT 的 LLVM 技术的选项?

Postgres 11 获得了基于LLVM技术执行即时编译 (JIT) 的能力

\n\n

手册指出,此功能取决于使用该选项构建的 Postgres --with-llvm

\n\n

\xe2\x9e\xa5 如何验证他们的 Postgres 版本是否包含 LLVM?

\n\n

假设安装了 LLVM\xe2\x80\xa6 在 Postgres 11 中,默认情况下禁用 JIT。在 Postgres 12 中,启用了该功能。这就提出了一个问题:

\n\n

\xe2\x9e\xa5 如何判断 JIT 当前是启用还是禁用?

\n

postgresql jit

8
推荐指数
1
解决办法
2090
查看次数

在 postgres 12 中使用 jit 处理性能问题

tl; dr:处理由 jit 引起的性能下降的最佳方法是什么?

背景

最近我从 postgres 11 迁移到 12 并注意到,一些查询/程序运行得相当慢。我做了一些研究并测试了不同的配置 - 结果表明 jit 开销超过了它的收益。我看到两种可能的解决方案:

  1. 通过运行set jit = off;一次永久禁用所有查询的 jit 。这有帮助,但感觉不自然。(也许是因为更改了默认配置,我没有做太多,因为没有这样的需要。默认值是理智的,需要更改的可能性很小。)这也意味着在运行长查询时放弃可能的性能提升.

  2. 在程序开始时禁用 jit 并在结束时启用它。我反对更改配置对并行运行的查询的影响。当然,这会损害日志查询的性能,这些查询会同时运行,但这可能会导致其他可能难以检测的错误。此外,这似乎比第一个解决方案更不正确 - 作为程序的一部分更改配置。

处理这个问题的最好方法是微调配置,这样 jit 就不会被完全丢弃,而且配置也不会在运行时改变。不幸的是,我发现几乎没有任何资源如何,这将是可能的(只有像参数jit_above_cost的文件,似乎是帮助不大)。

问题:解决此问题的最佳方法是什么?除了运行和测量之外,是否有关于何时禁用 jit 的任何标准?是否可以微调行为(例如,针对特定查询禁用 jit)?

编辑:我附上了一个没有jit的计划。计划太大了,不能在这里张贴。

postgresql postgresql-12 jit

6
推荐指数
1
解决办法
2132
查看次数

对大型数据库的查询终止与服务器的连接,与 LIMIT 一起使用

我正在尝试在大型数据库上运行查询而不终止与服务器的连接。

我在具有 16GB 内存和大约 40GB 可用磁盘空间的 Mac 上使用 Postgres 12.1。根据数据,数据库为 78GB pg_database_size,最大表为 20GB pg_total_relation_size

无论我运行哪个非工作查询,我(从日志中)得到的错误是:

server process (PID xxx) was terminated by signal 9: Killed: 9
Run Code Online (Sandbox Code Playgroud)

在 VS 代码中,错误是"lost connection to server".

两个不起作用的例子是:

UPDATE table
SET column = NULL
WHERE column = 0;
Run Code Online (Sandbox Code Playgroud)
select columnA
from table1
where columnA NOT IN (
select columnB
from table2
);
Run Code Online (Sandbox Code Playgroud)

我可以通过添加 1,000,000 个来运行某些查询(例如上面的查询)LIMIT

我怀疑由于临时文件而导致磁盘不足,但在日志(带有log_temp_files = 0)中,我看不到任何正在写入的临时文件。

我尝试增加和减少work_mem, maintenance_work_mem,shared_bufferstemp_buffers。没有一个起作用,性能大致相同。 …

postgresql mac-os-x kill connections jit

2
推荐指数
1
解决办法
6672
查看次数

标签 统计

jit ×3

postgresql ×3

connections ×1

kill ×1

mac-os-x ×1

postgresql-12 ×1