错误日志如下
System.InvalidOperationException: 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.
at System.Data.Common.ADP.ExceptionWithStackTrace(Exception e)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync(Boolean errorsExpected, CancellationToken cancellationToken)
.NET Core 版本是 .NET Core 3.0.0-preview9-19423-09 。
System.Data.SqlClient 版本是 4.6 。
github 上相关 issue :Connections from the pool are not reused when using async methods in parallel
请问如何解决这个问题?
最近我也遇到这个问题了.NET CORE 3.1
问题是这个之前dudu不是已经解决了吗
https://www.cnblogs.com/dudu/p/10398225.html
我在github上找到的是这个
https://github.com/dotnet/efcore/issues/16137
他自己解决了这个问题。。直接在字符串添加
"Pooling=true;Max Pool Size=100;"
半年过去了,dudu这个问题解决了吗?最近博客园也没有去年升级后的运行报告了。。希望能更新一下,比如升级Linux .NET CORE后,性能表现 稳定性之类的
问题应该是 System.Data.SqlClient 4.6 的一个 bug 引起的。
相关博问 .net core 3.1 数据库访问报错,线程池不足:
是sqlclient的原因,sqlclient 4.7以下版本在linux环境下,高并发下线程池只会创建十几个线程,后面直接卡死,报线程池不足不可以,换高版本后,可以解决
github issue 中的回复:
System.Data.SqlClient v4.7.0 contains fix for this issue.
我们使用到 .NET Core 到目前未发现性能与稳定性问题。