クエリは、クエリが処理するロー数が、返されるロー数よりも多い場合に並列処理が使用される確率が高くなります。この場合、処理されるロー数には、スキャンされるすべてのローのサイズとすべての中間結果のサイズが含まれます。インデックスを使用してテーブルのほとんどがスキップされるので、スキャンされないローは含まれません。理想的なケースは、大きなテーブルに対する単一ローの GROUP BY で、この場合、多数のローがスキャンされ、1 つのローだけが返されます。グループのサイズが大きい場合は、複数グループのクエリも並列処理の確率が高くなります。多数のローを削除する述部またはジョイン条件も高い確率で並列処理されます。
最適化または実行のときにクエリに並列処理が使用されない場合のリストを次に示します。
サーバのコンピュータに複数のプロセッサがない。
サーバのコンピュータに、複数のプロセッサを使用するためのライセンスがない。これは、NumLogicalProcessorsUsed サーバ・プロパティで確認できます。ただし、ハイパースレッドのプロセッサはクエリ内並列処理対象として数えられないので、コンピュータでハイパースレッドを使用している場合は、NumLogicalProcessorsUsed の値を 2 で割ります。
max_query_tasks オプションが 1 に設定されている。
priority オプションが background に設定されている。
クエリを含む文が SELECT 文ではない。
最近、ActiveReq の値が NumLogicalProcessorsUsed の値以上になったことがある (コンピュータでハイパースレッドを使用している場合はプロセッサ数を 2 で割る)。
使用可能なタスク数が不十分である。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |