症状
在 Microsoft SQL Server 2012 或 Microsoft SQL Server 2014 中使用空间数据类型和关联的方法时,SQL Server 操作系统(SQLOS)计划程序的量程目标受 SQL Server CLR 托管层保护。 此保护涉及抢先式,SQLOS 开关可能会增加 CPU 占用。 抢先切换的原因是保护 SQLOS 计划程序。 对基于 SQL Server CLR 的实现的调用可以无指定的时间,而无需生成 SQLOS 计划程序或更改行为和并发模式。 因此,空间数据类型设计为在每次调用期间切换抢先。 注意 空间数据类型基于 SQL Server CLR,它可能会遇到各种级别的 .NET 内存占用和线程切换行为。
原因
空间数据类型方法的执行通常是 sub 毫秒,可能不需要完整的 SQL 操作系统计划程序和抢先式保护。 切换到抢先模式和从抢先模式切换的开销可能比空间方法本身的执行更大。
解决方案
此修补程序引入了跟踪标记6531以向 SQLOS 托管层指示空间数据类型应避免抢先式保护的托管层。 这可以减少 CPU 消耗并提高空间活动的整体性能。 仅当个人、空间方法调用(每行和列)不超过 ~ 4ms 时,才使用此跟踪标志。 没有抢先式保护的更长的调用可能会导致计划程序并发问题以及记录到错误日志的 SQLCLR punishment 消息。在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 2012 SP2 的累积更新4 /en-us/help/3007556
SQL Server 2014 累积更新5 /en-us/help/3011055
SQL Server 2012 SP1 的累积更新13 /en-us/help/3002044
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。