使用 SPI 的 PostgreSQL 并行查询可能吗?

Posted

技术标签:

【中文标题】使用 SPI 的 PostgreSQL 并行查询可能吗?【英文标题】:PostgreSQL parallel queries using SPI possible? 【发布时间】:2020-02-18 12:05:07 【问题描述】:

我正在使用 PostgreSQL 的 Server Programming Interface (SPI) 来构建我的 postgres 扩展并执行我的查询。请看this详细示例,或以下简单代码示例:

int ret = SPI_exec("SELECT * FROM ....", 0);

我们知道 PostgreSQL 具有并行查询支持功能,其中一个查询是使用多个处理器并行执行的。由于 SPI 接口隐藏了相当多的复杂性(通信/锁/光标/等),我想知道以这种方式执行查询是否会以某种方式限制此并行查询功能?显然,如果它确实构成了限制,那么它可能不值得使用。

【问题讨论】:

【参考方案1】:

您的示例中的具体用法不会抑制并行性,这可以通过运行SELECT execq('select count(*) from pgbench_accounts', 0); 并通过 auto_explain 观察计划来看出。 (我跑了pgbench -i -s20,所以有 2e6 行)。

其他 SPI 方法,如那些涉及游标的方法,将禁止并行化。

【讨论】:

以上是关于使用 SPI 的 PostgreSQL 并行查询可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL CTE 的一般并行性

如何在 Python3.7 docker 容器中执行并行 PostgreSQL 查询?

PostgreSQL:如何在函数中并行运行查询?

了解 PostgreSQL 并行查询的会话中工作池中剩余多少并行工作人员?

PostgreSQL并行查询相关配置参数

postgresql9.6安装