ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの構成と管理
11gリリース1 (10.3.6)
B60997-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

13 WebLogic JDBCリソースのモニター

この章では、実行中のサーバーおよびそのコンテナ内にデプロイされているアプリケーションによって生成された診断データを作成、収集、分析、アーカイブし、それらの診断データにアクセスする方法について説明します。

このデータを基に、サーバーおよびアプリケーションの実行時パフォーマンスを把握できます。また、フォルト発生時に、このデータを使用して、障害を隔離および診断できます。WebLogic JDBCは、このサービスを利用して、実行時の統計、ある一定の期間に渡ってのプロファイル情報、ロギング、およびデバッグの機能を拡張し、WebLogicドメインが円滑に実行され続けるよう支援します。

実行時の統計を使用すると、WebLogicドメインのデータ・ソースをモニターして、問題があるかどうかを確認することができます。問題があれば、プロファイリングによって、問題の原因となっているアプリケーションを判断できます。アプリケーションを絞り込んだら、JDBCデバッグ機能を使用して、そのアプリケーション内の問題点を突き止めます。

次の項では、JDBCオブジェクトのモニターについて詳細に説明します。

実行時の統計の表示

実行時の統計を表示すると、WebLogicドメインのデータ・ソースをモニターできます。

データ・ソースの統計

管理コンソールまたはJBCDataSourceRuntimeMBeanにより、データ・ソースの実行時統計を表示できます。JDBCDataSourceRuntimeMBeanは、データ・ソースの現在の状態およびアクティブな平均接続数、現在のアクティブな接続数および最大アクティブ接続数など、データ・ソースの統計データの取得方法を提供します。詳細は、Oracle WebLogic Server MBeanリファレンスJDBCDataSourceRuntimeMBeanに関する項を参照してください。

プリペアド文キャッシュの統計

管理コンソールまたはJBCDataSourceRuntimeMBeanを介してPrepared Statementキャッシュの実行時統計を表示できます。詳細は、Oracle WebLogic Server MBeanリファレンスJDBCDataSourceRuntimeMBeanに関する項を参照してください。

プロファイル・ロギング

WebLogic Server 10.3.6より前は、データ・ソース・プロファイル・レコードはWLDFイベントとして記録されていました。ユーザビリティとパフォーマンスを向上させるために、WebLogic Serverでイベントの格納にデータ・ソース・プロファイル・ログが使用されるようになりました。プロファイル・ログには次のような利点があります。

データ・ソース・プロファイリングのログの基本的な特性は、次のとおりです。

WebLogicロギング・サービスの詳細は、次の資料を参照してください。

プロファイル情報の収集

表示されている統計からWebLogic Serverドメインに問題があるとわかった場合は、任意のデータ・ソースを構成して、問題の原因を特定するのに役立つ、プロファイル情報を収集できます。収集されたプロファイル情報は、プロファイル・ログのレコードに格納されます。後述するように、各フィールドには、プロファイル・タイプごとに別の情報が格納されます。

プロファイリングのためにデータ・ソースを構成する際には、プロファイル・データ収集の間隔(「収集間隔(秒)のプロファイル」)を指定する必要があります。間隔を0に設定すると、データ収集は無効化されます。Oracle WebLogic Server管理コンソール・ヘルプJDBCデータ・ソースに対する診断プロファイルの構成に関する項を参照してください。

プロファイル・タイプ

このドキュメントで後述するように、データ・ソースおよびプリペアド文キャッシュについて、以下の情報のプロファイリングを選択することができます。

接続使用状況(PROFILE_TYPE_CONN_USAGE_STR)

データ・ソース内の接続のプールからの接続を現在使用しているスレッドに関する情報を収集するには、接続使用状況のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を取得できない原因を特定するのに役立ちます。


注意:

デフォルトでは、接続使用状況のプロファイルを独自に有効化しても、接続を使用しているスレッドのスタック・トレースは得られません。この情報を得るには、接続の有効化に加えて、接続リークのプロファイルを有効化する必要があります。接続リークのプロファイルの詳細は、「接続リーク(PROFILE_TYPE_CONN_LEAK_STR)」を参照してください。

レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - 接続ID

  • User - 接続を使用しているスレッドのスタック・トレース

  • Timestamp - 接続がいつスレッドに渡されたかを示すタイムスタンプ

待機中の接続予約(PROFILE_TYPE_CONN_RESV_WAIT_STR)

データ・ソースからの接続の予約を現在待機しているスレッドに関する情報を収集するには、待機中の接続予約のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を取得できない、または接続を待機できない原因を特定するのに役立ちます。レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - スレッドID

  • User - 接続を待機しているスレッドのスタック・トレース

  • Timestamp - スレッドがいつ接続を待機し始めたのかを示すタイムスタンプ

失敗した接続予約(PROFILE_TYPE_CONN_RESV_FAIL_STR)

データ・ソースからの接続を予約しようとして接続の取得に失敗するスレッドに関する情報を収集するには、接続予約失敗のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を、予約後も取得できない原因を特定するのに役立ちます。レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - スレッドID

  • User - 接続を待機しているスレッドに加えて、予約リクエストが失敗したときに受け取られる例外のスタック・トレース

  • Timestamp - 予約リクエストがいつ失敗したのかを示すタイムスタンプ

接続リーク(PROFILE_TYPE_CONN_LEAK_STR)

データ・ソースからの接続を予約したスレッドと、リークした(接続のプールに正常に戻されなかった)接続の情報を収集するには、接続リークのプロファイリングを有効化します。このプロファイル情報は、JDBC接続を正しく閉じていないアプリケーションを特定するのに役立ちます。レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - 接続ID

  • User - 接続を待機しているスレッドのスタック・トレース

  • Timestamp - 接続リークがいつ検出されたのかを示すタイムスタンプ

接続の最終使用状況(PROFILE_TYPE_CONN_LAST_USAGE_STR)

最後に接続を使用した以前のスレッドに関する情報を収集するには、接続の最終使用状況のプロファイリングを有効化します。この情報は、接続に対する後続のXA操作の失敗を招く保留中のトランザクションで発生した接続に関する問題をデバッグする際に役立ちます。レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - スローされたXA例外のスタック・トレース

  • User - 接続を最後に使用したスレッドのスタック・トレース

  • Timestamp - 例外がいつスローされたのかを示すタイムスタンプ

マルチスレッド接続使用状況(PROFILE_TYPE_CONN_MT_USAGE_STR)

別のスレッドによって以前に取得された接続を誤って使用するスレッドに関する情報を収集するには、マルチスレッド接続使用状況のプロファイリングを有効にします。この情報は、接続が複数のスレッドによって同時に使用されていることが原因ではないかと思われる問題をアプリケーションが報告した場合に有用です。レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - 接続を使用していることが検出された別のスレッドのスタック・トレース

  • User - 接続を予約したスレッドのスタック・トレース

  • Timestamp - 複数のスレッドが接続を使用していることがいつ検出されたのかを示すタイムスタンプ

文キャッシュ・エントリ(PROFILE_TYPE_STMT_CACHE_ENTRY_STR)

文キャッシュに追加されたプリペアド文と呼出し可能文、およびキャッシュされた文から発生したスレッドに関する情報を収集するには、文キャッシュ・エントリのプロファイリングを有効にします。この情報は、キャッシュがどのように使われているかを判断するのに役立ちます。レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - 文の文字列表現

  • User - 文を使用しているスレッドのスタック・トレース

  • Timestamp - 文がいつキャッシュに追加されたかを示すタイムスタンプ

文の使用状況(PROFILE_TYPE_STMT_USAGE_STR)

文キャッシュからのSQL文を現在実行しているスレッドに関する情報を収集するには、文の使用状況のプロファイリングを有効にします。この情報は、文がどのように使われているかを判断するのに役立ちます。レコードには、次の情報が格納されています。

  • PoolName - この接続が属するデータ・ソースの名前

  • ID - 文を介して実行されているSQL文

  • User - 文を使用しているスレッドのスタック・トレース

  • Timestamp - 文が実行されている期間

診断データへのアクセス

診断データにアクセスするには、次のいずれかの方法を使用できます。

  • WebLogic管理コンソール。以下を参照してください。

    • Oracle WebLogic Server管理コンソール・ヘルプログの表示と構成に関する項。

    • Oracle WebLogic Server管理コンソール・ヘルプJDBCデータ・ソースの統計のモニターに関する項を参照してください。

  • WebLogic診断フレームワーク(WLDF)のデータ・アクセッサ・コンポーネント。『Oracle WebLogic Server診断フレームワークの構成と使用』のデータ・アクセッサを使用した診断データへのアクセスに関する項

  • テキスト・エディタを使用した手動での情報のレビュー。

  • DataSourceプロファイリングで実行する場合、デフォルトの収集時間は300秒なので、データが即時に表示されないことがあります。収集時間を小さい値(5秒など)に設定すると、結果を表示しやすくなります。

