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
注意:转载请保留文章完整,并注明出处!谢谢!
转载于:https://www.cnblogs.com/debug_fan/archive/2013/05/25/6070704.html
ODP.NET连接池性能计数器相关推荐
- net oracle连接池配置,Oracle ODP.NET连接池
数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...
- ADO.NET中连接池状态的跟踪
因为测试的时候用的都是小数据量数据,程序运行正常,但是到了客户那里,碰到才100多条的数据,居然提示我连接超时,让我百思不得其解.一时间不知道怎么跟踪好. 寻寻觅觅,终于找到了一个跟踪数据连接池状态的 ...
- Ado.net连接池 sp_reset_connection 概念
什么是连接池? 正常情况下,每次访问数据库都会打开和关闭,中断物理连接后需要再次进行物理连接.这样操作会浪费资源 使用连接池,主要的区别在于,不需要中断物理连接,即每次中断请求时spid还是存在! 原 ...
- ado.net mysql 连接池_ADO.NET数据库连接池的介绍 | 学步园
摘录自MSDN: 建立池连接可以显著提高应用程序的性能和可缩放性.SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户端应用程序提供连接池.您也可以提供几个连接 ...
- ado.net mysql 连接池_ADO.NET数据连接池
[IT168 技术文档]21世纪什么最贵?数据库连接.对于以数据库做数据存储基石的应用系统来说,数据库连接是整个系统中最珍贵的资源之一.数据库连接池是为了更有效地利用数据库连接的最重要措施.它对于一个 ...
- 连接池中溺死重生,多亏NET 连接池救生员
您的应用程序会"沉没",还是会"游泳"?"NET 连接池救生员",msdn上这篇有名的文章n久之前已经拜读过n次,当时还暗自庆幸,我的程序没 ...
- 连接池和协程池为何能提升并发能力?
你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...
- evt参数是干啥用的_http连接池中非常关键的两个参数,到底是干啥用的?
作者简介:大厂一线资深开发.从crud开发到资深开发,再到研究员兼技术经理.<资深开发讲技术> 从一线实战中总结有故事,有背景的案例,希望带给大家一系列技术盛宴. 求关注,欢迎技术交流.友 ...
- python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列
在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...
最新文章
- SAP零售行业解决方案初阶 7 - 自动补货
- python正则匹配数字_python 正则匹配字母数字中的任意数字,字母
- 2019\National _C_C++_B\1.求2019<X<Y ,使2019*2019,X*X,Y*Y组成等差数列且X+Y最小.
- c#中WinForm中拖拽窗体实现移动功能(无边框模态窗体)
- CentOS7 安装Redis Cluster集群
- C++:_ASSERTE(__acrt_first_block == header)
- 基本排序算法之1——希尔排序shellsort
- 小白也会用的SQL优化工具推荐
- python的基础操作_python列表基础操作
- 浅谈大数据时代的电子招投标
- 浙江大学-研究生机器学习课程-课堂笔记
- ubuntu离线中文语音识别
- java word 分页显示_java使用freemaker 导出word 包含分页,表格循环,word改xml格式化...
- linux安装识别不到scsi硬盘,Linux下不重起识别SCSI硬盘
- WebSpider简介
- 如何成为很厉害的程序员?- 读《精进》
- ESP8266-Arduino编程实例-MAX44009环境光传感器驱动
- 访问和操作H2数据库
- RabbitMQ详解及其特性
- 2021年一次比较奇葩的 AWS 面试