在我发布这个问题之前,请阅读以下文章。
- 最大限度。工作线程以及何时应该更改它,作者 Sakthivel Chidambaram
- 我的实际工作线程是否超过了 sp_configure 'max worker threads' 的值?通过汤姆斯金格
- 如何测量 CPU 压力?托马斯达
- Slavao继续 SQLOS 的 DMV
我熟悉通过查看以下项目(不全面)来调查高线程数问题:
- Maxdop 设置
- 并行度设置的成本阈值
- CPU压力
- 工作队列长度
- 执行计划
在我决定做出改变之前,这项调查可能需要几个小时。我可以在短期内做什么,这样请求就不会等待分配工作线程?
我们使用 SCOM 来监控 SQL Server 的许多方面,这就是其中之一。我知道这更多是信息性消息,但始终来自同一服务器的查看使我们有机会查看我上面列出的内容。我想从社区中找出什么,如果他们采取某些行动(可能是暂时的,直到完成全面评估),work_queue_count
一旦 SCOM 触发警报,是否持续大于零。有时很容易检测到消耗大量线程但并非总是如此的单个查询。
[max workers] 的默认公式(等于或低于 64 个逻辑 CPU):16*(逻辑 CPU - 4)+ 512
如果您想提高 [max workers],这里有两个潜在的理由。如果由于保留的工作人员数量而发生 DOP 降级时 CPU 未饱和,则负面后果是有限的。YMMV。