ODP.NET连接池性能计数器

ODP.NET连接池性能计数器

作者:范俊   2013-05-25


阅读本文需要了解两个知识:

1、  Oracle Data Provider for .NET(ODP.NET) ——ORACLE公司为.NET开发者提供的,使用.NET访问ORACLE 数据库的类库。

2、  性能计数器(PerformanceCounter)—— <引用百度百科>也叫性能监视器,是WindowsNT/2000提供的一种系统功能。它能实时采集、分析系统内的应用程序、服务、驱动程序等的性能数据,以此来分析系统的瓶颈、监视组件的表现,最终帮助用户进行系统的合理调配。

前段时间查问题,偶然看到Oracle客户端的版本升级说明,发现从 11.1.0.6.20 版开始支持了连接池性能计数器。这可是个好东西,可以监控使用ODP.NET方式时数据库连接池的情况!对我们分析数据库的访问性能和追查具体问题都很有帮助!所以特别试了一下,并把使用中遇到的关键问题做了整理和记录。

关键点一:注册性能计数器

在Windows操作系统中,通过Oracle客户端(版本需要是11.1.0.6.20或更高)安装了Oracle Data Provider for .NET (ODP.NET)组件,应该就能在性能计数器中找到相关计数器。但我部署过不少环境,但都不记得发现过有ODP.NET的性能计数器。经过查询资料发现,可以手工到OracleHome路径下执行ODP.NET\bin\2.x\OraProvCfg.exe进行注册,注册命令为“/action:register/product:odp /component:perfcounter /providerpath:”。示例:

OraProvCfg /action:register /product:odp /component:perfcounter /providerpath:D:\app\Administrator\product\11.2.0\dbhome_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

       注册后,就可在管理器中找到分类“Oracle Data Provider for .NET”,该分类下就是相应的连接池计数器了。但使用前还有另一个要点,就是需要启用具体的性能计数器!

关键点二:启用具体的性能计数器

       ODP.NET这几个计数器即使在注册后也是缺省不生效的,查阅官方文档后得知需要单独设置。有两种方式控制具体计数器的启用状态:

【方式一:注册表】

       通过设置注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ODP.NET\Assembly_Version 中  的值来控制每个独立计数器的启用状态。

【方式二:应用程序配置文件(app.config)】

       在配置中加入“oracle.dataaccess.client”节点,并指定 PerformanceCounters 项的值。

<configuration>

       <oracle.dataaccess.client>

              <settings>

                     <add name="PerformanceCounters" value="3"/>

              </settings>

       </oracle.dataaccess.client>

</configuration>

       ODP.NET 会优先采用应用程序配置文件app.config中的设置。所以在程序运行时,具体开启哪些计数器是根据配置文件app.config为准,如果没有设置才以数据库中的设置为准。具体PerformanceCounters 值的含义如下表:

性能计数器

键值

描述

HardConnectsPerSecond

1

每秒建立的与 Oracle 数据库服务器的会话数

HardDisconnectsPerSecond

2

每秒提供的与 Oracle 数据库服务器的会话数

SoftConnectsPerSecond

4

每秒从连接池生成的活动连接数

SoftDisconnectsPerSecond

8

每秒返回到连接池的活动连接数

NumberOfActiveConnectionPools

16

活动连接池总数

NumberOfInactiveConnectionPools

32

即将处理的不活动连接池数

NumberOfActiveConnections

64

正在使用的连接总数

NumberOfFreeConnections

128

所有连接池中可用连接总数

NumberOfPooledConnections

256

池式活动连接数

NumberOfNonPooledConnections

512

非池式活动连接数

NumberOfReclaimedConnections

1024

作为垃圾隐式收集的连接数

NumberOfStasisConnections

2048

池中即将可用的连接数。用户已关闭这些连接, 当前正在等待特定操作 (如事务处理) 完成, 完成之后才能将这些连接作为空闲连接重新放回池中。

       在注册ODP.NET提供的连接池计数器时,注册表中 PerformanceCounters 的值缺省为0,表示不启用任何计数器。

       想开启多个计数器,将相应键值做与运算即可。因为键值都是2的n次方,所以直接相加就得到我们想要的最终键值。所以想开启所有的计数器,则将值设置为4095即可。

       到这里,通过Window控制台方式使用性能计数器应该就没什么问题了,都是界面化的操作,和使用其他性能计数器应该没什么差别了。

      

但是,要通过编程方式创建对应计数器的话还有一点需要注意,那就是计数器的实例名规则。

关键点三:计数器的实例名

       提供的这些性能计数器都是需要指定实例的(不同的进程有不同实例名称)。通过编程方式创建对应计数器的话,需要明确传入实例名称,所以需要在代码中生成该名称。用的时候发现ODP.NET的这几个计数器,实例名称的规则和其他微软提供的不太一样,要复杂些。

       通常计数器实例名都是AppDomain的名称,而这几个的名称规则是“AppDomain名称 [进程ID,AppDomain的ID]”(如“odptest.exe [7784,1]”)。

       基本的使用就是这些了,希望对第一次使用它的人有个指导。最后还是想感叹下,大概是因为这是Oracle对MS的功能做支持,使用起来没MS自己的东西顺手,设置上感觉拐了几道弯。不过还是要感谢Oracle做的支持,为我们使用ODP.NET提供了性能分析上的支撑!


文章原始链接:http://blog.csdn.net/debug_fan/article/details/8973467

注意:转载请保留文章完整,并注明出处!谢谢!

原创文章 33 获赞 26 访问量 4万+

猜你喜欢

转载自blog.csdn.net/debug_fan/article/details/8973467