修复: 特殊 SQL Server 计划高速缓存上的 SOS_CACHESTORE 自旋锁争用将导致在 SQL Server 2012年或 2014 CPU 使用率过高

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3026083
症状
当太多并发插入发生在相同的哈希存储桶或特殊 SQL Server 计划高速缓存命中的 160,036 项极限时,SOS_CACHESTORE 自旋锁在严重的争用现象发生。在此情况下 CPU 使用率过高出现在 Microsoft SQL Server 2012年或 SQL Server 2014年。
原因
该问题发生的原因当 SQL Server 计划高速缓存命中项限制计划与低成本必须被逐出来插入新的计划。这将导致大量争夺 SOS_CACHESTORE 自旋锁提供 SQL Server 计划高速缓存哈希表存储桶的同步。
解决方案

累积更新信息

第一次修复该问题的SQL Server累积更新包

有关累积更新 SQL Server

SQL Server 的每个新累积更新包含所有修补程序和所有安全修复程序是附带在以前的累积更新。对于 SQL Server 检查出最新的累积更新:
更多信息
计划高速缓存有两个限制、 总大小和总数的所有计划。在白皮书中介绍的大小和输入计数限制 计划高速缓存的内部机制.计划高速缓存可以容纳的最大项数的存储桶数是四倍。您可以通过使用以下查询来验证此信息:
select name, type, buckets_count from sys.dm_os_memory_cache_hash_tableswhere name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' ) select name, type, pages_kb, entries_count from sys.dm_os_memory_cache_counterswhere name IN ( 'SQL Plans' , 'Object Plans' ,  'Bound Trees' )
如在 64 位系统上的 SQL Server 计划高速缓存的存储桶是 40,009。因此在 SQL Server 计划高速缓存可以容纳的最大项数为 160,036。当使用不同的特殊查询工作负荷时此限制可能成为瓶颈。在这些情况下您可以使用此修补程序中更改。在您安装此修补程序并启用更改后使用启动跟踪标志-T 174、 增加到 160,001 在 64 位系统上的存储桶数。因此现在计划高速缓存可以容纳 640,004 计划的最大数目。
状态
Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。

警告:本文已自动翻译

属性

文章 ID:3026083 - 上次审阅时间:06/22/2015 15:33:00 - 修订版本: 4.0

Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Web, Microsoft SQL Server 2014 Service Pack 1

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB3026083 KbMtzh
反馈