SQL Server 2014 中超过 15000 个休眠会话

Sin*_*ngh 4 performance sql-server sql-server-2014 cpu performance-tuning

CPU 利用率会定期达到 100%,当我检查 SP_who2 时,它显示大约 20000 个会话,其中大多数都在睡眠(也在使用 CPU)。
我认为 CPU 负载与睡眠会话有关

应用程序名称显示为 Microsoft JDBC。

大多数会话都将“SOS_SCHEDULER_YIELD”显示为 last_wait_type。重新启动 Windows Server 后,CPU 利用率已下降,但会话计数正在增加。

服务器有 32 个内核。

应用程序团队告诉他们正在使用一些“连接池”进行连接管理。

如何调查或解决睡眠会话的数量?

Tom*_*m V 7

应用程序可能正在泄漏连接。我不知道他们是什么意思

应用程序团队告诉他们正在使用一些“连接池”进行连接管理。

但听起来他们正试图实现自己的连接池系统。

通常,连接泄漏发生在您有调用而 .open()没有调用 .close()同一个连接时。

由于这通常是客户端问题,我认为您可以从数据库端做的唯一一件事(不能每隔一段时间杀死它们,但我不建议这样做)是使用来自的信息sys.dm_exec_sessions来查找泄漏连接的应用程序然后与您的开发人员或供应商交谈,以便他们可以查找有问题的代码。

例如这个查询(取自这里

select count(*) as sessions,
     s.host_name,
     s.host_process_id,
     s.program_name,
     db_name(s.database_id) as database_name
from sys.dm_exec_sessions s
where is_user_process = 1
group by host_name, host_process_id, program_name, database_id
order by count(*) desc;
Run Code Online (Sandbox Code Playgroud)

将显示每个进程每个主机的连接数。这应该足以识别有问题的应用程序。

您还可以创建一个作业,记录此信息随着时间的推移,以确定连接是否真的一直在增加,这样您就可以向您的应用程序团队“证明”确实存在泄漏。