当应用程序运行的时候,会有一个连接池的管理控件运行在应用程序的进程里,统一管理应用程序和SQLSERVER建立的所有连接,并且维护这些连接一直处于活动状态。
ODBC、ADO和ADO.NET 都支持连接池这种机制,JAVA的JDBC也支持连接池这种机制。
ODBC连接池可以在控制面板->数据库(ODBC)里看到下面的选项:
有用户发出一个connection open指令时连接池会在自己维护的连接池中找一个处于空闲状态的连接放回自己管理的连接池里,给这个用户使用。
当用户使用完毕后,发出connection close指令,连接池会把这个连接放回自己管理的连接池里,让他重新处于空闲状态,而不是真的从SQL里登出。连接池是放在客户端的,是客户端的机制。
多个应用程序使用同一个线程池,这些应用程序是如何区分和隔离的
比如有两个连接:他们的属性(程序名称)有所不同,那么连接池会创建两个物理连接而不是重用同一个连接。如果两个应用程序的连接字符串里指定了最大连接数是40000,那么管理控件就会创建80000个连接,然后当应用程序发起连接的时候连接池根据应用程序名来区分该应用程序使用哪一个40000个连接。
说明1:如果 MinPoolSize 在连接字符串中未指定或指定为零,池中的连接将在一段时间不活动后关闭,
MaxPoolSize在连接字符串中末指定,默认值为 100(PoolSize = false)。
指定的 MinPoolSize 大于零,在 AppDomain 被卸载并且进程结束之前,连接池不会被破坏。当出现故障转移等错误时,会自动清除池。
说明2:不是显式关闭的连接可能不会添加或返回到池中。