当您发出比可用 SQL 连接池更多的数据库请求时会发生什么?

问题描述 投票:0回答:1

据我所知,在 ASP.NET Core 中创建

SqlConnection
时,它们是从已经打开的此类连接池中获取的,因为打开单个连接的操作非常昂贵且昂贵,所以我们'重新有效地重用这些连接。

如果我们有 10 个连接池,但我们最终创建了 40 个连接并查询数据库——究竟会发生什么? 40 个连接是否会有效地通过某些 FIFO 基础上的 10 个可用连接池?如果池中的所有连接当前都在使用中,是否会创建新连接,类似于将新线程添加到线程池的方式?

这一切究竟是如何运作的?

我之所以有兴趣学习这个是为了衡量打开大量连接导致套接字耗尽的可能性,但首先我需要了解池的工作原理。

c# asp.net-core asynchronous .net-core ado.net
1个回答
0
投票

SQL Server 连接池

连接池通过以下方式满足连接请求 重新分配连接,因为它们被释放回池中。如果 已达到最大池大小并且没有可用的连接 可用,请求排队。然后 pooler 尝试回收任何 连接,直到达到超时(默认为 15 秒)。 如果 pooler 在连接时间之前不能满足请求 出,抛出异常。

还可以按如下方式设置连接超时,

"连接超时=30;连接生命周期=0;最小池大小=0;最大池大小=100;池化=true;"

© www.soinside.com 2019 - 2024. All rights reserved.