我们看到应用程序超时,在 First Responder Kit 的帮助下,我捕获了详细信息。引起我注意的一件事是:
检测到毒药等待:线程池
所以我运行了以下查询:
---get thread pool waits---thread pool wait query
SELECT count(*) FROM sys.dm_os_waiting_tasks
where wait_type ='threadpool'
-- get threads available--Threads available query
declare @max int
select @max = max_workers_count from sys.dm_os_sys_info
select
@max as 'TotalThreads',
sum(active_Workers_count) as 'CurrentThreads',
@max - sum(active_Workers_count) as 'AvailableThreads',
sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
sum(work_queue_count) as 'RequestWaitingForThreads' ,
sum(current_workers_count) as 'AssociatedWorkers',
Getdate() as 'DateLogged'
from
sys.dm_os_Schedulers where status='VISIBLE ONLINE'
当我运行“线程池等待”查询时,线程池等待出现在上述结果(有时,超过 20 个结果)中的几分之一秒,然后在我再次运行时消失。但我可以通过“可用线程”查询在第二个结果集中看到 400 多个可用线程。
我无法理解为什么我在THREADPOOL
运行第一个查询时看到等待,但第二个查询显示线程仍然可用。任何人都可以解释一下吗?
- 最大多普:8
- 最大并行度:50