Estamos vendo os tempos limite de inscrição e, com a ajuda do Kit de primeiros socorros, capturei detalhes. Uma das coisas que me chamou a atenção foi:
Espera de envenenamento detectada: pool de threads
Então eu corri as consultas abaixo:
---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'
Quando executo a consulta "espera do pool de threads", as esperas do pool de threads aparecem no resultado acima (às vezes, mais de 20 resultados) por fração de segundo e desaparecem quando o executo novamente. Mas pude ver mais de 400 threads disponíveis no segundo conjunto de resultados por meio da consulta "threads disponíveis".
Não consigo entender por que estou vendo THREADPOOL
esperas quando executo a primeira consulta, mas a segunda consulta mostra que os segmentos ainda estão disponíveis. Alguém pode explicar por favor?
- Maxdop: 8
- Grau máximo de paralelismo: 50