症状
假设你有多个统计和表,并且表包含 Microsoft SQL Server 2012 或 SQL Server 2014 数据库中的许多列。 当你执行许多特殊查询以从这些表中同时检索数据时,你可能会在执行期间遇到 CMEMTHREAD 等待。
解决方案
累积更新信息
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 我们建议你下载并安装 SQL Server 的最新累积更新:
更多信息
在 SQL Server 2012 中编译或重新编译查询时,引擎需要从统计信息直方图获取输入。 我们需要执行系统表扫描,然后加载在内存或缓存中涉及的表的特定直方图。 这些系统表项(对于统计信息)存储在系统表缓存(CACHESTORE_SYSTEMROWSET)中。 用于在缓存中创建这些条目的内存对象未分区,并且是全局的。 因此,如果你在执行此操作期间执行了并发内存分配,你将在此内存对象上遇到 CMEMTHREAD 等待。 当你提交需要编译或重新编译的大量查询时,通常会发生这种情况。 此修补程序更改全局内存对象进行分区,以便使用系统表缓存的并发内存分配不会遇到争用和 CMEMTHREAD 等待。有关类似问题的详细信息,请参阅 KB 3026082:修复 SOS_CACHESTORE:系统表行集缓存上的 spinlock 争用在 SQL Server 2012 或2014中导致 CPU 使用率较高。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。