症状
请考虑以下情况:
-
你有一个表,该表上有聚集列存储索引,并且该表有很多列(在成百上千中)。
-
这些列的数据(数据类型)是高度可压缩的数据,如varchar。
-
对此表运行 SELECT 语句以选择此表中的大子集或所有列。
-
Select语句有一个WHERE子句,该子句将其输出限制为非常少的行(查询非常有选择性)。
在这种情况下,你可能会遇到以下任何症状或所有以下症状:
-
并发工作负荷(在服务器上与此查询同时执行的其他查询)可能会降低性能和损失吞吐量。
-
你可能会看到 CPU 使用率间歇较长。
-
如果查询 sys.dm_os_ring_buffers和查看 SchedulerMonitor 类型条目,则会发现在执行此查询的过程中记录了间歇性的 "未生成计划程序" 消息。
-
你可能会在错误日志中收到未生成的计划程序错误,并且可能会生成一个故障内存转储文件。
解决方案
在以下 SQL Server 累积更新中首先修复此问题:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 我们建议你下载并安装 SQL Server 的最新累积更新:
更多信息
修复详细信息处理列段(将它们解压缩并针对符合条件的行进行扫描)的工作人员用于在输出特定阈值行时发生的其他工作人员/并发查询执行中使用 "产生" CPU 使用率。 当WHERE 子句非常选择性地生成几行时,处理此查询的工作人员处理此查询时处理了未压缩和大量的段(因为只有极少的行符合条件),然后才会使其他工作人员以协作方式处理其工作负荷。 这导致了 CPU 的不规则使用和并发工作负荷的吞吐量降级。 此修复优化并改进了此类列存储查询的 CPU 共享算法。
参考
了解 Microsoft 用于描述软件更新的 术语 。