BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic Server パートナーズ ガイド

 Previous Next Contents PDF で侮ヲ  

JDBC プロファイリング MBean の使用

WebLogic Server 管理システムでは、Java Management Extension(JMX)と Managed Bean(MBean)を使用して、サーバをコンフィグレーションします。『WebLogic JMX サービス プログラマーズ ガイド』には、WebLogic Server MBean を使用するための詳細な情報、およびコード サンプルが記載されています。

BEA では、SQL 文、prepared statement、および JDBC 接続リークのメトリックを格納および解析するために使用できる複数の JDBC MBean を提供しています。以降の節では、JDBC プロファイリングを有効にする方法および使用する方法について説明します。詳細については、以下の WebLogic Server MBean および関連するクラスの Javadoc を参照してください。

JDBC プロファイリングの有効化

SQL 文または接続リーク プロファイルを解析する前に、調査する接続プールのプロファイリングを有効にする必要があります。プロファイリングが有効になると、接続プールによってメトリックは、後で解析するために外部リポジトリに格納されます。

アプリケーションは、JDBCConnectionPoolMBean を使用して JDBC プロファイリング オプションを有効および無効にします。標準接続プール プロパティの get/set メソッドを提供するのに加えて、JDBCConnectionPoolMBean はプロファイリングを有効および無効にする次のメソッドを提供します。

WebLogic Server での MBean の取得については、「WebLogic Server MBean へのアクセス」を参照してください。次の例は、JDBCConnectionPoolMBean を取得し、すべてのプロファイリング オプションを有効にするアプリケーションを示します。この例では、各文パラメータについて最大 20 文字を格納します。

// 管理サーバの MBeanHome を取得する
...
JDBCConnectionPoolMBean mbean =
(JDBCConnectionPoolMBean)home.getConfigurationMBean(poolName,
"JDBCConnectionPoolConfig");
mbean.setConnLeakProfilingEnabled(true);
mbean.setSqlStmtParamLoggingEnabled(true);
mbean.setSqlStmtMaxParamLength(maxLen);
...

JDBC プロファイルへのアクセス

必要なプロファイリング オプションを有効にしたら、JDBCStatementProfile クラスおよび JDBCConnectionLeakProfile クラスを使用して、格納されたメトリックを解析できます。これらのプロファイル クラスは共に、JDBCConnectionPoolRuntimeMBean を使用して簡単に取得できます。

JDBCStatementProfile は、接続プールの SQL 文と関連メトリック(およびオプションとして、バインド パラメータ)を格納します。JDBCConnectionLeakProfile は、リークされた接続のスタック トレースを格納します。

すべてのプロファイルを一度に取得すると、非常に多くのリソースが使用される可能性があります。この理由により、通常、アプリケーションは指定した時間にプロファイルのサブセットのみを取得します。これを行うには、最初にストレージ内のプロファイルの合計数を調べてから、より小さいサブセットでプロファイルを取得します。

次の例は、プロファイルの数をより小さい単位に分ける簡単な方法を示します。

// 接続プールをホストするサーバの MBeanHome を取得する
. . .
// 「testPool」接続プールの JDBCRuntimeMbean を取得する
String poolName = "testPool";
JDBCConnectionPoolRuntimeMBean mbean =
(JDBCConnectionPoolRuntimeMBean)home.getRuntimeMBean
(poolName,"JDBCConnectionPoolRuntime");
JDBCConnectionLeakProfile[] profiles = null; 
// 使用可能な prepared statement のキャッシュ プロファイルの合計数を取得する
int profileCount = mbean.getConnectionLeakProfileCount();
// プロファイルの profilesPerStep の数を要求する
int profilesPerStep = 10;
// プロファイル数 profileIndex で開始する
int profileIndex = 0;
boolean done = (profileCount > 0);
while (!done) {
     // プロファイルを取得する
profiles = mbean.getConnectionLeakProfiles(profileIndex,
profilesPerStep);
     // 取得されたプロファイルを調査する
for (int index = 0; index < profiles.length; index++) {
          // プール名を取得する
String poolName = profiles[index].getPoolName();
          // スタック トレースを取得する
String stackTrace = profiles[index].getStackTrace();
}
     profileIndex = profileIndex + profilesPerStep - 1;
     // 取得したプロファイルの数が
// 要求した数よりも少ない場合は終了
done = (profiles.lengh < profilesPerStep);
}

 

Back to Top Previous Next