ページの先頭行へ戻る
Symfoware Server V12.1.x アプリケーション開発ガイド(JDBCドライバ編)
FUJITSU Software

5.4.2 JDBCスナップによる対処

JDBCスナップには、アプリケーション実行時に使用されたJDBC APIごとに、レスポンス性能と入出力データの情報が出力されます。

レスポンス性能の情報から、API単位で性能コストを算出し、アプリケーションとSymfoware/RDBでの所要時間を分析することができます。

また入出力データの情報から、動作異常の原因がどこにあるかを分析することができます。

注意

本機能の利用は性能に影響を与えるため、デバッグ作業が終了したら、JDBC_SNAP=(OFF)を指定してください。

5.4.2.1 JDBCスナップの採取方法

JDBCスナップの採取は、以下の手順で実行します。

  1. 任意のファイルを用意する。

  2. 1.で用意したファイル内に実行パラメタ“JDBC_SNAP”を指定する。

  3. アプリケーション実行時に、1.で用意したファイル名を指定する。

記述形式

JDBCスナップを出力するには、任意のファイルを用意し、ファイル内に実行パラメタ“JDBC_SNAP”を記述します。

JDBC_SNAP=(出力モード[,スナップファイル名][,出力レベル])

イコール以降を囲むカッコ“()”は、省略可能です。

実行パラメタの右カッコ“)”以降の記述は、コメントとみなします。

実行パラメタにコメントを記述した記述例

JDBC_SNAP=(ON,/tmp/symfo.snp,1)  JDBCスナップ

行頭にセミコロン“;”のある行は、コメントとみなします。

キーワード、等号“=”、カッコ“()”、コンマ“,”およびセミコロン“;”の前後には、空白またはタブを記述することができます。

複数記述した場合には、最後に指定された記述が有効になります。

JDBC_SNAP=(ON,/tmp/symfo.snp,1)
JDBC_SNAP=(OFF)  ←こちらの記述が有効になります

コンマ“,”の前後で改行することができます。ただしその場合、カッコ“()”を省略することはできません。

JDBC_SNAP=(ON,↓
          /tmp/symfo.snp,1) ↓

↓:改行


値の並びで途中の値を省略する場合には、コンマだけを記述します。

JDBC_SNAP=(ON,,1)  ←スナップファイル名を省略した例

最後に指定した値の後ろのコンマ“,”は省略することができます。

JDBC_SNAP=(ON)  ←出力モード以降を省略した例

アプリケーション実行時の指定形式

アプリケーション実行時に、JDBCドライバの環境変数SYMJDBCENVに、実行パラメタを指定したファイル名を絶対パスで指定します。

java -DSYMJDBCENV=/tmp/symjdbc.env

パラメタの意味

パラメタの詳細について、以下に示します。

表5.6 パラメタの詳細

パラメタ

範囲

省略値

詳細

出力モード

(必須)

ON

OFF

OFF

ON :トレース機能を利用する場合に指定します。

OFF:トレース機能を利用しない場合に指定します。

ファイル名

(省略可能)

任意

symfojdbc_プロセスID_コネクション番号.snp

出力するトレースファイルのファイル名を指定します。

出力ファイルはプロセス/コネクションごとに作成されます。同時に複数のプロセス/コネクションを使用するアプリケーションの場合には複数の出力ファイルが作成されます。

ファイル名にはパスと拡張子名を指定でき、プロセスIDとコネクションを識別する数値(コネクション番号)が自動的にファイル名の後に付加されます。パスが省略された場合は実行するアプリケーションのカレントディレクトリに出力します。

例)指定したファイル名:symjdbc.log

実際のファイル名:symjdbc_2435_2.log

出力レベル

(省略可能)

1~2

2

出力する情報のレベルとして1または2を指定します。省略した場合は、2が指定されたとみなします。出力レベルの指定と出力情報の対応については、“出力情報”を参照してください。

出力情報

出力レベル1:性能分析用

実行されたJDBC API名とそのAPIの開始時刻、終了時刻および開始から終了までの経過時間が出力されます。

出力レベル2:動作結果確認用

出力レベル1の情報に加えて、実行されたJDBC APIの入出力データが出力されます。

表5.7 出力レベルと出力情報

情報

出力レベル:1

出力レベル:2

開始時刻

API名

スレッド名

環境情報およびオプション情報

コネクションを識別する数値(コネクション番号)

文を識別する数値(文番号)

SQL文

○(注)

入力データ

出力データ

エラー情報

終了時刻(経過時間)

○:出力あり

-:出力なし

注)PreparedStatementインタフェースまたはCallableStatementインタフェース使用時に出力されます。

出力情報詳細

出力情報の詳細を以下に示します。

表5.8 出力情報と出力形式

出力情報

出力形式

開始時刻

JDBC-API START YYYY/MM/DD HH:MM:SS.sss

API名

API-NAME : インタフェース名API名

スレッド名

API-THREAD : スレッド名

