並列検索を使用するための条件を説明します。
並列検索を使用することができるSQL文
一般的なSELECT文のほかに、以下のSQL文でも並列検索を使用することができます。ただし、“並列検索を使用できない条件”に該当する場合には、並列検索を使用することができません。
SELECT INTO ~
INSERT INTO ~ SELECT ~
CREATE TABLE AS SELECT ~
COPY SELECT ~ TO ~
外部テーブルを指定している
一時テーブルを指定している
テーブルがTOASTテーブルを保持している
TOASTテーブルを保持しているかどうかは、以下のSQL文を実行することで確認できます。
select reltoastrelid as oid_of_toast_table from pg_catalog.pg_class where relname='テーブル名';
出力されるTOASTテーブルのOIDが0の場合、このテーブルはTOASTテーブルを保持していません。その他の値が出力された場合、このテーブルは、その値のOIDのTOASTテーブルを保持しています。
副問合せを指定している
WITH OIDS句で定義したテーブルを指定している
LIMIT句を指定している
ロック処理句(FOR UPDATEなど)を指定している
並列処理で許可されている関数以外を指定している
関数については、“12.3 利用可能な関数の確認方法”を参照してください
実行時の動作条件
以下のいずれかに該当した場合には、システムが性能面で効果が得られないと判断して、並列検索をスケジュールしません。並列検索が動作したかどうかの確認方法、また動作しない場合の対処方法は、“12.2.2 開発”の“2.効果の確認”で確認することができます。
テーブルの全件検索(シーケンシャルスキャン)ではない
処理対象のテーブルがパラメータ“parallel_scan_pages_threshold”の値(1,310,720ページ(10ギガバイト))より小さい場合
SQL文のコスト評価により、通常のシーケンシャルスキャンに対して25%より低い効果が予測された場合
サーバ上に利用可能なCPUが割り当てられないと判断した場合
パラメータによる動作制限がある場合
ただし、上記の条件については、チューニングにより変更可能な条件があります。詳細は“運用ガイド”の“パラメータ”を参照してください。