SQL Server中THREADPOOL和IO相关等待类型解析
1. THREADPOOL等待类型概述
当系统中出现THREADPOOL等待,且等待时间远超正常水平,同时SQL Server几乎无响应时,很可能遭遇了线程池饥饿问题。线程池饥饿是指没有可用的空闲工作线程来处理请求,此时等待分配工作线程的任务会记录为THREADPOOL等待类型。
SQL Server为调度程序提供一定数量的工作线程来处理请求,可用工作线程的数量取决于处理器数量和处理器架构。以下是不同架构和CPU数量对应的最大工作线程数:
| CPU数量 | 32位架构 | 64位架构 |
| ---- | ---- | ---- |
| <= 4 | 256 | 512 |
| 8 | 288 | 576 |
| 16 | 352 | 704 |
| 32 | 480 | 960 |
| 64 | 736 | 1472 |
也可以使用以下公式计算最大工作线程数:
- 32位系统,逻辑处理器数量小于等于4:256个工作线程
- 32位系统,逻辑处理器数量大于4:256 + ((逻辑处理器数量 - 4) * 8)
- 64位系统,逻辑处理器数量小于等于4:512个工作线程
- 64位系统,逻辑处理器数量大于4:512 + ((逻辑处理器数量 - 4) * 16)
默认情况下,SQL Server会自动计算最大可用工作线程数,也可以通过更改SQL Server实例的处理器属性中的“最大工作线程数”选项来覆盖默认值。默认该选项值为0,表示SQL Server将使用上述公式计算并分配最大工