一个PostgreSQL查询可以使用多个内核吗?


56

在最新版本的PostgreSQL(截至2013年12月)中,我们可以在两个或多个内核之间共享查询以提高性能吗?还是我们应该获得更快的内核?

Answers:


48

否,适用于v9.6之前的PostgreSQL版本。请参阅PostgreSQL FAQPostgreSQL如何使用CPU资源?

PostgreSQL服务器是基于进程的(非线程)。每个数据库会话连接到单一的PostgreSQL操作系统(OS)的过程。操作系统会自动将多个会话分布在所有可用CPU上。该操作系统还使用CPU处理磁盘I / O并运行其他非数据库任务。客户端应用程序可以使用线程,每个线程都连接到单独的数据库进程。

由于9.6版本,部分某些查询可以并行运行,在单独的操作系统进程,允许使用多个CPU内核的。默认情况下,版本10(max_parallel_workers_per_gather)中启用了并行查询,并且在将来的发行版中还期望其他并行性。




3

否。每个连接都会在服务器上生成一个单独的进程。

您可以使用线程过程语言(如pljava)“模拟”某些并行性。创建一个可启动多个线程并使用多个工作程序创建输出结果的java过程(函数)。后端已同步,因此每个工作人员都可以异步更新输出。

Java对线程协调/合作提供了良好的支持。

作为示例,这对于CPU密集型操作或网络长度操作将非常有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.