gpt4 book ai didi

c# - SQL 连接池超时

转载 作者:太空狗 更新时间:2023-10-29 23:50:07 25 4
gpt4 key购买 nike

[免责声明]:我想我已经阅读了所有关于此的 stackoverflow 帖子

我已经为这个问题苦恼了很长一段时间。我在我的 asp.net web.api 中遇到以下异常。

Exception thrown: 'System.InvalidOperationException' in mscorlib.dll

Additional information: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

大多数人建议我应该在我的应用程序中查找泄漏的连接。这是我的代码。现在我确定我没有泄露任何连接

public async Task<IEnumerable<string>> Get()
{
var ds = new DataSet();
var constring = "Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;Max Pool Size=100";
var asyncConnectionString = new SqlConnectionStringBuilder(constring)
{
AsynchronousProcessing = true
}.ToString();


using (var con = new SqlConnection(asyncConnectionString))
using (var cmd = new SqlCommand("[dbo].[xxx]", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@x1", 1);
cmd.Parameters.AddWithValue("@x2", "something");

await con.OpenAsync();
using (var rdr =await cmd.ExecuteReaderAsync())
{
if (rdr.HasRows)
{
ds.Load(rdr, LoadOption.OverwriteChanges, "MyTable");
}
rdr.Close();
con.Close();
ds.Dispose();
}
}
//I know this looks wrong, just an empty api method to show the code
return new string[] { "value1", "value2" };
}

当我使用我的本地 Sql Server 时没有发生异常。只有当我连接到我们的“测试服务器”时才会发生。在尝试解决此问题时,还有什么我可以看的吗?比如Sql server设置/网络设置等

我调用的存储过程也没有锁定我检查过的数据库。如果是这种情况,它在我的本地 Sql 实例上也应该失败。

我正在使用 jmeter 生成负载,1500 - 线程(用户)。当然,我应该能够处理更多的事情。

提前致谢

最佳答案

您没有指定任何连接超时属性,因此默认为 15 秒。除非您没有合适的硬件资源,否则使用 Max Pool Size=100 并不是一个好主意。

您启动了 1500 个线程,所以看起来有些线程一直在等待 15 秒以获得打开连接的机会。随着时间的流逝,您会收到连接超时错误。

所以我认为增加连接字符串中的“连接超时”属性可能会解决您的问题。

关于c# - SQL 连接池超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com