Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの構成と管理 12cリリース1 (12.1.1) B65892-02 |
|
前 |
次 |
この章では、実行中のサーバーおよびそのコンテナ内にデプロイされているアプリケーションによって生成された診断データを作成、収集、分析、アーカイブし、それらの診断データにアクセスする方法について説明します。
このデータを基に、サーバーおよびアプリケーションの実行時パフォーマンスを把握できます。また、フォルト発生時に、このデータを使用して、障害を隔離および診断できます。WebLogic JDBCは、このサービスを利用して、実行時の統計、ある一定の期間に渡ってのプロファイル情報、ロギング、およびデバッグの機能を拡張し、WebLogicドメインが円滑に実行され続けるよう支援します。
実行時の統計を使用すると、WebLogicドメインのデータ・ソースをモニターして、問題があるかどうかを確認することができます。問題があれば、プロファイリングによって、問題の原因となっているアプリケーションを判断できます。アプリケーションを絞り込んだら、JDBCデバッグ機能を使用して、そのアプリケーション内の問題点を突き止めます。
次の項では、JDBCオブジェクトのモニターについて詳細に説明します。
実行時の統計を表示すると、WebLogicドメインのデータ・ソースをモニターできます。
管理コンソールまたはJBCDataSourceRuntimeMBean
により、データ・ソースの実行時統計を表示できます。JDBCDataSourceRuntimeMBean
は、データ・ソースの現在の状態およびアクティブな平均接続数、現在のアクティブな接続数および最大アクティブ接続数など、データ・ソースの統計データの取得方法を提供します。詳細は、Oracle WebLogic Server MBeanリファレンスのJDBCDataSourceRuntimeMBeanに関する項を参照してください。
管理コンソールまたはJBCDataSourceRuntimeMBean
を介してPrepared Statementキャッシュの実行時統計を表示できます。詳細は、Oracle WebLogic Server MBeanリファレンスのJDBCDataSourceRuntimeMBeanに関する項を参照してください。
10.3.6より前のWebLogic Serverでは、データ・ソース・プロファイル・レコードはWLDFイベントとして記録されていました。使いやすさとパフォーマンスを向上させるため、WebLogic Serverではイベントの格納にデータ・ソース・プロファイル・ログが使用されるようになりました。プロファイル・ログには次のような利点があります。
ログ・ローテーション: 標準のWebLogicロギング実装を使用して、古いデータの構成、ローテーションおよびリタイアを行うことができます。Oracle WebLogic Server MBeanリファレンスのDataSourceLogFileMBeanを参照してください。
データのアクセシビリティ: 一般的なテキスト・エディタ、WLDFデータ・アクセッサまたは管理コンソールを使用できます。「診断データへのアクセス」を参照してください。
データ・ソース・プロファイリングのログの基本的な特性は、次のとおりです。
すべてのデータ・ソース・プロファイル・タイプに対して単一のログ・ファイルが使用されます。各プロファイル・レコードには、フィルタ処理のためにプロファイル・タイプ名があります。「プロファイル・タイプ」を参照してください。
サーバー上のすべてのデータ・ソースに対して単一のログ・ファイルが使用されます。各プロファイル・レコードには、フィルタ処理のための修飾されたデータ・ソース名(適用可能な場合、application
@
module
@
component
で完全修飾された名前)があります。Oracle WebLogic Server MBeanリファレンスのDataSourceLogFileMBeanを参照してください。
WebLogicロギング・サービスの詳細は、次の資料を参照してください。
Oracle WebLogic Server管理コンソール・ヘルプのデータ・ソース・プロファイル・ログの有効化と構成に関する項
『Oracle WebLogic Serverログ・ファイルの構成とログ・メッセージのフィルタ処理』のWebLogicロギング・サービスに関する項を参照してください。
表示されている統計からWebLogic Serverドメインに問題があるとわかった場合は、任意のデータ・ソースを構成して、問題の原因を特定するのに役立つ、プロファイル情報を収集できます。収集されたプロファイル情報は、プロファイル・ログのレコードに格納されます。後述するように、各フィールドには、プロファイル・タイプごとに別の情報が格納されます。
プロファイリングのためにデータ・ソースを構成する際には、プロファイル・データ収集の間隔(「収集間隔(秒)のプロファイル」)を指定する必要があります。間隔を0に設定すると、データ収集は無効化されます。Oracle WebLogic Server管理コンソール・ヘルプのJDBCデータ・ソースの診断プロファイリングの構成に関する項を参照してください。
このドキュメントの後続の項で説明するとおり、データ・ソースおよびプリペアド文キャッシュについて、以下の情報のプロファイリングを選択することができます。
データ・ソース内の接続のプールからの接続を現在使用しているスレッドに関する情報を収集するには、接続使用状況のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を取得できない原因を特定するのに役立ちます。
注意: デフォルトでは、接続使用状況のプロファイルを独自に有効化しても、接続を使用しているスレッドのスタック・トレースは得られません。この情報を得るには、接続の有効化に加えて、接続リークのプロファイルを有効化する必要があります。接続リークのプロファイルの詳細は、「接続リーク(PROFILE_TYPE_CONN_LEAK_STR)」を参照してください。 |
レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 接続ID
User - 接続を使用しているスレッドのスタック・トレース
Timestamp - 接続がいつスレッドに渡されたかを示すタイムスタンプ
データ・ソースからの接続の予約を現在待機しているスレッドに関する情報を収集するには、待機中の接続予約のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を取得できない、または接続を待機できない原因を特定するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - スレッドID
User - 接続を待機しているスレッドのスタック・トレース
Timestamp - スレッドがいつ接続を待機し始めたのかを示すタイムスタンプ
データ・ソースからの接続を予約しようとして接続の取得に失敗するスレッドに関する情報を収集するには、接続予約失敗のプロファイリングを有効化します。このプロファイル情報は、アプリケーションがデータ・ソースからの接続を、予約後も取得できない原因を特定するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - スレッドID
User - 接続を待機しているスレッドに加えて、予約リクエストが失敗したときに受け取られる例外のスタック・トレース
Timestamp - 予約リクエストがいつ失敗したのかを示すタイムスタンプ
データ・ソースからの接続を予約したスレッドと、リークした(接続のプールに正常に戻されなかった)接続の情報を収集するには、接続リークのプロファイリングを有効化します。このプロファイル情報は、JDBC接続を正しく閉じていないアプリケーションを特定するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 接続ID
User - 接続を待機しているスレッドのスタック・トレース
Timestamp - 接続リークがいつ検出されたのかを示すタイムスタンプ
最後に接続を使用した以前のスレッドに関する情報を収集するには、接続の最終使用状況のプロファイリングを有効化します。この情報は、接続に対する後続のXA操作の失敗を招く保留中のトランザクションで発生した接続に関する問題をデバッグする際に役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - スローされたXA例外のスタック・トレース
User - 接続を最後に使用したスレッドのスタック・トレース
Timestamp - 例外がいつスローされたのかを示すタイムスタンプ
別のスレッドによって以前に取得された接続を誤って使用するスレッドに関する情報を収集するには、マルチスレッド接続使用状況のプロファイリングを有効にします。この情報は、接続が複数のスレッドによって同時に使用されていることが原因ではないかと思われる問題をアプリケーションが報告した場合に有用です。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 接続を使用していることが検出された別のスレッドのスタック・トレース
User - 接続を予約したスレッドのスタック・トレース
Timestamp - 複数のスレッドが接続を使用していることがいつ検出されたのかを示すタイムスタンプ
文キャッシュに追加されたプリペアド文と呼出し可能文、およびキャッシュされた文から発生したスレッドに関する情報を収集するには、文キャッシュ・エントリのプロファイリングを有効にします。この情報は、キャッシュがどのように使われているかを判断するのに役立ちます。レコードには、次の情報が格納されています。
PoolName - この接続が属するデータ・ソースの名前
ID - 文の文字列表現
User - 文を使用しているスレッドのスタック・トレース
Timestamp - 文がいつキャッシュに追加されたかを示すタイムスタンプ
文キャッシュからの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ドライバを呼び出すと、必ずそのドライバを実装したクラスにコールバックが送信されます。
特定のアプリケーションに問題があると突き止めたら、WebLogic Serverのデバッグ機能をアクティブ化して、アプリケーション内の特定の問題を探し当てることができます。
デバッグは、適切なServerDebug
構成属性を「true」
に設定することで有効化できます。オプションで、サーバーのStdoutSeverity
を「Debug」
に設定することもできます。
構成属性は、以下のいずれかの方法で変更できます。
コマンド・ラインで適切なプロパティを設定します。例:
-Dweblogic.debug.DebugJDBCSQL=true -Dweblogic.log.StdoutSeverity="Debug"
この方法は静的なものであり、サーバーの起動時にのみ使用できます。
WebLogic Server 管理コンソールを使用して、デバッグ値を設定します。
管理コンソールのチェンジ・センターで「ロックして編集」をクリックします(まだ行っていない場合) (Oracle WebLogic Serverの理解のチェンジ・センターの使用に関する項を参照してください)。
管理コンソールの左ペインで、「環境」を展開して「サーバー」を選択します。
「サーバーの概要」ページで、デバッグを有効化または無効化するサーバーをクリックして、そのサーバーの設定ページを開きます。
「デバッグ」をクリックします。
「デフォルト」を展開します。
変更するデバッグ・スコープまたは属性のチェック・ボックスを選択します。
「有効化」 (または「無効化」)を選択して、チェックを入れたデバッグ・スコープまたは属性を有効化(または無効化)します。
管理コンソールのチェンジ・センターで「変更のアクティブ化」をクリックしてこれらの変更をアクティブ化します。
すべての変更がすぐに有効になるわけではありません - いくつかの変更を有効にするには、再起動する必要があります(Oracle WebLogic Serverの理解のチェンジ・センターの使用に関する項を参照してください)。
この方法は動的なものであり、サーバーの実行中にデバッグを有効化するのに使用できます。
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の使用は動的な手法で、サーバーの実行中にデバッグを有効化するために使用できます。
コンソール、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の登録されたデバッグ・スコープを示します。
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) : トランザクション・デバッグをトレースします。
WebLogic Serverリリース10.3.6.0以上では、UCPおよびONSのパッケージ名が再パッケージされなくなり、これらのコンポーネントのデバッグに影響します。
次のコマンドを使用して、UCPデバッグを直接設定します。
oracle.ucp.level = FINEST; oracle.ucp.jdbc.PoolDataSource = WARNING;