我注意到这个查询不会同时运行:
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没有看看是否有人已经知道了什么。
答案 0 :(得分:0)
我的第一个猜测是你的三个“并发”查询正在通过相同的连接和同一个后端。后端可以与彼此同时运行,但它们本身不能同时运行多个查询(它们是单线程的)。
我之所以这么说是因为PostgreSQL在并发性方面非常好,并且同一个表上的许多并发查询通常可以捎带在彼此的磁盘I / O上,所以如果它们真的是串行运行的话对我没有意义不同的后端。
如果这不正确,请编辑问题以准确包含您运行查询的方式。