JDBCに関するSQLメトリックのカウントが重複する
search cancel

JDBCに関するSQLメトリックのカウントが重複する

book

Article ID: 138373

calendar_today

Updated On:

Products

CA Application Performance Management Agent (APM / Wily / Introscope) CA Application Performance Management (APM / Wily / Introscope) CA Application Performance Management SaaS

Issue/Introduction

APM Java エージェントは、メトリック情報を取得するためにJDBCドライバクラス(OracleConnection、OracleStatement、OracleResultSetなど)をインスツルメントします。

DBCPは、DelegatingStatement、DelegatingConnection、DelegatingResultSetなどのコアJDBCクラスの上にラッパークラスを使⽤します。

そのため、DBCPでインスツルメントすると、メトリックのカウント数が重複する可能性があります。

Resolution

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ドライバ固有)のラッパークラスです。

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

Additional Information

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.