SQL Server连接池基本原理
SQL Server连接池基本原理
1. 何时创建连接池?
当第一个连接请求到来时创建连接池;连接池的建立由数据库连接的连接字符创来决定。每一个连接池都与一个不同的连接字符串相关。当一个新的连接请求到来时如果连接字符串和连接池使用的字符串相同,就从连接池取出一个连接;如果不相同,就新建一个连接池。
2. 何时关闭连接池?
当连接池中的所有连接都已经关闭时关闭连接池。
3. 当连接池中的连接都已经用完,而有新的连接请求到来时会发生什么?
当连接池已经达到它的最大连接数目时,有新的连接请求到来时,新的连接请求将放置到连接队列中。当有连接释放给连接池时,连接池将新释放的连接分配给在队列中排队的连接请求。你可以调用close和dispose将连接归还给连接池。
4. 我应该如何允许连接池?
对于应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在SQLConnection对象的连接字符串中加进Pooling=true;确保你的应用程序允许连接池的使用。
SqlConnection的连接池
前段时间尝试连接数据库,然后调用sqlConnection.Close(), 最后试图删除该数据库,结果提示数据库正在使用,查看数据库进程情况,发现是自己在用该数据库,突然想到.Net支持连接池技术。sqlConnection.Close()和sqlConnection.Dispose()并不会关掉数据库的物理连接(SQL连接池中的连接,只是设为sleeping状态)。查看MSDN,结论如下:
当连接打开时,将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。
连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。对 Connection 调用 Close 或 Dispose 时,连接被释放回池中,而跟数据库的物理连接并没有断掉。连接池一旦创建,直到活动进程终止时才会被毁坏。非活动或空池的维护只需要最少的系统开销。
连接字符串中,有Pooling这个关键字,默认情况下,其值为true,即支持连接池技术。如果不想支持连接池技术,可以显式地将其赋值为false.另外Max Pool Size, Min Pool Size为池允许的最大和最小连接数。
建议大家:
1、能够将使用后的连接及时关闭(Close,Dispose),这样有效的减小了无用的连接,同时也避免了以上的情况.
2、避免无权限的用户登录上来误操作的发生.
3、相同数据库的连接字符串保持一致,比如ConnectionString中分号隔开的参数顺序不一样,或者多余的空格。

参考文档:
SqlServer自动备份计划,备份多个数据库,自动删除备份文件|C/S开发框架
CSFrameworkV6快速开发框架 | SqlServer(MsSql)数据库测试报告|C/S开发框架
CSFrameworkV6软件开发平台主流数据库测试报告(SqlServer/MySql/Oracle/达梦)|C/S开发框架
CSFramework框架数据库备份还原操作手册(MySql/Oracle/SqlServer/达梦)|C/S开发框架
SqlServer(MsSql)数据库备份、还原操作指南|C/S开发框架
SqlServer数据类型、DbType类型、.NET类型与达梦数据类型关系表|C/S开发框架
SQLSERVER:误删Windows登录用户而sa禁用,导致无法使用Windows身份验证解决方案|C/S开发框架
SqlBulkCopy.WriteToServer报错:“Unable to cast object of type 'System.Guid' to type 'System.String'.”
SQL Server 数据类型对应.NET类型的EF模型定义|C/S开发框架
CSFramework.EF数据库框架|支持多种数据库SqlServer/MySQL/Oracle
EntityFramework通用DbContext类,支持动态实体模型,多数据库(MySQL,SqlServer,Oracle)
SQLServer数据库附加到阿里云虚拟服务器-C/S开发框架
SQLServer2012附加数据库操作指南-C/S开发框架
SQLServer多个服务器实例配置端口及SqlConnection连接字符串、安全组规则配置-C/S开发框架
[人才房产]青岛房产网 2008 (C#.net+Sql server)-源码下载
C#源码-[CMS程序]SiteServer CMS v2.6.0 SQL版_siteservercmssql-源码下载
SqlServer自动备份计划,备份多个数据库,自动删除备份文件|C/S开发框架
CSFrameworkV6快速开发框架 | SqlServer(MsSql)数据库测试报告|C/S开发框架
CSFrameworkV6软件开发平台主流数据库测试报告(SqlServer/MySql/Oracle/达梦)|C/S开发框架
CSFramework框架数据库备份还原操作手册(MySql/Oracle/SqlServer/达梦)|C/S开发框架
SqlServer(MsSql)数据库备份、还原操作指南|C/S开发框架
SqlServer数据类型、DbType类型、.NET类型与达梦数据类型关系表|C/S开发框架
SQLSERVER:误删Windows登录用户而sa禁用,导致无法使用Windows身份验证解决方案|C/S开发框架
SqlBulkCopy.WriteToServer报错:“Unable to cast object of type 'System.Guid' to type 'System.String'.”
SQL Server 数据类型对应.NET类型的EF模型定义|C/S开发框架
CSFramework.EF数据库框架|支持多种数据库SqlServer/MySQL/Oracle
EntityFramework通用DbContext类,支持动态实体模型,多数据库(MySQL,SqlServer,Oracle)
SQLServer数据库附加到阿里云虚拟服务器-C/S开发框架
SQLServer2012附加数据库操作指南-C/S开发框架
SQLServer多个服务器实例配置端口及SqlConnection连接字符串、安全组规则配置-C/S开发框架
[人才房产]青岛房产网 2008 (C#.net+Sql server)-源码下载
C#源码-[CMS程序]SiteServer CMS v2.6.0 SQL版_siteservercmssql-源码下载
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
