0

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

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

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

这张表相当大,有 3200 万条记录。该服务器具有 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 没有看看是否有人已经知道发生了什么。

4

1 回答 1

0

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

我这么说是因为 PostgreSQL 在并发方面非常好,而且同一张表上的许多并发查询通常可以捎带彼此的磁盘 I/O,所以如果这些真的在不同的后端连续运行,对我来说毫无意义。

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

于 2013-09-16T14:27:27.240 回答