关于ADO.Net连接池(Connection Pool)的一些个人见解

建立池连接可以显著提高应用程序的性能和可缩放性。 SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户端应用程序提供连接池( MSDN )。

Opening a database connection is a resource intensive and time consuming operation. Connection pooling increases the performance of Web/windows applications by reusing active database connections instead of creating a new connection with every request. Connection pool manager maintains a pool of open database connections. When a new connection requests come in, the pool manager checks if the pool contains any unused connections and returns one if available. If all connections currently in the pool are busy and the maximum pool size has not been reached, the new connection is created and added to the pool. When the pool reaches its maximum size all new connection requests are being queued up until a connection in the pool becomes available or the connection attempt times out.

Connection pooling behavior is controlled by the connection string parameters. Please look into MSDN documents in the reference link if you want to know further information.

 

前面是关于连接池知识的一些基本介绍,下面的内容是重点,也是个人见解。因为没有这方面的文档资料参考或者佐证,所以请各位仔细思考和讨论(我不想误导大家)。

下面分 2 种情况进行讨论。

1 Client 端的 windows form application 通过 ADO.Net 直接访问后台 Database


我认为在这种情况下,每一个 Client 端和 Database 之间都存在一个连接池。通过设置 ConnectiongString Max Pool Size Min Pool Size 属性来验证。

Max Pool Size = 5, Min Pool Size = 3, 通过 SQL Server SP_WHO2 可以检测导如下结果:

启动 1 Client 端的 Windows form application application SQL Server 之间存在 3 connection

启动 2 Client 端的 Windows form application application SQL Server 之间存在 6 connection

启动 3 Client 端的 Windows form application application SQL Server 之间存在 9 connection

 

由此可见,每一个 Client 端和 SQL Server 之间都存在一个连接池,否则 9 connection 已经超出了 Max Pool Size 的设定。

 

2 Client 端的 application 不直接通过 ADO.Net 来访问后台 Database ,而是通过 IIS Server 来同后台 Database Server 打交道。

至少有如下 2 种情况:

1 Client 通过 IE 访问部署在 IIS 中的 web application web application 中的 Data Access Class 进一步访问后台 Database Server.

2 Client 端的 windows form application 访问部署在 IIS 中的 Remote Object Remote Object 进一步访问后台 Database Server.



下面进行同样的测试:通过设置 ConnectiongString Max Pool Size Min Pool Size 属性来验证。

Max Pool Size = 5, Min Pool Size = 3, 通过 SQL Server SP_WHO2 可以检测导如下结果:

启动 1 Client 端的 Web form application application SQL Server 之间存在 3 connection

启动 2 Client 端的 Web form application application SQL Server 之间存在 3 connection

启动 3 Client 端的 Web form application application SQL Server 之间存在 3 connection

 

调用由 IIS 承载的 Remote Object ,结果类似。只是在未启动 Client 端之前,发现在 Remote Object Database Server 之间已经存在一个 connection

 

由此可见,对同一个 application 而言, IIS Server Database Server 之间只有存在一个连接池,与 Client 端的多少没有关系。

 

3 ,连接池小节

根据上面的测试结果,显然第二种情况更有利于减少无用的连接数量,提高 Database Server 的性能。关于 .Net Remoting 技术及其性能问题,可以参考如下的 Reference 连接,这里就不讨论了。

另外,本文是个人关于连接池的一些见解,如果观点有不正确之处,希望不要误导各位。欢迎各位在此发表意见。同意的说赞同,不同意的请提出您的看法。谢谢。

 

Reference Links:

(1) MSDN, ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconconnectionpoolingforsqlservernetdataprovider.htm

(2) Microsoft .NET Remoting :技术概述 , http://www.microsoft.com/china/MSDN/library/NetFramework/default.mspx

(3) 性能比较: .NET Remoting ASP.NET Web 服务 , http://www.microsoft.com/china/msdn/archives/library/dnbda/html/bdadotnetarch14.asp

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值