问题:
最近有个应用经常出现卡死的情况,其他应用又正常,检查数据库的资源使用情况也没有异常。
检查应用程序的日志时发现下面的报错:
### 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




