0

このクエリが同時に実行されないことに気付きました:

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

1 つの同時クエリの実行には 120 秒かかります 2 つの同時クエリの実行には 240 秒かかります 3 つの同時クエリのクエリの実行には 360 秒かかります

テーブルは 32mil のレコードでかなり大きいです。サーバーには、pgtune 設定を使用して 32 コアと 230 GB のメモリがあります。topによると、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 を実行していますが、これには永遠に時間がかかります。

4

1 に答える 1

0

私の最初の推測では、3 つの「同時」クエリが同じ接続を介して同じバックエンドに送られているということです。バックエンドは互いに同時に実行できますが、複数のクエリを同時に実行することはできません (シングルスレッドです)。

私がこれを言うのは、PostgreSQL は同時実行性に関して非常に優れており、同じテーブルに対する多くの同時クエリは通常、互いのディスク I/O にピギーバックする可能性があるためです

これが正しくない場合は、質問を編集して、クエリの実行方法を正確に含めてください。

于 2013-09-16T14:27:27.240 に答える