asp.net 数据连接池

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

原因分析:asp.net的数据库连接池的连接都被占用了。

很多同学都表示不解,表示没有过数据库连接池。

怎么开启数据库连接池?

数据库连接池在哪里,很多同学都以为应该在数据库服务器,其实不对,连接池是在应用服务器上,有asp.net管理连接池。

数据库连接池在哪里呢,我们用代码验证它的存在。

一、web.config的连接字符串的配置

  <connectionStrings>
    <add name="SQLConnString1" connectionString="Server=192.168.1.88;Database=CloudLightApp;User Id=sa;Password=xyz;" />
  </connectionStrings>

二、运行没报异常代码

            for (int i = 0; i < 100; i++)
            {
                var reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, System.Data.CommandType.Text, "select * from T_MOB_ENTERPRISE");
                Response.Write(i.ToString() + "<br />");
            }

三、运行报异常代码

            for (int i = 0; i < 101; i++)
            {
                var reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, System.Data.CommandType.Text, "select * from T_MOB_ENTERPRISE");
                Response.Write(i.ToString() + "<br />");
            }

比较上面这段代码,发现区别就在于前一个执行100次查询,后一个执行了101次查询。后一个查询抛出【超时时间已到,但是尚未从池中获取连接】异常

原因是:微软默认给我们启动了连接池,默认的连接数为100,上面的连接字符串等价于

  <connectionStrings>
    <add name="SQLConnString1" connectionString="Server=192.168.1.88;Database=CloudLightApp;User Id=sa;Password=xyz;Max Pool Size = 100;Pooling = True;" />
  </connectionStrings>

  由于我们的代码每次查询完以后都没释放连接,导致101次查询时,没有可用的连接。

为什么要开启连接池?

主要是为了性能考虑,建立一个tcp连接需要三次握手,比较费时! 连接池复用连接,用完不关闭,直接把连接退还给连接池!

 

为什么会报超时时间已到,但是尚未从池中获取连接错误

是因为连接池有个最大的数目控制,Max Pool Size 。如果连接池最大设置成100,已经申请到了100个连接,并且100个连接都被占用,当第101个连接请求时,会报上面的异常,因为连接池没有可用的连接了。

 

怎么避免上面的错误

1、及时的关闭连接

调整成下面的代码,就会发现执行101次查询都只有1个tcp连接,后续的100次查询都是用的同一个连接。因为用using后,编译器自动会生成释放连接的代码。连接池的中一个连接循环使用!

         for (int i = 0; i < 101; i++)
            {
                using (var reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, System.Data.CommandType.Text, "select * from T_MOB_ENTERPRISE"))
                {
                    Response.Write(i.ToString()+"<br />");
                }
            }

  有图有真相

2、适当的调整Max Pool Size

如果并发量大,可以调整为512,1024等

 

转载于:https://www.cnblogs.com/50614090/articles/7244701.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值