Estou enfrentando um tempo de espera muito alto no threadpool, existe uma maneira de descobrir qual é a causa disso? Atualmente, temos o SQL Server 2012 padrão em execução no Windows Server 2008, 16 CPU. O número de conexões é ~20k, 30k Solicitação por minuto. Preciso de mais CPU ou isso é um problema de aplicativo?
select COUNT(*) from sys.dm_os_workers
SELECT *
FROM sys.dm_os_wait_stats
WHERE wait_type = 'threadpool'
SELECT Count(* ) AS [UserSessions]
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
SELECT Count(* ) AS [SessionsOver60]
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
AND last_request_end_time < Dateadd(mi,-15,Getdate())
Gráfico de utilização da CPU por 24 horas
A primeira coisa que você deseja fazer é descobrir quais consultas estão consumindo a quantidade máxima de CPU. Isso ajudaria você a obter informações sobre se esse é um tipo específico ou tipos de consultas que estão gerando muitos encadeamentos paralelos do que o necessário. Ou se é realmente um problema de conexão/sessão simultânea. Se você tiver mais execuções simultâneas do que o número máximo de threads de trabalho, definitivamente precisará de mais CPUs. Mas se forem mais threads paralelos ou consultas em execução por mais tempo que estão mantendo os threads de trabalho ocupados, isso é um problema de ajuste de consulta SQL.