【问题标题】:The query processor could not start the necessary thread resources for parallel query execution查询处理器无法启动并行查询执行所需的线程资源
【发布时间】:2011-12-08 23:58:00
【问题描述】:

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

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

查询处理器无法启动并行查询执行所需的线程资源。

我在每个查询中都使用“使用语句”,所以我想连接在使用后会被丢弃。

我如何监控造成这种情况的原因?这会在一段时间后开始发生,例如至少 1 小时后。

Windows 7 64 位 sp1 16 gb ram Visual Studio 2010 mssql 2008 r2 core i7 2600 @ 4.5 ghz

【问题讨论】:

  • 这是一个直接来自您的 SQL 服务器的错误,基本上意味着它的资源不足。要么你的服务器现在真的很忙,要么你在某个地方有内存泄漏。使用内存分析器查看是否可以检测到本机资源的内存泄漏

标签: c# multithreading resources processor


【解决方案1】:

在 dba.stackexchange.com 上有更多讨论和详细信息的更好答案。

https://dba.stackexchange.com/questions/47237/need-to-understand-parallel-query-execution-error

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      此错误来自构建执行计划,该计划试图并行化复杂查询。立即显示,查询不等待超时。简单的查询很有魅力。

      解决方案是通过将 Max degree of parallelism 设置为 1 来禁用它。我不确定此设置对性能的影响,但由于服务器上有许多并发查询,这应该不是问题。

      【讨论】:

      • 好建议。您可以将其添加为查询提示:SELECT ...FROM ... OPTION (MAXDOP 1);
      【解决方案4】:

      我有同样的问题,我试图创建索引,但我收到错误“查询处理器无法启动并行查询执行所需的线程资源”,我的 MAXDOP 设置为 64,我检查了数字我拥有的 CPU 数量 - 它们是 24,所以我将 MAXDOP 设置为 24 ,结果是相同的错误,但是当我将 MAXDOP 设置为 1 并执行查询时它起作用了,不确定副作用但我再次设置它回到 24,这等于处理器的数量。

      希望对你有帮助!!!!

      【讨论】:

        猜你喜欢
        • 2014-12-05
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        • 1970-01-01
        相关资源
        最近更新 更多