症状
在安装 SQL Server 2014 Service Pack 1 (SP1)、SQL Server 2012 SP3 或 SQL Server 2016 后,在重新启动服务器之前,你将遇到较慢的查询性能和提升的特权(内核)模式的 CPU 使用率。 您还可以看到大量的 PAGELATCH_ * 等待。
解决方案
此问题已在 SQL Server 的以下累积更新中修复:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 我们建议你下载并安装 SQL Server 的最新累积更新:
原因
SQL Server 使用动态闩锁提升和降级逻辑(超锁和子闩锁)。 这通过跟踪闩锁的获取数量以及在没有闩锁争用时获取相同闩锁所需的时间来提高 SQL Server 性能和可伸缩性。 然后,根据此型号提升符合条件的闩锁(超级闩锁)。 当堆或 BTree (HoBT)上有许多更改(插入/更新/删除)时,HoBT 关联的闩锁可能会提升到超级闩锁状态。 但是,降级不会自动发生。 有关详细信息,请参阅 本文中的 "超级/子闩锁"。如果稍后取消分配这些 HoBTs,则已释放的 HoBT 将返回到全局缓存以便重复使用。 当重复使用该 HOBT 时,它将重复使用以前提升的闩锁,即使 HoBT 上没有争用也是如此。 这会增加 CPU 开销。 此行为会增加 SQL Server 的特权(内核)模式 CPU 使用情况,直到重新启动服务器。 此增加通常在每次执行时最多增加几微秒。 你还可能会看到大量 PAGELATCH_ * 等待,因为 HoBTs 上有这些扩展的超级闩锁。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。