症状
当您尝试同时在 Microsoft SQL Server 2014 中执行多个大型查询时,某些查询可能会等待 RESOURCE_SEMAPHORE_QUERY_COMPILE。 即使服务器有足够的可用内存,仅一个查询需要的内存超过大网关阈值(由 DBCC MEMORYSTATUS 命令的输出提供)才能继续。注意这是一种预期行为。 但是,在大型批处理系统(如数据仓库)中,这可能会在多个查询的并行执行中降级性能。
解决方案
累积更新信息
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 我们建议你下载并安装 SQL Server 的最新累积更新:
此修补程序引入了新的跟踪标志 T 6498。 当有足够的可用内存时,此跟踪标志可让多个大型查询编译获得对大网关的访问权限。 它基于 SQL Server 目标内存的80百分比,并且它允许每个较大的每个25千兆字节(GB)内存进行一次大型查询编译。 例如,这允许在 64 GB 目标内存计算机上使用两个较大的查询编译。 应用此修补程序后,必须启用跟踪标志-T 6498 以启用新行为。 注意如果使用 DBCC TRACEON 命令启用跟踪标记,则无需重新启动服务器即可使跟踪标记生效。 但要应用新的大网关配置可能需要10秒钟。 Microsoft 提供了一个受支持的修补程序。但是,此修补程序仅用于更正本文中所述的问题。仅对遇到此特定问题的系统应用此修补程序。 如果此修补程序可供下载,请参阅本知识库文章顶部的 "提供程序下载" 部分。如果未显示此部分,请向 Microsoft 客户服务和支持提交请求以获取修补程序。 注意 如果出现其他问题或需要进行任何故障排除,则可能必须创建单独的服务请求。对于此特定修补程序不具备的其他支持问题和问题,将照常收取支持费用。有关 Microsoft 客户服务和支持电话号码的完整列表,或者要创建单独的服务请求,请访问以下 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support 注意 "提供程序下载" 窗体显示可使用该修补程序的语言。 如果您看不到您的语言,这是因为该语言的修补程序不可用。
更多信息
原因SQL Server 使用编译网关来限制编译。 网关体系结构是一种使 SQL Server 能够在控制下编译传入查询的内存使用的方式。 有三个网关:小型、中型和大型。 有关如何使用 DBCC MEMORYSTATUS 命令监视内存使用情况的详细信息,请参阅 KB 907877:如何使用 dbcc MEMORYSTATUS 命令监视 SQL Server 2005 上的内存使用情况。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。