使用GIN或GIST索引的查询不能并发运行



我注意到这个查询不能并发运行:

SELECT COUNT(*) FROM mytable WHERE ARRAY[1,2]::integer[] && array_col::integer[];

运行一个并发查询需要120秒运行两个并发查询需要240秒运行三个并发查询查询需要360秒

这个表非常大,有3200万条记录。使用pgtune设置,服务器有32个内核和230GB内存。根据top,没有等待

我分别使用了这些索引,得到了类似的结果:

CREATE INDEX mytable_gist ON mytable USING GIST(array_col gist__intbig_ops);
CREATE INDEX mytable_gin ON mytable USING GIN(array_col gin__int_ops);

我现在正在运行EXPLAIN ANALYZE,这是永远的,所以我想我张贴没有看看是否有人已经知道了。

我的第一个猜测是,您的三个"并发"查询是通过相同的连接并到相同的后端。后端可以并发地运行,但它们自己不能并发地运行多个查询(它们是单线程的)。

我这么说是因为PostgreSQL的并发性非常好,在同一个表上的许多并发查询通常可以占用彼此的磁盘I/O,所以如果这些查询真的在不同的后端上串行运行,对我来说是没有意义的。

如果这是不正确的,请编辑问题,包括你是如何运行查询的

最新更新