前言介绍:

当应用程序运行的时候,会有一个连接池的管理控件运行在应用程序的进程里,统一管理应用程序和SQLSERVER建立的所有连接,

并且维护这些连接一直处于活动状态。当有用户发出一个connection open指令时连接池会在自己维护的连接池中找一个处于空闲状态

的连接放回自己管理的连接池里,给这个用户使用。当用户使用完毕后,发出connection close指令,连接池会把这个连接放回自己

管理的连接池里,让他重新处于空闲状态,而不是真的从SQL里登出。这样如果下次有用户需要相同连接,就可以重用这个连接,

而无须再去做物理连接了。就是说连接池是放在客户端的,是客户端机制

连接池内部:

连接池内部实际上就是一个线程池,这个线程池是由连接池的管理控件管理的(说白了就是:客户端数据库驱动程序)

客户端应用程序通过加载SQLSERVER的数据驱动控件做SQLSERVER连接。目前客户端数据库驱动程序主要有3种:

1、MDAC(微软数据访问组件) SQL2000的时候开始有的
 
2、SQLSERVER Native Client SQL2005开始引入的
 
3、Microsoft JDBC Provider  使用机制与MDAC和SQLSERVER Native Client不同

ADO跟ADO.NET使用的是SQLSERVER Native Client

有些人会问,这个线程池是不是Windows提供的线程池,因为Windows本来就有一个线程池。

本人觉得不是Windows的线程池,因为在连接字符串里面可以指定连接数,如果指定连接数

是32767(即SQLSERVER的最大连接数),应用程序依然可以运行,Windows的线程池

并没有32767那么多,具体数量我也忘记了。

所以线程池应该是控件自己实现的:控件创建一个线程池,然后创建连接字符串里指定的线程数然后放入线程池

同一个客户端数据库驱动程序实现的线程池只能给同样的利用该客户端数据库驱动程序连接SQLSERVER的程序使用

比如:JDBC的线程池只能给同样是JAVA的程序使用,SQLSERVER Native Client的线程池只能给ADO跟ADO.NET

程序使用!!!

多个应用程序使用同一个线程池,那么这些应用程序是如何区分和隔离的?

答案是通过应用程序的名字

比如有两个连接:他们的属性(程序名称)有所不同,那么连接池会创建两个物理连接而不是重用同一个连接

如果两个应用程序的连接字符串里指定了最大连接数是40000,那么管理控件就会创建80000个连接,然后

当应用程序发起连接的时候连接池根据应用程序名来区分该应用程序使用哪一个40000个连接

不明白的童鞋可以看下图,下图解释的会比较清楚

既然连连接池是应用程序开启的,那么如何清理连接池呢?

方法:重启应用程序(强制清理连接池)

最后有一个问题:

两个应用程序都指定连接池的最大连接数为40000,如果是这样的话应该SQLSERVER应该预先

保持了80000个活动连接,让应用程序连接进来,这样SQLSERVER应该会报错

SQLSERVER的最大连接数是32767

但是程序却捕获不了错误信息,那么SQLSERVER会不会一次打开80000个连接并

对这些连接进行维护呢?

答案在我的另一篇文章里:

非常老的话题 SQLSERVER连接池

http://www.cnblogs.com/lyhabc/articles/2797351.html

其实ODBC连接方式也使用了连接池的,大家可以在控制面板-》数据库(ODBC)里看到下面的选项

SQLSERVER连接池内部机制的更多相关文章

  1. 非常老的话题 SQLSERVER连接池

    原文:非常老的话题 SQLSERVER连接池 非常老的话题 SQLSERVER连接池 写这篇文章不是说要炒冷饭,因为园子里有非常非常多关于SQLSERVER连接池的文章,但是他们说的都是引用MSDN里 ...

  2. OkHttp3源码详解(五) okhttp连接池复用机制

    1.概述 提高网络性能优化,很重要的一点就是降低延迟和提升响应速度. 通常我们在浏览器中发起请求的时候header部分往往是这样的 keep-alive 就是浏览器和服务端之间保持长连接,这个连接是可 ...

  3. Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

  4. ADO.NET连接池机制

    为什么需要连接池 剖析一个技术第一个要问的是,这项技术为什么存在. 对于每一个到SQL Server的连接,都需要经历TCP/IP协议的三次握手,身份认证,在SQL Server里建立连接,分配资源等 ...

  5. imagepool前端图片加载管理器(JavaScript图片连接池)

    前言 imagepool是一款管理图片加载的JS工具,通过imagepool可以控制图片并发加载个数. 对于图片加载,最原始的方式就是直接写个img标签,比如:<img src="图片 ...

  6. JDBC连接池。。。转载

    1. 引言  近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机  应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架 ...

  7. DBCP、c3p0、Druid三大连接池区别

    DBCP.c3p0.Druid三大连接池区别 一.连接池优势 如果一个项目中如果需要多个连接,如果一直获取连接,断开连接,这样比较浪费资源: 如果创建一个池,用池来管理Connection,这样就可以 ...

  8. c3p0,dbcp与druid 三大连接池的区别[转]

    说到druid,这个是在开源中国开源项目中看到的,说是比较好的数据连接池.于是乎就看看.扯淡就到这. 下面就讲讲用的比较多的数据库连接池.(其实我最先接触的是dbcp这个) 1)DBCP DBCP是一 ...

  9. python socketpool:通用连接池(转)

    简介 在软件开发中经常要管理各种“连接”资源,通常我们会使用对应的连接池来管理,比如mysql数据库连接可以用sqlalchemy中的池来管理,thrift连接可以通过thriftpool管理,red ...

随机推荐

  1. nyoj 16 矩形嵌套

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ...

  2. 转载C#函数式程序设计初探——基础理论篇

    转载网址:http://www.cnblogs.com/Hlia/archive/2013/04/20/3029701.html 个人认为,C#语言的某些设计并不非常适合函数式开发,比如它的类型推断并 ...

  3. uCos 没有延时Tick滴答定时器测试

    原来学uCos只是表面,今天才发现uCos没有心跳也是可以活的,只是延时功能. 即:OSTimeDly.OSTimexxx 头的功能不能使用. 如果有是用OSTimexxx,任务将会卡死.其实,OST ...

  4. Modbus Poll :Byte Missing Error或CRC Error

    原因: 1.通信线路受干扰或是路线接触不良:    用显示器测量物理电平信号   2.从机工作不正常: 检测电源不正常或查程序bug   3.PC主机串口不正常: PC串口2.3脚答短接用串口调试器测 ...

  5. Windows下如何检测用户修改了系统时间并且把系统时间改回来

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Windows下如何检测用户修改了系统时间并且把系统时间改回来.

  6. Azure 云服务中的实例端点

    Azure云服务(cloud Servive)中有三种端点类型(endpoint type):输入端点(input);内部端点(internal);实例端点(InstanceInput) 1.输入端点 ...

  7. 网页标签图片如何保存&下载?

    最简单的方法就是鼠标右键,查看网页源代码,ctrl+f输入favicon.ico,一般网站都是这个

  8. htm explorer

    链接:https://github.com/450640526/HtmExplorer   最低环境 系统安装了.NET 4.0                地址:http://www.baidu. ...

  9. [React Native] Using the WebView component

    We can access web pages in our React Native application using the WebView component. We will connect ...

  10. Android在MediaMuxer和MediaCodec用例 - audio+video

    在Android多媒体类,MediaMuxer和MediaCodec这是一个相对年轻,他们是JB 4.1和JB 4.3据介绍. 前者被用来产生一个混合的音频和视频的多媒体文件.的缺点是,现在可以只支持 ...