使用GIN或GIST索引的查询不会同时运行

时间:2013-05-31 22:49:07

标签: postgresql

我注意到这个查询不会同时运行:

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

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

该表非常大,有32mil记录。服务器具有32个内核和230GB内存,使用pgtune设置。根据顶部没有iowait。

我单独使用了这些索引,结果相似:

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,这是永远的,所以我认为id post没有看看是否有人已经知道了什么。

1 个答案:

答案 0 :(得分:0)

我的第一个猜测是你的三个“并发”查询正在通过相同的连接和同一个后端。后端可以与彼此同时运行,但它们本身不能同时运行多个查询(它们是单线程的)。

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

如果这不正确,请编辑问题以准确包含您运行查询的方式。