現象
たとえば次のようなシナリオを考えてみます。
- クラスター化された列ストア インデックスを持つテーブルがあり、そのテーブルに多数の列 (数百) があります。
- これらの列のデータ (データ型) は、varchar などの圧縮性の高いデータです。
- このテーブルに対して SELECT ステートメントを実行して、このテーブルから大きなサブセットまたはすべての列を選択します。
- select ステートメントには、出力をごく少数の行に制限する WHERE 句があります (クエリの選択性が高くなります)。
この場合、次のいずれかまたはすべての現象が発生する可能性があります。
- 同時ワークロード (このクエリとして同時にサーバー上で実行される他のクエリ) では、パフォーマンスが低下し、スループットが低下する可能性があります。
- 断続的に CPU 使用率が高くなる場合があります。
- sys.dm_os_ring_buffersクエリを実行して SchedulerMonitor タイプのエントリを表示すると、このクエリの実行中に断続的な "非生成スケジューラ" メッセージがログに記録されます。
- エラー ログで非生成スケジューラ エラーを受け取り、現象としてメモリ ダンプ ファイルが生成される場合があります。
解決策
この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
推奨事項: SQL Server の最新の累積的な更新プログラムをインストールする
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムをダウンロードしてインストールすることをお勧めします。
追加情報
修正の詳細特定のしきい値の行数が出力されたときに、CPU 使用率を他のワーカー/同時クエリ実行に「生成」するために使用された列セグメントを処理 (列セグメントを解凍してスキャンして修飾する行を探す) ワーカー。 WHERE 句が少数の行を生成するように高度に選択されていた場合、このクエリを処理するワーカーは、他のワーカーがワークロードを処理するために協力的に CPU を放棄する前に、圧縮されていない大量のセグメントを処理しました (修飾される行は非常に少ないため)。 これにより、CPU 使用率が不規則になり、同時ワークロードのスループットが低下しました。 この修正プログラムは、このような列ストア クエリの CPU 共有アルゴリズムを最適化および改善します。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。