线程池等待

seb*_*eid 5 sql-server

我在线程池上面临非常长的等待时间,有没有办法找出造成这种情况的原因?我们目前在 Windows Server 2008、16 CPU 上运行 SQL Server 2012 标准。连接数为 ~20k ,每分钟 30k 请求。我需要更多的 CPU 还是这是一个应用程序问题?

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())
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

24 小时的 CPU 利用率图

在此处输入图片说明

Ami*_*jee 4

您要做的第一件事是找出哪些查询消耗了最大的 CPU 量。这将帮助您获取有关这是否是特定类型或生成过多并行线程的查询类型的信息。或者如果它实际上是并发连接/会话问题。如果并发执行数超过最大工作线程数,那么您肯定需要更多 CPU。但是,如果更多的并行线程或运行时间更长的查询导致工作线程被占用,那么这就是 SQL 查询调优问题。