不,对于 v9.6 之前的 PostgreSQL 版本。请参阅PostgreSQL 常见问题解答:PostgreSQL 如何使用 CPU 资源?
PostgreSQL 服务器是基于进程的(不是线程的)。每个数据库会话连接到单个PostgreSQL 操作系统 (OS)进程。多个会话由操作系统自动分布在所有可用的 CPU 上。操作系统还使用 CPU 来处理磁盘 I/O 并运行其他非数据库任务。客户端应用程序可以使用线程,每个线程都连接到一个单独的数据库进程。
从 9.6 版开始,部分查询可以在单独的操作系统进程中并行运行,从而允许使用多个 CPU 内核。在版本 10 (max_parallel_workers_per_gather) 中默认启用并行查询,预计在未来的版本中会增加并行度。
不,对于 v9.6 之前的 PostgreSQL 版本。请参阅PostgreSQL 常见问题解答:PostgreSQL 如何使用 CPU 资源?
从PostgreSQL 9.6+开始,将开始看到 Parallel-Query 最终进入 PostgreSQL。
例如,Parallel Scan / Parallel Join / Parallel Aggregates等概念现在已经融入其中,未来还会有更多。
真正令人兴奋的是,在某些情况下有报道证实,这非常令人印象深刻!
near-linear speed-up
不,但有一个解决方法。:)
我找到了 parsel (parallel select) PL/pgSQL function,它根据主键拆分查询,然后通过 dblink 扩展连接到数据库并等待所有子查询。
作者还写了一篇关于这个功能的文章。
不,每个连接都会在服务器上产生一个单独的进程。
您可以使用 pljava 之类的线程过程语言“模拟”一些并行性。创建一个启动多个线程并使用多个工作线程创建输出结果的 java 过程(函数)。后端是同步的,因此每个工作人员都可以异步更新输出。
Java对线程协调/协作有很好的支持。
例如,这对于 CPU 密集型操作或网络长度操作来说是很好的。