並列クエリ処理

SQL Server では、複数の CPU (マイクロプロセッサ) を搭載したコンピューターのクエリ実行およびインデックス操作を最適化するための並列クエリを使用できます。SQL Server はオペレーティング システムのスレッドを複数使用してクエリやインデックス操作を並列的に実行できるため、操作を短時間で効率的に完了できます。

SQL Server は、クエリを最適化する過程で、並列実行による効果が期待できるクエリやインデックス操作を検索します。次に、SQL Server は、そのようなクエリの実行プランに交換操作を挿入して並列実行用クエリを作成します。交換操作とは、プロセス管理、データの再配布、およびフロー制御を行うクエリ実行プラン内の操作です。交換操作は Distribute Streams 論理操作、Repartition Streams 論理操作、および Gather Streams 論理操作から構成されており、これらは並列クエリのプラン表示出力に含まれる可能性があります。

交換操作を挿入すると、並列クエリの実行プランになります。並列クエリの実行プランでは複数のスレッドを使用できます。並列でないクエリで使用する直列の実行プランの場合、実行時に使用するスレッドは 1 つのみです。並列クエリで実際に使用するスレッドの数は、クエリ プランを実行するための初期化の時点で、プランの複雑さと並列処理の次数に応じて決まります。並列処理の次数は、使用している CPU の最大数によって決まります (これは使用しているスレッドの数という意味ではありません)。並列処理の次数はサーバー レベルで設定され、sp_configure システム ストアド プロシージャで変更できます。クエリ ステートメントで MAXDOP クエリ ヒントを、またはインデックス ステートメントで MAXDOP インデックス オプションを指定することにより、この値を無効にすることができます。

次のいずれかの条件が満たされている場合、SQL Server のクエリ オプティマイザーは、クエリに対して並列実行プランを使用しません。

  • 代替策として並列実行プランの使用を考えるほど、クエリの直列実行コストが高くない。

  • 特定のクエリに対して可能な並列実行プランより、直列実行プランの方が速いと考えられる。

  • クエリに、並列では実行できないスカラー演算子または関係演算子が含まれる。演算子によっては、クエリ プランのセクションまたはプラン全体が直列モードで実行される場合があります。