現象
Microsoft SQL Server 2012 または Microsoft SQL Sever 2014 で空間データ型と関連付けられたメソッドを使用する場合、SQL server オペレーティングシステム (SQLOS) スケジューラのクォンタムターゲットは、SQL Server CLR ホスティングレイヤーによって保護されます。 この保護には、プリエンプティブな SQLOS スイッチが含まれているため、CPU 消費量が増加する可能性があります。 プリエンプティブなスイッチの理由は、SQLOS scheduler を保護することです。 SQL Server CLR ベースの実装への呼び出しでは、SQLOS scheduler によって、または動作と同時実行のパターンを変更することなく、一定の時間がかかることがあります。 そのため、空間データ型は、呼び出し時にプリエンプティブに切り替えるように設計されています。 注: 空間データ型は SQL Server CLR に基づくものであり、.NET メモリ消費量とスレッド切り替え動作のさまざまなレベルが発生する可能性があります。
原因
空間的データ型のメソッドの実行は、通常、サブミリ秒であり、完全な SQL OS スケジューラとプリエンプティブな保護を必要としない可能性があります。 プリエンプティブモードとの切り替えのオーバーヘッドは、空間メソッド自体を実行するよりも大きくなる可能性があります。
解決方法
この修正プログラムは、空間データ型でプリエンプティブな保護を回避する必要がある SQLOS ホスティングレイヤーを示すトレースフラグ6531を紹介しています。 これにより、CPU の消費量を減らし、空間のアクティビティの全体的なパフォーマンスを向上させることができます。 このトレースフラグは、個別の (1 行と複数列の) 空間メソッドの呼び出しが最大4ms 未満の場合にのみ使用します。 プリエンプティブ保護のないより長い呼び出しは、スケジューラの同時実行の問題や SQLCLR punishment メッセージをエラーログに記録する可能性があります。この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 2012 SP2 の累積更新プログラム4 /en-us/help/3007556
SQL Server 2014 の累積更新プログラム5 /en-us/help/3011055
SQL Server 2012 SP1 の累積更新プログラム13 /en-us/help/3002044
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。