SQL Server 中的休眠连接需要多少资源?

Ale*_*xei 3 performance sql-server connections sql-server-2017

我们的一位 DBA 向我们的团队抱怨说,他注意到大约有十几个睡眠连接实际上是永久性的。它们中的每一个都表示一个非常短的查询(单个记录中的单个记录通过其集群 PK 过滤返回)。

我的假设是,原因是 ADO.NET 连接池的使用以及经常进行相同查询的应用程序。

我试图找出这些睡眠连接是否会对 SQL Server 性能产生有意义的影响。默认情况下,ADO.NET 连接池的连接数限制为 100 个,因此我的假设是十几个休眠连接应该可以忽略不计。

我只能在这个线程中找到信息:

每次睡眠的最低成本约为 32kb RAM - 非常非常适中!

CPU 开销可能会产生一些微小的额外成本,但即使对于 10,000 个会话,也几乎无法检测到。

在会话/连接开销方面,SQL Server 表现得非常好!

这些信息准确吗?

Sea*_*ser 5

我试图找出这些睡眠连接是否会对 SQL Server 性能产生有意义的影响。

一般来说,如果这里的“性能”一词仅用于讨论执行查询,并且假设这些休眠连接都没有持有任何锁或打开的事务,那么可以相当安全地假设不会对性能产生任何有意义的影响(这也假设实例上没有内存压力,无论是内部还是外部)。

这些连接的一个常见问题是,某些连接持有打开的事务或锁,由于大多数管理员只寻找执行查询,因此有时很难找到这些连接。这可能会产生以下影响:阻止事务日志的截断(导致日志增长,从而影响性能)、阻止其他查询,以及对缓存造成内部内存压力,我相信我们都同意这会影响性能。

在不考虑 10,000 个休眠连接所带来的所有细节的情况下,与服务器的连接数限制为 32k。如果有超过 10,000 个休眠连接,那么连接耗尽可能会成为一个实际问题。不幸的是,这并不像您想象的那么牵强,因为我曾多次帮助解决这个问题。