症状
默认情况下,Microsoft SQL Server 2016 和 2017 中为 tempdb 数据库启用间接检查点。 在繁重的工作负荷条件下,可能会出现“无收益计划程序”错误,并且 DMV sys.dm_os_spinlock_stats显示DP_LIST旋转锁类型的提升的旋转锁争用。
解决方法
此修补程序包含在以下更新和 Service Pack 中:
2016 SQL Server Service Pack 信息
关于SQL Server生成
SQL Server的每个新版本都包含上一版本中的所有修补程序和安全修补程序。 建议安装SQL Server的最新累积更新:
Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议为该服务包应用最新的 Service Pack 和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。
解决方法
若要解决此问题,请使用以下数据定义语言 (DDL) 语句之一关闭 tempdb 数据库的间接检查点。
应按如下所示完成此操作:
-
在 modeldb 数据库 (这也会更改新数据库) 的默认值,运行以下语句:
ALTER DATABASE [model] SET TARGET_RECOVERY_TIME = 0 MINUTES -
或者,在每次启动实例时直接在 tempdb 数据库上使用以下语句使用 SQL Server 代理:
ALTER DATABASE [tempdb] SET TARGET_RECOVERY_TIME = 0 MINUTES -
或者,使用以下语句定期针对 tempdb 数据库发出手动检查点:
use tempdb
go checkpoint
go
此外,TF 3468 还可用于在 tempdb 上禁用间接检查点。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于描述软件更新 的术语。 有关详细信息,请参阅以下文章: