zoukankan      html  css  js  c++  java
  • 关于ODP.NET连接数监控及相应的windbg分析提示

    1、关于ODP.NET的Windows计数器问题

           使用微软的缺省驱动时,可以通过windows性能监视器很方便的监控数据库连接数,选择.NET Data Provider for Oracle/Sqlserver中的NumberOfPooledConnections即可。但是微软早就放弃了对Oracle驱动的更新,该驱动不仅在性能上比较差(读取40000 rows * 30 cols的数据,仅数据转换大约耗时25秒,而ODP.NET仅需5秒),更悲催的是System.Data.OracleClient还有不少bug….本人就在一个项目上遇到数据行翻倍的事情,更新使用ODP.NET后原来的计数器自然就不能使用了,安装Oracle客户端时选择ODP.NET组件后,Windows计数器中会出现Oracle Data Provider for .NET的选项,但选择对应的子项和实例后却看不到任何信息,原来缺省是没有启用的。可以通过修改注册表启用计数器:HKEY_LOCAL_MACHINESOFTWAREORACLEODP.NETAssembly_Version,找到PerformanceCounters,将该值改为4095即可,然后重启IIS或回收应用程序池。

    参考资料: http://blog.csdn.net/debug_fan/article/details/8973467

    另外,根据dump分析看,监视器中显示的NumberOfPooledConnections仅包含正在使用的连接,如果要看所有打开的连接应该在加上NumberOfFreeConnections计数器。

    image

    image

    2、关于ODP.NET在dump分析的查找

    使用windbg分析dump时,遇到ODP.NET在实现ADO.NET接口的内部实现特立独行的问题,按照微软缺省的方式找了半天,在此记录备忘。

    Command ---> m_connection [OracleConnection] ---> 1) m_conString [String] ; 2) m_opoConCtx [OpoConCtx] ---> pool [ConnectionPool] ---> m_connections [Collections.Stack]  ---> _s [Collections.Stack]  ---> _array (System.Object[])

    也可以通过 命令直接查找连接或连接池: 

    !dumpheap -type Oracle.DataAccess.Client.ConnectionPool

    !dumpheap -type Oracle.DataAccess.Client.OracleConnection

    另外,还有全托管驱动的问题Oracle.ManagedDataAccess.Client,该实现的命令及路径跟ODP.NET又有很大不同。

    Oracle.ManagedDataAccess.Client.OracleConnection

    具体实现是下面两个

    OracleInternal.ServiceObjects.OracleConnectionImpl

    OracleInternal.ConnectionPool.OraclePoolManager

    连接字符串也很特别,是在两处分开存储的: OracleConnection的ConnectionString  --->m_constring m_compString m_passwordlessConString 和OracleConnectionImpl 的 m_password

    image

    image

    image

  • 相关阅读:
    Robot Framework-取出接口返回的字段
    利用VBA宏批量解决Word中图片大小、居中设置
    封装和继承
    Shiro的学习
    Redis集群搭建
    Mysql主从架构
    idea修改maven的默认配置不生效
    Mybatis笔记
    【python】文件的读写方法(r;r+;rb;w;w+;wb;a;a+;ab)
    【Python】Xpath语法&示例
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/6433585.html
Copyright © 2011-2022 走看看