超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

嗯~今天在测试153上发布的订餐系统稳定性的时候出现了“超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。”问题。


问题分析:

我们获取连接超过连接池最大值时产生如上异常。通常连接池最大值为100。当我们获取连接超过最大值时,ADO.NET等待连接池返回连接而超时,这样将抛出如上异常


解决方法:

1、首先确定你的数据库是否已经开放,是否开放端口,允许让其他机器访问,具体如下:

https://www.cnblogs.com/xuliangxing/p/6005154.html

在上方连接中应该注意的是:最好将TCP的端口都设置成1433,仅仅设置TCP All可能没有效果。

2、如果数据库已经设置好之后,还是不能够连接到,就要做如下操作

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。_第1张图片

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。_第2张图片

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。_第3张图片

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。_第4张图片

其余的就点击下一步,最后选择名称(此处为“SQL”),最后点击完成即可。

同样的道理去添加出站规则。

3、如果还是不可以,就需要进行如下操作:

在数据库连接加 "Max Pool Size = 512;server=192.168.22.153;uid=sa;pwd=;database=OrderSystemTest;"

DataReader是独占连接的,就是说你的程序可能设计上有问题。比如说最大连接设100,假设有100个人同时使用 DataReader正在读取数据库内容,那么当第101人读取的时候,连接池中的连接已经没有了,就会出现上面的错误。DataReader是独占连接 的,每个DataReader都要占用一个连接。当然这个情况是偶尔出现的,所以会很长时间出现一次,因为只有同时有超过连接池最大连接数量的并发操作才会发生。而且你加大并发数量只能暂时缓解问题,如果你加大到200个并发连接,如果有201 人同时操作怎么办?你说了你使用Connection对象的Close()方法,这是不行的,因为Close()方法仅仅是关闭连接,但这个连接没有释放,还是被这个对象占用,要释放必须使用Connection的Dispose()方法显式释放连接才可以,否则这个对象占用的连接只能等到垃圾收集的情 况下才能被释放。这种情况肯定会出现“超时时间已到”的错误。


总结:

多收获,不懂就查,查不到就问。感谢...

你可能感兴趣的:(Something)