ドライバ・レベルの統計をモニターするためのコールバック(非推奨)


注意:

この機能はWebLogic Server 10.3.6.0で非推奨となり、将来のリリースでは削除される可能性があります。

WebLogic Serverでは、JDBCドライバに対して呼び出されるメソッドのコールバックを提供しています。これらのコールバックは、実行されているメソッド、任意のスローされた例外、ドライバ・メソッドの実行に費やされた時間など、JDBCドライバの使用状況をモニターおよびプロファイリングするために使用できます。

コールバック機能を有効化するには、JDBCデータ・ソース記述子(モジュール)内のdriver-interceptor要素に対するコールバック・ハンドラの完全修飾パスを指定する必要があります。コールバック・ハンドラはweblogic.jdbc.extensions.DriverInterceptorインタフェースを実装している必要があります。JDBCドライバのコールバックが有効化されていると、WebLogic ServerはJDBCドライバ内の任意のメソッドの呼出し前と呼出し後に、登録されたコールバック・ハンドラのpreInvokeCallback()postInvokeExceptionCallback()、またはpostInvokeCallback()メソッドを呼び出します。

アプリケーションがJDBCドライバを呼び出すと、必ずそのドライバを実装したクラスにコールバックが送信されます。

JDBCデータ・ソースのデバッグ

特定のアプリケーションに問題があると突き止めたら、WebLogic Serverのデバッグ機能をアクティブ化して、アプリケーション内の特定の問題を探し当てることができます。

デバッグの有効化

デバッグは、適切なServerDebug構成属性を「true」に設定することで有効化できます。オプションで、サーバーのStdoutSeverity「Debug」に設定することもできます。

構成属性は、以下のいずれかの方法で変更できます。

コマンド・ラインを使用してデバッグを有効化する

コマンド・ラインで適切なプロパティを設定します。例:

-Dweblogic.debug.DebugJDBCSQL=true 
-Dweblogic.log.StdoutSeverity="Debug"

この方法は静的なものであり、サーバーの起動時にのみ使用できます。

WebLogic Server 管理コンソールを使用してデバッグを有効化する

WebLogic Server 管理コンソールを使用して、デバッグ値を設定します。

  1. 管理コンソールのチェンジ・センターで「ロックして変更」をまだクリックしていない場合、それを行います (『Oracle WebLogic Serverの紹介』のチェンジ・センターの使用に関する項を参照してください)。

  2. 管理コンソールの左ペインで、「環境」を展開して「サーバー」を選択します。

  3. 「サーバーの概要」ページで、デバッグを有効化または無効化するサーバーをクリックして、そのサーバーの設定ページを開きます。

  4. 「デバッグ」をクリックします。

  5. 「デフォルト」を展開します。

  6. 変更するデバッグ・スコープまたは属性のチェック・ボックスを選択します。

  7. 「有効化」 (または「無効化」)を選択して、チェックを入れたデバッグ・スコープまたは属性を有効化(または無効化)します。

  8. 管理コンソールのチェンジ・センターで「変更のアクティブ化」をクリックしてこれらの変更をアクティブ化します。

  9. すべての変更がすぐに有効になるわけではありません - いくつかの変更を有効にするには、再起動する必要があります(『Oracle WebLogic Serverの紹介』のチェンジ・センターの使用に関する項を参照してください)。

    この方法は動的なものであり、サーバーの実行中にデバッグを有効化するのに使用できます。

WebLogic Scripting Toolを使用してデバッグを有効化する

WebLogic Scripting Tool (WLST)を使用してデバッグ値を設定します。たとえば、次のコマンドでは、debug.pyというデバッグ値を設定するためのプログラムが実行されます。

java weblogic.WLST debug.py

debug.py programプログラムには、次のコードが含まれています。

user='user1'
password='password'
url='t3://localhost:7001'
connect(user, password, url)
edit()
cd('Servers/myserver/ServerDebug/myserver')
startEdit()
set('DebugJDBCSQL','true')
save()
activate()

JavaからもWLSTを使用することができることに注意してください。デバッグ値の設定に使用されるJavaファイルの例を示します。

import weblogic.management.scripting.utils.WLSTInterpreter;
import java.io.*;
import weblogic.jndi.Environment;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class test {
 public static void main(String args[]) {
try {
WLSTInterpreter interpreter = null;
String user="user1";
String pass="pw12ab";
String url ="t3://localhost:7001";
Environment env = new Environment();
env.setProviderUrl(url);
env.setSecurityPrincipal(user);
env.setSecurityCredentials(pass);
Context ctx = env.getInitialContext();

interpreter = new WLSTInterpreter();
interpreter.exec
("connect('"+user+"','"+pass+"','"+url+"')");
interpreter.exec("edit()");
interpreter.exec("startEdit()");
interpreter.exec
("cd('Servers/myserver/ServerDebug/myserver')");
interpreter.exec("set('DebugJDBCSQL','true')");
interpreter.exec("save()");
interpreter.exec("activate()");

} catch (Exception e) {
System.out.println("Exception "+e);
}
}
}

