並列クエリについて(%PARALLEL)
クエリパフォーマンスを最適化するための方法の一つとして、クエリ単位またはシステム全体でクエリの並列処理を使用することができます(標準機能)。
こちらは、特定のクエリに対しマルチプロセッサシステムでクエリの実行をプロセッサ間で分割して行うものです。
並列処理の効果が得られる可能性がある場合のみ、クエリオプティマイザは並列処理を実行します。
並列処理の対象はSELECT文のみとなります。
なお、並列プロセスの数は、CPUの数に応じて自動で調整するため、数の指定は行えません。
現在のシステムのプロセッサ数は以下のコマンドで確認することができます。
USER>write $SYSTEM.Util.NumberOfCPUs()
8
以前は、クエリに %PARALLEL キーワードを付与することで並列処理が有効となっておりましたが、IRIS2019.1以降のバージョンより既定で「常時有効」となりました。
管理ポータル:
システム管理 > 構成 > SQLとオブジェクトの設定 > SQL
単一プロセス内でクエリを実行
※チェックを入れると並列処理は行わない(既定はチェックなし)
クエリ単位で並列処理を行わないようにする場合は、%NOPARALLEL キーワードを指定します。
例:
SELECT * FROM %NOPARALLEL Sample.Person WHERE ...
【注意】
%PARALLEL を指定すると、クエリによってはパフォーマンスが低下する可能性があります。
たとえば、複数の同時ユーザがいるシステム上で %PARALLEL を指定してクエリを実行すると、全体的なパフォーマンスが低下する場合があります。
その場合は、%NOPARALLELで個別に並列処理を行わないようにするか、システム全体で「単一プロセス内でクエリを実行」するように設定します。
詳細は以下のドキュメントをご覧ください。
クエリの並列処理