Jim*_*Bob 3 postgresql cte parallelism
这里和这里似乎表明它们是,但我也被告知(源无法定位)多行单语句插入只会使用一个线程进行所有写入,要多线程化,查询应该被分解并发送到与核心数量一样多的连接。
该文件指出,热膨胀系数执行“同时”,但没有效果,用来“热膨胀系数将使用所有可用内核来处理任何并行子报表和/或主查询”链接说明确。
CTE 是否总是将所有可用内核用于任何并行任务?如果是这样,除了可以合理地假设与 链接之外,还有什么警告RETURNING
吗?
Postgres 当前在执行单个查询时不使用并行性。整个执行引擎对于每个查询都是单线程的(您当然仍然可以并行执行多个查询)。这种缺乏“查询内并行性”是运行 Postgres 或 MySQL 的一大缺点。基本上,它使这些引擎不适用于大型数据集。
要获得多线程 Postgres 执行,您需要自己将查询拆分为多个查询,或者运行与 Postgres 兼容的变体,如 Amazon Redshift 或 Greenplum(前者已将内部查询并行性添加到代码库中,后者为你)。
每当您觉得需要运行并行查询时,首先问问自己:我是否可以添加索引以使其在没有并行性的情况下足够快?如果答案是“是”,请首先选择该选项。但很多时候,你需要蛮力。说到蛮力,很遗憾,普通的 Postgres 并不是一个特别好的数据库引擎。