現象
バッチモードの並べ替えは、互換性レベル130の SQL Server 2016 で導入されました。 クエリの実行プランに、直接上流の並列演算子と組み合わせて、並列バッチモードが含まれている場合、行モードの並べ替えプランに相当するパフォーマンスの低下が発生する可能性があります。
これは、並列バッチ並べ替えによって、1つのスレッド (並列マージ結合演算子など) に単一のスレッド経由で完全に並べ替えられたデータを出力するために発生します。 パフォーマンスの低下は、単一スレッド化された着信のバッチモードの並べ替え演算子によって、上流の並列演算子でシングルスレッド処理が使用されている場合に発生します。
この更新プログラムでは、トレースフラグ9358が導入され、マージ結合、入れ子になったループ、ストリーム集計など、 ほとんど の並列演算子でバッチモードの並べ替え操作が無効になります。 例外は、並べ替えの上にあるバッチモードの windows アグリゲーション演算子であり、windows の集計演算子は、バッチ並べ替えデータの読み取りに最適化されているため、バッチモードの並べ替え操作は引き続き許可されています。
注: 次のいずれかの条件に該当する場合、バッチモードの並べ替え操作も無効になります。
-
トレースフラグ4199が有効になっています。
-
[QUERY_OPTIMIZER_HOTFIXES データベース] オプションが有効になっています (SQL Server 2016 CU6 以降)。
-
ENABLE_QUERY_OPTIMIZER_HOTFIXES クエリヒント (SQL Server 2016 Service Pack 1 (SP1) CU4) が使用されます。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムをダウンロードしてインストールすることをお勧めします。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語 について説明します。