現象
既定では、2016 年と 2017 年Microsoft SQL Server tempdb データベースの間接チェックポイントが有効になっています。 負荷の高い条件下では、"非利回りスケジューラ" エラーが発生する可能性があり、sys.dm_os_spinlock_stats DMV では、DP_LISTスピンロックの種類に対するスピンロック競合が高く表示されます。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
解決方法
この問題は、次のSQL Serverの累積的な更新プログラムで修正されています。
SQL Serverの累積的な更新プログラムについて:
SQL Serverの各新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。
回避策
この問題を回避するには、次のいずれかのデータ定義言語 (DDL) ステートメントを使用して、tempdb データベースの間接チェックポイントを無効にします。
これは次のように行う必要があります。
-
modeldb データベースで (新しいデータベースの既定値も変更されます)、次のステートメント
を実行します:ALTER DATABASE [model] SET TARGET_RECOVERY_TIME = 0 MINUTES -
または、次のステートメント
を使用してSQL Server エージェントを使用してインスタンスが起動するたびに、tempdb データベースに直接ALTER DATABASE [tempdb] SET TARGET_RECOVERY_TIME = 0 MINUTES -
または、次のステートメント
を使用して tempdb データベースに対して手動チェックポイントを定期的に発行します。use tempdb
go checkpoint#x2
さらに、TF 3468 を使用して tempdb の間接チェックポイントを無効にすることができます。
参考資料
Microsoft がソフトウェア更新プログラムの説明に使用する用語について説明します。 更なる詳しい情報は以下の文献を参照してください: