ヘッダーをスキップ
Oracle® Universal Connection Pool for JDBC開発者ガイド
12cリリース1 (12.1)
B71309-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
次へ
 

10 接続プールの診断

この章の内容は次のとおりです。

プールの統計情報

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は同様の操作をエクスポートします。

Oracle RACの統計情報の表示

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+".");

失敗率が高い場合は、Oracle RACロード・バランシング・アドバイザまたは接続プールが適切に構成されていないことを示している可能性があります。

接続アフィニティの統計情報

接続アフィニティの統計情報は、接続プールが接続アフィニティを効率的に利用しているかどうかの判断に使用されます。この統計情報には、アフィニティ・コンテキストと一致した流用リクエストの数と、アフィニティ・コンテキストと一致しなかったリクエストの数がレポートされます。getSuccessfulAffinityBasedBorrowCountメソッドとgetFailedAffinityBasedBorrowCountメソッドが、それぞれの統計情報の取得に使用されます。次の例では、getFailedAffinityBasedBorrowCountメソッドの使用方法を示します。

Long affF = ((OracleJDBCConnectionPoolStatistics)pds.getStatistics()).
   getFailedAffinityBasedBorrowCount();
System.out.println("The connection affinity failure rate is: "+affF+".");

UCPでのロギングの設定

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 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メソッドを使用すると、例外のエラー・コードを取得できます。