この章の内容は次のとおりです。
Universal Connection Pool (UCP) for JDBCでは、接続プールの実行時統計情報を提供します。これらの統計情報は次の2つのカテゴリに分かれます。
非累積
これらの統計情報は現在実行中の接続プール・インスタンスにのみ適用されます。
累積
これらの統計情報はプールの起動または停止の複数のサイクルにわたって収集されます。
oracle.ucp.UniversalConnectionPoolStatistics
インタフェースは、接続プール統計情報を問い合せるために使用されるメソッドを備えています。このインタフェースのメソッドは、oracle.ucp.jdbc.PoolDataSource.getStatistics
メソッドを使用して、プール対応のデータソースおよびプール対応のXAデータソースからコールできます。次に例を示します。
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource(); ... ... int totalConnsCount = pds.getStatistics().getTotalConnectionsCount(); System.out.println("The total connetion count in the pool is "+ totalConnsCount +".");
oracle.ucp.jdbc.PoolDataSource.getStatistics
メソッドは、それ自体でコールすることも可能であり、接続プールの全統計情報を1つのString
として戻します。
UCPは、すべてのプールの統計情報をダイナミック・モニタリング・サービス(DMS)メトリックの形式にするようにサポートしています。これらのDMSメトリックを収集し利用するには、アプリケーションのクラスパスにdms.jar
ファイルを含める必要があります。
UCPは、プール・マネージャ・インタフェースとプール・マネージャMBeanの両方でDMSメトリックの収集をサポートしています。UnversalConnectionPoolManager.startMetricsCollection
メソッドを使用すると、特定の接続プール・インスタンスに対してDMSメトリックの収集を開始でき、UnversalConnectionPoolManager.stopMetricsCollection
メソッドを使用すると、DMSメトリックの収集を停止できます。メトリックの更新間隔は、UnversalConnectionPoolManager.setMetricUpdateInterval
メソッドを使用して指定できます。プール・マネージャMBeanは同様の操作をエクスポートします。
UCP for JDBCは、一連のOracle RACの実行時統計情報を提供します。この統計情報は、接続プールがOracle RAC機能をどの程度利用しているか判断するために使用されます。また、Oracle RAC機能を使用するために接続プールが適切に構成されているかどうかの判断に役立てるためにも使用されます。統計情報には、FCF処理情報、実行時接続ロード・バランスの成否率、アフィニティ・コンテキストの成否率がレポートされます。
oracle.ucp.jdbc.oracle
パッケージにあるOracleJDBCConnectionPoolStatistics
インタフェースは、Oracle RACの統計情報を接続プールに問い合せるために使用されるメソッドを備えています。このインタフェースのメソッドは、データソースのgetStatistics
メソッドを使用して、プール対応のデータソースおよびプール対応のXAデータソースからコールできます。次に例を示します。
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource(); ... Long rclbS = ((OracleJDBCConnectionPoolStatistics)pds.getStatistics()). getSuccessfulRCLBBasedBorrowCount(); System.out.println("The RCLB success rate is "+rclbS+".");
データソースのgetStatistics
メソッドは、それ自身でコールすることも可能であり、接続プールの全統計情報を1つのString
として戻し、Oracle RACの統計情報を組み込みます。
getFCFProcessingInfo
メソッドは、最新の高速接続フェイルオーバー(FCF)の試行に関する情報をString
の形式で提供します。通常、FCFの情報は、FCFの問題の診断に役立てるために使用されます。この情報は、各FCFの試行結果(成功または失敗)、関連するOracle RACインスタンス、クリーンアップされた接続数、FCFの試行の失敗をトリガーした例外などで構成されます。次の例では、getFCFProcessingInfo
メソッドの使用方法を示します。
Sting fcfInfo = ((OracleJDBCConnectionPoolStatistics)pds.getStatistics()). getFCFProcessingInfo(); System.out.println("The FCF information: "+fcfInfo+".");
次の例では、getFCFProcessingInfo()
メソッドの出力文字列を示します。
Oct 28, 2008 12:34:02 SUCCESS <Reason:planned> <Type:SERVICE_UP> \ <Service:"svvc1"> <Instance:"inst1"> <Db:"db1"> \ Connections:(Available=6 Affected=2 FailedToProcess=0 MarkedDown=2 Closed=2) \ (Borrowed=6 Affected=2 FailedToProcess=0 MarkedDown=2 MarkedDeferredClose=0 Closed=2) \ TornDown=2 MarkedToClose=2 Cardinality=2 ... Oct 28, 2008 12:09:52 SUCCESS <Reason:unplanned> <Type:SERVICE_DOWN> \ <Service:"svc1"> <Instance:"inst1"> <Db:"db1"> \ Connections:(Available=6 Affected=2 FailedToProcess=0 MarkedDown=2 Closed=2) \ (Borrowed=6 Affected=2 FailedToProcess=0 MarkedDown=2 MarkedDeferredClose=0 Closed=2) ... Oct 28, 2008 11:14:53 FAILURE <Type:HOST_DOWN> <Host:"host1"> \ Connections:(Available=6 Affected=4 FailedToProcess=0 MarkedDown=4 Closed=4) \ (Borrowed=6 Affected=4 FailedToProcess=0 MarkedDown=4 MarkedDeferredClose=0 Closed=4)
ロギングを有効にしている場合、前述の情報はUCPログでも利用でき、FCFの結果を検証できます。
実行時接続ロード・バランスの統計情報は、接続プールがOracle RACデータベースの実行時接続ロード・バランシング機能を効率的に利用しているかどうかの判断に使用されます。この統計情報には、実行時接続ロード・バランシングのアルゴリズムを利用できたリクエストの数と、アルゴリズムを利用できなかったリクエストの数がレポートされます。getSuccessfulRCLBBasedBorrowCount
メソッドとgetFailedRCLBBasedBorrowCount
メソッドが、それぞれの統計情報の取得に使用されます。次の例では、getFailedRCLBBasedBorrowCount
メソッドの使用方法を示します。
Long rclbF = ((OracleJDBCConnectionPoolStatistics)pds.getStatistics()). getFailedRCLBBasedBorrowCount(); System.out.println("The RCLB failure rate is: "+rclbF+".");
失敗率が高い場合は、RACロード・バランシング・アドバイザまたは接続プールが適切に構成されていない可能性を示しています。
接続アフィニティの統計情報は、接続プールが接続アフィニティを効率的に利用しているかどうかの判断に使用されます。この統計情報には、アフィニティ・コンテキストと一致した流用リクエストの数と、アフィニティ・コンテキストと一致しなかったリクエストの数がレポートされます。getSuccessfulAffinityBasedBorrowCount
メソッドとgetFailedAffinityBasedBorrowCount
メソッドが、それぞれの統計情報の取得に使用されます。次の例では、getFailedAffinityBasedBorrowCount
メソッドの使用方法を示します。
Long affF = ((OracleJDBCConnectionPoolStatistics)pds.getStatistics()). getFailedAffinityBasedBorrowCount(); System.out.println("The connection affinity failure rate is: "+affF+".");
UCP for JDBCは、JDKロギング機能(java.util.logging
)を利用しています。ロギングは、デフォルトでは無効になっており、ログ・メッセージを出力するために構成する必要があります。ロギングは、ログ構成ファイルを使用するか、APIレベルの構成を使用して、構成できます。
注意: デフォルトのログ・レベルはnull です。そのため、デフォルトでは親のログ出力でのログ・レベルが必ず使用されます。 |
ロギングは、プロパティ・ファイルを使用して構成できます。プロパティ・ファイルの場所は、ロギング構成ファイル・プロパティのJavaプロパティとして設定する必要があります。次に例を示します。
java -Djava.util.logging.config.file=log.properties
ロギング・プロパティ・ファイルは、ログの書込みに使用するハンドラ、ログの書式設定に使用するフォーマッタ、デフォルトのログ・レベルの他、特定のパッケージおよびクラスのログ・レベルを定義します。次に例を示します。
handlers = java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter oracle.ucp.level = FINEST oracle.ucp.jdbc.PoolDataSource = WARNING
カスタム・フォーマッタは、UCP for JDBCに同梱されており、フォーマッタ・プロパティの値として入力できます。次に例を示します。
java.util.logging.ConsoleHandler.formatter = oracle.ucp.util.logging.UCPFormatter
Oracle Technology Network(OTN)から、UCPに用意されているucpdemos.jar
ファイルをダウンロードすることもできます。このファイルにはサンプルのロギング・プロパティ・ファイルのリストがあります。たとえば、このファイルには、高速接続フェイルオーバー(FCF)機能のトラブルシューティングに使用できるロギング・プロパティ・ファイルがあります。
ロギングは、UCP for JDBC APIまたはJDK APIのいずれかを使用して動的に構成できます。UCP for JDBC APIを使用する場合は、接続プール・マネージャを使用してロギングを構成します。JDKを使用する場合は、java.util.logging
実装を使用してロギングを構成します。
次の例では、UCP for JDBC APIを使用してロギングを構成しています。
UniversalConnectionPoolManager mgr = UniversalConnectionPoolManagerImpl. getUniversalConnectionPoolManager(); mgr.setLogLevel(Level.FINE);
次の例では、JDKロギング実装を直接使用しています。
Logger.getLogger("oracle.ucp").setLevel(Level.FINEST); Logger.getLogger("oracle.ucp.jdbc.PoolDataSource").setLevel(Level.FINEST);
次に、JDBCでサポートされる各ログ・レベルを示します。FINE
よりも低いレベルでは、ユーザーにとって重要とはかぎらない出力が生成されます。FINER
よりも低いレベルでは、非常に大量の出力が生成されます。
INTERNAL_ERROR
: 内部エラー
SEVERE
: SQL例外
WARNING
: SQL警告およびその他の隠れた問題
INFO
: パブリック・イベント(接続の試行やOracle RACイベントなど)
CONFIG
: SQL文
FINE
: パブリックAPI
TRACE_10
: 内部イベント
FINER
: 内部API
TRACE_20
: 内部デバッグ
TRACE_30
: 大量の内部API
FINEST
: 大量の内部デバッグ
多くのUCPメソッドは、例外チェーンがサポートされたUniversalConnectionPoolException
をスローします。スローした例外で、printStackTrace
メソッドをコールすると、例外の根本原因を特定できます。UniversalConnectionPoolException
には、45000から45499までの範囲の標準のOracleエラー・コードが含まれています。getErrorCode
メソッドを使用すると、例外のエラー・コードを取得できます。