(本文转载原地址为http://www.studyofnet.com/news/637.html)

本文导读:Max Pool

Size如果未设置则默认为100,理论最大值为32767。最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。在等待队列中,默认等待与服务器的连接的时间为15秒。

一、数据库Connection Pool 连接池是什么

每当程序需要读写数据库的时候。Connection.Open()会使用ConnectionString连接到数据库,数据库会为程序建立 一个连接,并且保持打开状态,此后程序就可以使用T-SQL语句来查询/更新数据库。当执行到Connection.Close()后,数据库就会关闭当 前的连接。
 
但是如果我的程序需要不定时的打开和关闭连接,(比如说 ASP.Net 或是 Web Service ),例如当Http Request发送到服务器的时候、,我们需要打开Connection 然后使用Select* from Table 返回一个DataTable/DataSet给客户端/浏览器,然后关闭当前的Connection。那每次都Open/Close Connection 如此的频繁操作对于整个系统无疑就成了一种浪费。
 
ADO.Net Team就给出了一个比较好地解决方法。将先前的Connection保存起来,当下一次需要打开连接的时候就将先前的Connection 交给下一个连接。这就是Connection Pool。

二、数据库Connection Pool连接池的运行方式

1、当一个程序执行Connection.open()时候,ADO.net就需要判断,此连接是否支持Connection Pool (Pooling 默认为True)
 
(1)、如果指定为False, ADO.net就与数据库之间创建一个连接,然后返回给程序。
 
(2)、如果指定为 True,ADO.net就会根据ConnectString创建一个Connection Pool,然后向Connection Pool中填充Connection。填充多少个Connection由Min Pool Size (默认为0)属性来决定。例如如果指定为5,则ADO.net会一次与SQL数据库之间打开5个连接,然后将4个Connection,保存在 Connection Pool中,1个Connection返回给程序。
 
 
2、当程序执行到Connection.close() 的时候。如果Pooling 为True,ADO.net 就把当前的Connection放到Connection Pool并且保持与数据库之间的连接。
 
同时还会判断Connection Lifetime(默认为0)属性,0代表无限大,如果Connection存在的时间超过了Connection LifeTime,ADO.net就会关闭的Connection同时断开与数据库的连接,而不是重新保存到Connection Pool中。
 
 
3、当下一次Connection.Open() 执行的时候,ADO.Net就会判断新的ConnectionString与之前保存在Connection Pool中的Connection的connectionString是否一致。
 
 
4、 ADO.net需要判断当前的Connection Pool中是否有可以使用的Connection(没有被其他程序所占用),如果没有的话,ADO.net就需要判断ConnectionString设 置的Max Pool Size (默认为100)
 
(1)、如果Connection Pool中的所有Connection没有达到Max Pool Size,ADO.net则会再次连接数据库,创建一个连接,然后将Connection返回给程序。
 
(2)、如果已经达到了 MaxPoolSize,ADO.net就不会再次创建任何新的连接,而是等待Connection Pool中被其他程序所占用的Connection释放,这个等待时间受SqlConnection.ConnectionTimeout(默认是15 秒)限制,也就是说如果时间超过了15秒,SqlConnection就会抛出超时错误。
 
 
5、如果有可用的Connection,从Connection Pool 取出的Connection也不是直接就返回给程序,ADO.net还需要检查ConnectionString的ConnectionReset属性 (默认为True)是否需要对Connection 最一次reset。

三、ASP.NET程序对max pool size的配置

<add key="data" value="server=192.168.1.123; Port=3306; uid=root; pwd=root;database=data;pooling=true;min pool size=5;max pool size=512;connect timeout = 20; "/> 

其中Max Pool Size如果未设置则默认为100,理论最大值为32767。最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。在等待队列中,默认等待与服务器的连接的时间为15秒。

四、查看应用程序池占用数量

select * from sysprocesses where dbid= db_id('数据库名')

五、max pool size的配置相关 常见的错误

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

问题描述
 
我们获取连接超过连接池最大值时产生如上异常。通常连接池最大值为100。当我们获取连接超过最大值时,ADO.NET等待连接池返回连接而超时,这样将抛出如上异常
 
解决方法         
1、要做的是在我们使用连接后立即关闭连接
2、在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。           
3、可以在WEB.config 里面修改连接字符串中的Max Pool Size = N;来动态扩大连接池中的连接最大数量。

数据库连接池的配置和使用(大自然的搬运工)相关推荐

  1. 数据库连接池优化配置(druid,dbcp,c3p0)

    主要描述了数据库连接池参数配置的准则,针对常用的数据库连接池(c3p0,dbcp,druid)给出推荐的配置. 考虑因素 1:当前连接DB的规模   2:并发情况 3:执行db的响应时间 配置考虑 1 ...

  2. druid mysql 配置优化_数据库连接池优化配置(druid,dbcp,c3p0)

    考虑因素 1:当前连接DB的规模   2:并发情况 3:执行db的响应时间 配置考虑 1:初始化连接:可考虑设置为3个连接 .对于db规模特别大的情况下可考虑设置为1个.避免启动时间过长: 2:最小连 ...

  3. mysql配置数据库连接池_三种数据库连接池的配置

    三种数据库连接池的配置及使用(For JDBC) 连接池的优缺点 优点 使用连接池的最主要的优点是性能.创建一个新的数据库连接所耗费的时间主要取决于网络的速 度以及应用程序和数据库服务器的 ( 网络 ...

  4. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  5. hikaripool连接保持_springboot2的hikari数据库连接池默认配置

    序 Spring-Boot-2.0.0-M1版本将默认的数据库连接池从tomcat jdbc pool改为了hikari,这里主要研究下hikari的默认配置 spring-configuration ...

  6. java tomcat数据库连接池_tomcat配置数据库连接池2

    数据库连接是比较耗时的操作,如果每次访问数据库都开闭一次连接的话,在大批量访问时,必然会导致性能问题,于是这里成为了你的性能瓶颈.为了解决这个问题, 为了简化通过连接池获取数据库连接的过程,JDBC2 ...

  7. c3po数据库连接池简单配置

    此次C3P0数据库连接池配置以maven项目为准: 1.首先先将c3p0的依赖导入: <dependency>     <groupId>com.mchange</gro ...

  8. Tomcat数据库连接池的配置方法总结(叶涛为您解答)

    实例使用的Tomcat版本为6.0 方法一: 在Tomcat的conf/context.xml中配置在Tomcat\apache-tomcat-6.0.33\conf目录下的context.xml文件 ...

  9. C3P0数据库连接池的配置

    在pom.xml文件中导入jar包 <dependency><groupId>com.mchange</groupId><artifactId>c3p0 ...

  10. spring mysql 连接池配置_SpringBoot数据库连接池常用配置

    关注公众号:程序猿王国         持续更新,每日分享 在配置文件中添加配置如下(我使用的是多数据源): spring.datasource.primary.url=jdbc\:mysql\:// ...

最新文章

  1. 开启apache的server-status辅助分析工具
  2. standford lessons
  3. 进程和线程(通信方式)、调度算法(6种)
  4. ajax 调用后台的方法
  5. 休眠 关闭串口输出_C#实例:串口通讯
  6. 五大算法之二--动态规划
  7. vue2.0中transition组件的用法
  8. 端游一般用什么配置的服务器呢?
  9. amd cpu排行_最全cpu性能排行榜 cpu性能排行天梯图
  10. 光电耦合器电路应用符号
  11. win10提示目前无法访问SmartScreen
  12. I2C+E2PROM再回顾ing~
  13. Android——透明色
  14. 【信息汇总】重庆理工大学计算机考研
  15. RTX51 tiny系统容易混淆的问题
  16. JS使用Lodop控件打印表单和二维码
  17. 魔幻离现实仅一步之遥:细说Python的循环调用、循环引用和循环导入
  18. 数据库优化、索引【面试题】
  19. 微信支付V3版本回调+验签流程
  20. 力扣第八题 myatoi

热门文章

  1. 毕设文案 赠源码28265-django 电子档管理系统
  2. 中国成语大全 v3.1 bt
  3. 小孩入门学计算机编程,你知道如何让6-13岁的孩子们入门学计算机编程吗?
  4. Python笔记【四】
  5. js姓名除了姓,名*** 或者除了姓名最后一个字,剩余的**
  6. 最大子段和问题,拾捡硬币问题, 矩阵连乘问题,最短公共超序列问题,最优二分搜索树,买卖股票的最佳时机,天平秤金条问题,动态规划解最短路径问题
  7. IE-LAB网络实验室:5G和WIFI6,还傻傻的分不清吗?(4)
  8. 测试网络rinkeby外文资料
  9. “九韶杯”[友谊纽带] 喊山 (30 分) 小字辈 bfs,dfs求距离
  10. 疾病负担研究(GBD)——如何绘制疾病成分比