JDBC実装クラスと、それに対するJDBC Wrapperクラス(ex. DBCP)を同時にインスツルメントするとSQLメトリックのカウントが重複します。

Document created by Toshikazu_Toyama Employee on Feb 20, 2019Last modified by Toshikazu_Toyama Employee on Mar 13, 2019
Version 3Show Document
  • View in full screen mode

文書番号:   JTEC002722

Products        APM Introscope Java Agent

Release          Javaエージェント9.7、10.x

 

サマリ:

JDBC実装クラスと、それに対するJDBC Wrapperクラス(ex.DBCP)を同時にインスツルメントするとSQLメトリックのカウントが重複する場合がある。

 

詳細内容:

APM Java エージェントは、メトリック情報を取得するためにJDBCドライバクラス(OracleConnection、OracleStatement、OracleResultSetなど)をインストルメントします。
DBCPは、DelegatingStatement、DelegatingConnection、DelegatingResultSetなどのコアJDBCクラスの上にラッパークラスを使用します。
そのため、DBCPでインストルメントすると、メトリック数が重複する可能性があります。

 

解決策:

DBCPをインスツルメントするときは、sqlagent.pbdに次のSkipClassを追加してください。
-------------------------------------------------------------------
SkipClass: org.apache.commons.dbcp.DelegatingConnection
SkipClass: org.apache.commons.dbcp.DelegatingResultSet
SkipClass: org.apache.commons.dbcp.DelegatingStatement
SkipClass: org.apache.commons.dbcp.DelegatingCallableStatement
SkipClass: org.apache.commons.dbcp.DelegatingPreparedStatement
SkipClass: org.apache.commons.dbcp2.DelegatingConnection
SkipClass: org.apache.commons.dbcp2.DelegatingResultSet
SkipClass: org.apache.commons.dbcp2.DelegatingStatement
SkipClass: org.apache.commons.dbcp2.DelegatingCallableStatement
SkipClass: org.apache.commons.dbcp2.DelegatingPreparedStatement
-------------------------------------------------------------------
#上記のクラスは"Apache Commons DBCP"のサードパーティ製クラスです。
これらのクラスは、実際のSQL Connection、Statement、およびResultsetクラス(JDBCドライバ固有)のラッパークラスです。


エージェントはメトリックを取得するために実際のJDBCクラスをインスツルメントするので、エージェントはメトリックを取りこぼすことはありません。

 

 

追加情報:

JDBCとDBCPの比較例

JDBC:
oracle.jdbc.OracleConnection (implements java.sql.Connection)
oracle.jdbc.OracleResultSet (implements java.sql.ResultSet)
oracle.jdbc.OracleStatement (implements java.sql.Statement)
oracle.jdbc.OracleCallableStatement (also extends java.sql.CallableStatement)
          #OracleCallableStatement is the Subinterfaces of OracleStatement.
oracle.jdbc.OraclePreparedStatement (also extends java.sql.PreparedStatement)
          #OraclePreparedStatement is the Subinterfaces of OracleStatement.

 

 

DBCP:
org.apache.commons.dbcp.DelegatingConnection (implements java.sql.Connection)
org.apache.commons.dbcp.DelegatingResultSet (implements java.sql.ResultSet)
org.apache.commons.dbcp.DelegatingStatement (implements java.sql.Statement)
org.apache.commons.dbcp.DelegatingCallableStatement(implements java.sql.CallableStatement)
         #DelegatingCallableStatement is the Subinterfaces of DelegatingStatement.
org.apache.commons.dbcp.DelegatingPreparedStatement(implements java.sql.PreparedStatement)
         #DelegatingPreparedStatement is the Subinterfaces of DelegatingStatement.

 

 

-------------------------------------------------------------------
この情報は米国より提供されているKNOWLEDGE BASEをもとに作成したものです。原文の詳細につきましては下記内容をご覧ください。
参照 Document ID: KB000124981
Title: Instrumenting same wrapper classes of JDBC and DBCP may lead to duplicated metric counts.

Attachments

    Outcomes