查询处理器无法启动必要的线程资源以进行并行查询执行。

12

这是什么意思以及如何解决。

我正在运行多线程的 C# 应用程序,当访问数据库时发生了此错误。

查询处理器无法启动必要的线程资源以进行并行查询执行。

我在每个查询中使用“using语句”,所以我假设连接在使用后被处理掉了。

我该如何监视是什么导致了这个问题?这通常会在至少1小时后发生。

Windows 7 64位 sp1 16 GB RAM Visual Studio 2010 MSSQL 2008 R2 Core i7 2600 @ 4.5 GHz


1
这是直接来自你的SQL服务器的错误,基本上意味着它已经耗尽了资源。可能是你的服务器此时非常繁忙,或者你在某个地方存在内存泄漏。使用内存分析器来查看是否可以检测到本机资源的内存泄漏。 - Polity
4个回答

12

9

这个问题表明你的SQL服务器线程已经很忙,无法分配其他线程来处理你的请求。如果你正在执行多个批处理,你可以尝试在连接字符串中启用MARS(多活动结果集)选项,通过将其设置为“MultipleActiveResultSets=true”来实现。


1
这个错误是来自于构建执行计划,它试图并行处理复杂查询。它会立即显示,查询不会等待超时。简单的查询可以完美运行。
解决方案是通过将 最大并行度 设置为 1 来禁用它。我不确定该设置对性能的影响,但由于服务器上有许多并发查询,所以这不应该成为问题。

好建议。您可以将其作为查询提示添加:SELECT ... FROM ... OPTION (MAXDOP 1); - smoore4
将最大并行度从0设置为1对我很有效。 这是在具有低资源的测试机器上进行的。 在没有检查处理器数量并确定实际最佳数量的情况下,我不会在生产环境中更改此设置。 - Greg Gum

0

我曾经遇到过同样的问题,我试图创建索引,但是出现了错误:“查询处理器无法启动必要的线程资源以进行并行查询执行”,我的MAXDOP设置为64,我检查了我的CPU数量-它们有24个,所以我将MAXDOP设置为24,结果仍然是相同的错误。但是当我将MAXDOP设置为1并执行查询时,它可以工作。不确定副作用,但我将其设置回与处理器数量相等的24。

希望这可以帮助你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接