技术开发 频道

ADO.NET数据连接池

【IT168 技术文档】

    6、ADO.NET 2.0性能计数器 

   
前面提到的使用性能计数器时候的两个bug在ADO.NET 2.0中都不会出现。ADO.NET 2.0中废掉了1.1所用的“.NET CLR Data”的性能对象,新的性能对象是“.NET Data Provider for Oracle”和“.NET Data Provider for SqlServer”。这两个性能对象都有14个计数器,这比ADO.NET 1.1能观察到更多、更深入的连接池信息。其中本文说到的“被占用的”连接、“可用的”的连接、“逻辑连接”和“物理连接”在ADO.NET 2.0性能计数器中分别叫Active Connection、Free Connection、Soft Connection、Hard Connection。 

    NumberOfFreeConnections、 NumberOfActiveConnections、 SoftDisconnectsPerSecond和SoftConnectsPerSecond默认在性能监视器是不打开的,要观察这些计数器的值需要在程序的配置文件里添加下面的配置:

<system.diagnostics> <switches> <add name="ConnectionPoolPerformanceCounterDetail" value="4"/> </switches> </system.diagnostics>

    NumberOfActiveConnectionPoolGroups计数器。前面说过,如果连接串使用Windows认证,那么不同的Windows用户有不同的连接池,ADO.NET 2.0中使用NumberOfActiveConnectionPoolGroups把使用Windows认证的相同连接串(字符相同)产生的不同连接池归为一组。 

    NumberOfActiveConnections, NumberOfFreeConnections计数器。ADO.NET 1.1里的计数器没有提供一个连接池里的连接有多少个是“被占用的”,有多少个是“可用的”。NumberOfActiveConnections和NumberOfFreeConnections填补了这个空白。这两个计数器更加“生动”地描述了连接池里连接的变化情况。图6是一个连接相继Open/Close了4次得到的比ADO.NET 1.1更“生动”的曲线。

图6

    7、总结 

    明白了连接池的运作机制不等于能正确使用连接池,要充分挖掘连接池给应用系统带来的性能提高,除了避免泄漏连接需要注意的两点外, 请参考一下建议: 

    (1)确保每次访问数据库使用相同的连接串,连接串不要使用Windows认证。 

    (2)到了非打开不可的时候才打开连接,连接使用完毕立刻关闭连接。因为过早占用和过晚释放连接意味着增加连接池的不必要负荷(需要建立更多的连接以及连接请求需要等待更长时间)。 

    (3)根据应用系统的实际负荷设置适当的Min Pool Size和Max Pool Size。为避免连接请求超时,如果应用系统的数据库最大并发访问数量大于Max Pool Size的默认置100就需要把Max Pool Size设置得更大;但不是越大越好,毕竟数据库的负荷承受力有限。如果应用系统的数据库最大并非访问数量是N,那么Min Pool Size不要大于N。 

    (4)如果应用系统不是使用集群数据库,把Connection Lifetime设置为0。在单数据库服务器的环境下没必要把连接销毁,因为销毁后一段时间又需要建立。 


    连接池对应用系统的性能提高起着至关重要的作用,但需要连接池有其适用范围,它适用于需要频繁访问数据库的应用系统。对于低频率(例如一天只有几次)的数据库访问应用系统就不必要,因为一直保留一个低使用频率的“物理连接”不如使用一次就建立一次好。

0
相关文章