WLSTの使用は動的な手法で、サーバーの実行中にデバッグを有効化するために使用できます。

config.xmlファイルへの変更

コンソール、WLST、またはコマンド・ラインでデバッグ特性を変更すると、その内容がconfig.xmlファイルに反映されます。例13-1を参照してください。

例13-1 JDBCのデバッグ・スタンザのサンプル

.
.
.
<server>
<name>myserver</name>
<server-debug>
<debug-scope>
<name>weblogic.transaction</name>
<enabled>true</enabled>
</debug-scope>
<debug-jdbcsql>true</debug-jdbcsql>
</server-debug>
</server> 
.
.
.

以下のconfig.xmlのサンプル(抜粋)に、トランザクション・デバッグのスコープ(複数のデバッグ属性)および1つのJDBC属性を示します。

JDBCのデバッグ・スコープ

次に、JDBCの登録されたデバッグ・スコープを示します。

  • DebugJDBCSQL (スコープweblogic.jdbc.sql) - 引数と戻り値、スローされた例外など、呼び出されたすべてのJDBCメソッドに関する情報を出力します。

  • DebugJDBCConn (スコープweblogic.jdbc.connection) - データ・ソース内のすべての接続予約および解放の操作、ならびに接続を取得したり閉じたりするためのすべてのアプリケーション・リクエストを追跡します。

  • DebugJDBCONS (スコープweblogic.jdbc.rac) : 低レベルのONSデバッグをトレースします。

  • DebugJDBCRAC (スコープweblogic.jdbc.rac) : RACデバッグをトレースします。

  • DebugJDBCUCP (スコープweblogic.jdbc.rac) : 低レベルのUCPデバッグをトレースします。

  • DebugJDBCREPLAY (スコープweblogic.jdbc.rac) : REPLAYデバッグをトレースします。

  • DebugJDBCRMI (スコープweblogic.jdbc.rmi) - JDBCSQLと同様に、ただしRMIレベルで機能します。これとJDBCSQLを有効にすると、クライアントから呼び出される各操作につき、2セットのデバッグ・メッセージが取得されます。

  • DebugJDBCInternal (スコープweblogic.jdbc.internal) - データ・ソース、接続環境、およびデータ・ソース・マネージャに関連するweblogic/jdbc/common/internalにおける低レベルのデバッグ。

  • DebugJDBCDriverLogging (スコープweblogic.jdbc.driverlogging) - JDBCドライバ・レベルでのロギングを有効化します(これはServerMBean JDBCLoggingEnabledおよびgetJDBCLogFileNameの代わりとなります)。Oracleでドライバ・レベルのトレースを取得するには、ojdbc6.jarではなくojdbc6_g.jarを使用する必要があります。このデバッグ・スコープの場合、サーバー起動時にコマンド・ラインまたは構成によって一度オンにすることはできますが、(DriverManagerインタフェースがあるため)動的にオンまたはオフにすることはできません。

  • DebugJTAJDBC (スコープweblogic.jdbc.transaction) : トランザクション・デバッグをトレースします。

UCP/ONSのデバッグの設定

WebLogic Serverリリース10.3.6.0以上では、UCPおよびONSのパッケージ名が再パッケージされなくなり、これらのコンポーネントのデバッグに影響します。

UCPのデバッグ

次のコマンドを使用して、UCPデバッグを直接設定します。

oracle.ucp.level = FINEST;
oracle.ucp.jdbc.PoolDataSource = WARNING;

ONSのデバッグ

ONSのデバッグを有効にするには、次のコマンドを使用します。

oracle.ons.debug=true

出力するには、次のコールを行います。

oracle.ons.ONS public static void setLogStream(PrintStream ps, PrintStream ps2);

リクエストの仕分け

デバッグの別のオプションとしては、JDBCサブシステムを介して個別の(通常は、「仕分けされた」)アプリケーション・リクエストのフローをのトレースする方法があります。詳細は、『Oracle WebLogic Server診断フレームワークの構成と使い方』のDyeInjectionモニターによる仕分けベクトルの構成に関する項を参照してください。