• 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

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

  • 相关阅读:
    2013年3月17日星期日
    2013第11周一
    2013年第11周二
    2013年第11周三今天开发踩过的坑
    2013第11周四开发摸索
    2013第10周六项目中用到的前端技术学习1
    PHP 数组使用之道
    快递查询API接口集成,有需要的可以直接用
    PHP intval() 函数
    巧用 PHP 数组函数
  • 原文地址:https://www.cnblogs.com/fj365/p/13295466.html
Copyright © 2020-2023  润新知