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
Observei que você pode ver muitas
THREADPOOL
esperas realmente breves (um punhado de milissegundos cada) enquanto o SQL Server está adquirindo threads do sistema operacional.Isso pode acontecer se, por exemplo, o SQL Server estiver ocioso por um tempo e, em seguida, várias consultas paralelas forem executadas de uma só vez. Essas consultas precisarão esperar enquanto o SO fornece threads para o processo sqlservr.exe, acumulando
THREADPOOL
esperas durante esse tempo.Você pode confirmar que isso está acontecendo observando o contador PerfMon "Process" -> "Thread Count". Geralmente, sempre que esse valor aumenta rapidamente, você pode ver essas
THREADPOOL
esperas.Há uma demonstração completa desse comportamento no meu blog ( Unusual THREADPOOL Waits ), aqui está o resumo:
Para ser claro, ficaria surpreso se essas esperas fossem a causa dos tempos limite do seu aplicativo.