現象
SQL Server 2014 Service Pack 1 (SP1)、SQL Server 2012 SP3、または SQL Server 2016 をインストールした後、サーバーが再起動されるまで、クエリパフォーマンスが遅くなり、高い特権 (カーネル) モード CPU 使用率が発生します。 また、大量の PAGELATCH_ * の待機時間も表示されることがあります。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで修正されました。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムをダウンロードしてインストールすることをお勧めします。
原因
SQL Server では、動的なラッチプロモーションと降格ロジック (super/sub ラッチ) が使用されます。 これにより、ラッチ上の取得回数と、ラッチの競合が存在しない場合に同じラッチを取得するのにどれだけの時間がかかるかを追跡して、SQL Server のパフォーマンスとスケーラビリティが向上します。 次に、このモデルに基づいて適格なラッチが昇格されます (スーパーラッチ)。 ヒープまたは B-tree (HoBT) で多くの変更 (挿入/更新/削除) が発生した場合、HoBT に関連付けられたラッチは、スーパーラッチの状態に昇格されることがあります。 ただし、降格は自動的には実行されません。 スーパー・ラッチの詳細については、 この記事を参照してください。これらの HoBTs を後で解放すると、解放された HoBT は再利用のためにグローバルキャッシュに戻ります。 HOBT が再利用されると、HoBT に競合がない場合でも、以前に昇格したラッチが再利用されます。 これにより CPU のオーバーヘッドが増加します。 この動作により、サーバーが再起動されるまで、SQL Server の特権 (カーネル) モードの CPU 使用量が増加します。 通常、この増加によって、実行されるたびに数ミリ秒が追加されることはありません。 また、HoBTs の拡張されたスーパーラッチのために、大量の PAGELATCH_ * の待機時間も表示されることがあります。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。