暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

查询处理器未能为执行并行查询启动必要的线程资源

原创 沙沃兴 2023-02-02
4392

问题:

最近有个应用经常出现卡死的情况,其他应用又正常,检查数据库的资源使用情况也没有异常。

检查应用程序的日志时发现下面的报错:

### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 查询处理器未能为执行并行查询启动必要的线程资源。

; uncategorized SQLException; SQL state [S0002]; error code [8642]; 查询处理器未能为执行并行查询启动必要的线程资源。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 查询处理器未能为执行并行查询启动必要的线程资源。] with root cause

com.microsoft.sqlserver.jdbc.SQLServerException: 查询处理器未能为执行并行查询启动必要的线程资源。


原因分析:

数据库并行度的阈值为默认的5,并行度为0(表示不限制)。服务器的CPU为16核,数据库分为4个NUMA,每个NUMA为4核。因为并行度未限制,执行某些语句并行度超过4时就会出现跨NUMA问题。当一个组运算好之后,如果第二个组的另外两个逻辑cpu还没有运算好,那么就需要等待B、又或者第二个组已经运算好,出结果了,但是由于线程切换,或者服务器忙不过来就可能出现问题。


解决方案:

1、把“并行的开销阈值”由原来的5调整为50,也就是语句的开销要更大才会出现并

行。

2、把“最大并行度”由原来的0调整为2,也就是并行的情况下只能使用2核CPU。


注:以上方案调整过后还在观察阶段。


https://blog.csdn.net/weixin_33922672/article/details/91823606

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论