コネクションを識別する数値(コネクション番号)

API-CONNECTION :数値

文を識別する数値(文番号)

API-STATEMENT : 数値

環境情報およびオプション情報

url type=(symford/symfold)

host=(ホスト名)

port=(ポート番号)

database=(データベース名)

schema=(デフォルトスキーマ名)

maxconnections=(最大コネクション数)

lang=(言語)

ctuneparam=(オプション文字列)

codeselect=(OS/UTF-8)

javaconverter=(コンバータ名)

など

SQL文

SQL文は文番号の後ろまたは入力データ域に出力されます。

  • 文番号の後ろに出力される場合

例)API-STATEMENT : 3 (SELECT * FROM GENERAL.EMPLOYEE)

  • 入力データ域に出力される場合

出力レベル1の場合の例)1: SELECT * FROM GENERAL.EMPLOYEE

出力レベル2の場合の例)“入力データが文字またはバイナリの場合”を参照してください

入力データ

API-INPUT-VARIABLE

入力データ

  • 入力データが文字またはバイナリの場合

例)1: ...パラメタ番号

0000: 5B CC 58 EB 90 1A ...(1) 富士通 ...(2)

(1):UNICODEの値をバイナリで出力

(2):OSのコードで文字列を出力

  • 入力データが数値の場合

例)1: 100

出力データ

API-OUTPUT-VARIABLE

出力データ

出力形式は入力データと同様です。

エラー情報

出力データ域に出力されます。

終了時刻(経過時間)

JDBC-API END YYYY/MM/DD HH:MM:SS.sss (HH:MM:SS.sss)

()内は経過時間

5.4.2.2 JDBCスナップの分析方法

出力されたJDBCスナップの分析方法について説明します。

JDBCスナップには、以下の形式で情報が出力されます。

ここでは出力レベル2を例に説明します。

出力例

JDBC-API START 2007/04/17 09:25:55.693         ...開始時刻
API-NAME       : getConnection                 ...API名
API-THREAD     : main
API-INPUT-VARIABLE
    url type=symfold                           ...環境情報およびオプション情報
    host=
    port=26551
    database=COMPANY
    schema=GENERAL
    maxconnections=2147483647
    lang=JA
    ctuneparam=
        :
API-OUTPUT-VARIABLE
    1: 2
JDBC-API END   2007/04/17 09:25:55.833 (00:00:00.140)  ...終了時刻(経過時間)

JDBC-API START 2007/04/17 09:25:55.833
API-NAME       : Connection.prepareStatement
API-THREAD     : main
API-CONNECTION : 2                              ...コネクション番号
API-INPUT-VARIABLE                              ...入力データ
    1:
0000: 00 55 00 50 00 44 00 41 00 54 00 45 00 20 00 45  UPDATE E
0010: 00 4D 00 50 00 4C 00 4F 00 59 00 45 00 45 00 20  MPLOYEE 
0020: 00 53 00 45 00 54 00 20 00 4E 00 41 00 4D 00 45  SET NAME
0030: 00 3D 00 3F                                      =?
API-OUTPUT-VARIABLE                             ...出力データ
    1: 3
JDBC-API END   2007/04/17 09:25:55.993 (00:00:00.160)

JDBC-API START 2007/04/17 09:25:55.993
API-NAME       : PreparedStatement.executeUpdate
API-THREAD     : main
API-CONNECTION : 2
API-STATEMENT  : 3 (UPDATE EMPLOYEE SET NAME=?) ...文番号(SQL文)
API-INPUT-VARIABLE
API-OUTPUT-VARIABLE
    SQLState  : S1000                           ...エラー情報
    SQLCode   : 1044
    SQLMessage: 必要な入力パラメタが指定されていません
JDBC-API END   2007/04/17 09:25:56.043 (00:00:00.050)

APIごとの所要時間の算出方法

JDBCスナップの情報を利用して、JDBCドライバのAPIごとに、所要時間を算出することができます。

[計算式]
APIごとの所要時間=API_ENDの終了時刻の後ろに出力された、経過時間

アプリケーションの所要時間とSymfoware/RDBの所要時間の算出方法

アプリケーションの所要時間とSymfoware/RDBの所要時間は、以下の方法で算出することができます。

  1. アプリケーション全体の所要時間を算出するロジックを、アプリケーション内に記述します。

  2. 実行パラメタ“JDBC_SNAP”の出力レベルに1を指定して、アプリケーションを実行します。このとき算出された、アプリケーション全体の所要時間を、aとします。

  3. 2.で出力されたJDBCスナップの情報から、APIごとの経過時間の合計を算出します。算出された合計時間を、bとします。

  4. 実行パラメタ“JDBC_SNAP”を指定しないでアプリケーションを実行します。この時のアプリケーション全体の所要時間をcとします。

[計算式]
アプリケーションの所要時間	=a-b
Symfoware/RDBの所要時間 =c-アプリケーションの所要時間