症状
默认情况下,为 Microsoft SQL Server 2016 和 2017 中的 tempdb 数据库启用间接检查点。 在繁重工作负载条件下,可能会发生“非生成计划程序”错误,并且 sys.dm_os_spinlock_stats DMV 显示DP_LIST旋转锁类型的旋转锁争用升高。
解决方法
此修补程序包含在以下更新和 Service Pack 中:
- SQL Server 2017 累积更新 1
- SQL Server 2016 Service Pack 1 累积更新 5
- SQL Server 2016 累积更新 8
SQL Server 2016 的 Service Pack 信息
适用于 SQL Server 2016 的 Service Pack 2
关于 SQL Server 内部版本
SQL Server 的每个新内部版本都包含先前内部版本中的所有修补程序和安全修补程序。 我们建议您安装最新的 SQL Server 累积更新:
关于 SQL Server 的 Service Pack:
Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议应用最新的 Service Pack 和该 Service Pack 的最新累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。
如何确定 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
go
此外, TF 3468 可用于禁用 tempdb 上的间接检查点。
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。
参考资料
了解 Microsoft 用于描述软件更新的术语。 有关详细信息,请参阅以下文章: