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