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

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

转载于:https://www.cnblogs.com/debug_fan/archive/2013/05/25/6070704.html

ODP.NET连接池性能计数器相关推荐

  1. net oracle连接池配置,Oracle ODP.NET连接池

    数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...

  2. ADO.NET中连接池状态的跟踪

    因为测试的时候用的都是小数据量数据,程序运行正常,但是到了客户那里,碰到才100多条的数据,居然提示我连接超时,让我百思不得其解.一时间不知道怎么跟踪好. 寻寻觅觅,终于找到了一个跟踪数据连接池状态的 ...

  3. Ado.net连接池 sp_reset_connection 概念

    什么是连接池? 正常情况下,每次访问数据库都会打开和关闭,中断物理连接后需要再次进行物理连接.这样操作会浪费资源 使用连接池,主要的区别在于,不需要中断物理连接,即每次中断请求时spid还是存在! 原 ...

  4. ado.net mysql 连接池_ADO.NET数据库连接池的介绍 | 学步园

    摘录自MSDN: 建立池连接可以显著提高应用程序的性能和可缩放性.SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户端应用程序提供连接池.您也可以提供几个连接 ...

  5. ado.net mysql 连接池_ADO.NET数据连接池

    [IT168 技术文档]21世纪什么最贵?数据库连接.对于以数据库做数据存储基石的应用系统来说,数据库连接是整个系统中最珍贵的资源之一.数据库连接池是为了更有效地利用数据库连接的最重要措施.它对于一个 ...

  6. 连接池中溺死重生,多亏NET 连接池救生员

    您的应用程序会"沉没",还是会"游泳"?"NET 连接池救生员",msdn上这篇有名的文章n久之前已经拜读过n次,当时还暗自庆幸,我的程序没 ...

  7. 连接池和协程池为何能提升并发能力?

    你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...

  8. evt参数是干啥用的_http连接池中非常关键的两个参数,到底是干啥用的?

    作者简介:大厂一线资深开发.从crud开发到资深开发,再到研究员兼技术经理.<资深开发讲技术> 从一线实战中总结有故事,有背景的案例,希望带给大家一系列技术盛宴. 求关注,欢迎技术交流.友 ...

  9. python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

最新文章

  1. SAP零售行业解决方案初阶 7 - 自动补货
  2. python正则匹配数字_python 正则匹配字母数字中的任意数字,字母
  3. 2019\National _C_C++_B\1.求2019<X<Y ,使2019*2019,X*X,Y*Y组成等差数列且X+Y最小.
  4. c#中WinForm中拖拽窗体实现移动功能(无边框模态窗体)
  5. CentOS7 安装Redis Cluster集群
  6. C++:_ASSERTE(__acrt_first_block == header)
  7. 基本排序算法之1——希尔排序shellsort
  8. 小白也会用的SQL优化工具推荐
  9. python的基础操作_python列表基础操作
  10. 浅谈大数据时代的电子招投标
  11. 浙江大学-研究生机器学习课程-课堂笔记
  12. ubuntu离线中文语音识别
  13. java word 分页显示_java使用freemaker 导出word 包含分页,表格循环,word改xml格式化...
  14. linux安装识别不到scsi硬盘,Linux下不重起识别SCSI硬盘
  15. WebSpider简介
  16. 如何成为很厉害的程序员?- 读《精进》
  17. ESP8266-Arduino编程实例-MAX44009环境光传感器驱动
  18. 访问和操作H2数据库
  19. RabbitMQ详解及其特性
  20. 2021年一次比较奇葩的 AWS 面试

热门文章

  1. python中matplotlib库饼图_python 使用 matplotlib.pyplot来画柱状图和饼图
  2. R语言︱list用法、批量读取、写出数据时的用法
  3. C++中main函数的返回类型必须是int
  4. 洛谷P1069 细胞分裂 数学
  5. 004商城项目:ssm框架的整合之后的调试
  6. 不用图像文件的圆角解决--跳起按钮制作(html)
  7. cut、tr、wc、sort4
  8. Sql server 分解字符串(实现split)
  9. JDBC连接数据库集
  10. asm.js性能提升,让游戏飞起来