首页 新闻 会员 周边 捐助

.NET Core 中从数据库连接池中获取连接超时问题

0
悬赏园豆:50 [已解决问题] 解决于 2020-01-23 09:47

错误日志如下

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

请问如何解决这个问题?

dudu的主页 dudu | 高人七级 | 园豆:30948
提问于:2019-09-26 15:23
< >
分享
最佳答案
0

最近我也遇到这个问题了.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后,性能表现 稳定性之类的

收获园豆:50
MayBreath | 菜鸟二级 |园豆:337 | 2020-01-23 01:17

问题应该是 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.

dudu | 园豆:30948 (高人七级) | 2020-01-23 09:55

我们使用到 .NET Core 到目前未发现性能与稳定性问题。

dudu | 园豆:30948 (高人七级) | 2020-01-23 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册